/** * Returns the Contents object if it is {@link PdfStream}, or first stream in the array if it is {@link PdfArray}. * * @return first {@link PdfStream} in Contents object, or {@code null} if Contents is empty. */ public PdfStream getFirstContentStream() { if (getContentStreamCount() > 0) return getContentStream(0); return null; }
/** * Returns the Contents object if it is {@link PdfStream}, or last stream in the array if it is {@link PdfArray}. * * @return first {@link PdfStream} in Contents object, or {@code null} if Contents is empty. */ public PdfStream getLastContentStream() { int count = getContentStreamCount(); if (count > 0) return getContentStream(count - 1); return null; }
/** * Get decoded bytes for the whole page content. * * @return byte array. * @throws PdfException in case of any {@link IOException}. */ public byte[] getContentBytes() { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int streamCount = getContentStreamCount(); byte[] streamBytes; for (int i = 0; i < streamCount; i++) { streamBytes = getStreamBytes(i); baos.write(streamBytes); if (0 != streamBytes.length && !Character.isWhitespace((char) streamBytes[streamBytes.length - 1])) { baos.write('\n'); } } return baos.toByteArray(); } catch (IOException ioe) { throw new PdfException(PdfException.CannotGetContentBytes, ioe, this); } }
/** * Gets the content stream at specified 0-based index in the Contents object {@link PdfArray}. * The situation when Contents object is a {@link PdfStream} is treated like a one element array. * * @param index the {@code int} index of returned {@link PdfStream}. * @return {@link PdfStream} object at specified index. * @throws IndexOutOfBoundsException if the index is out of range */ public PdfStream getContentStream(int index) { int count = getContentStreamCount(); if (index >= count || index < 0) throw new IndexOutOfBoundsException(MessageFormatUtil.format("Index: {0}, Size: {1}", index, count)); PdfObject contents = getPdfObject().get(PdfName.Contents); if (contents instanceof PdfStream) return (PdfStream) contents; else if (contents instanceof PdfArray) { PdfArray a = (PdfArray) contents; return (PdfStream) a.get(index); } else { return null; } }
private void checkPage(PdfPage page) { PdfDictionary pageDict = page.getPdfObject(); if (isAlreadyChecked(pageDict)) return; checkPageObject(pageDict, page.getResources().getPdfObject()); PdfDictionary pageResources = page.getResources().getPdfObject(); checkResources(pageResources); checkAnnotations(pageDict); checkPageSize(pageDict); int contentStreamCount = page.getContentStreamCount(); for (int j = 0; j < contentStreamCount; ++j) { checkedObjects.add(page.getContentStream(j)); } }
/** * Convenience method for fast PdfCanvas creation by a certain page. * * @param page page to create canvas from. */ public PdfCanvas(PdfPage page) { this(page, (page.getDocument().getReader() != null && page.getDocument().getWriter() != null && page.getContentStreamCount() > 0 && page.getLastContentStream().getLength() > 0) || (page.getRotation() != 0 && page.isIgnorePageRotationForContent())); }
private void checkPage(PdfPage page) { PdfDictionary pageDict = page.getPdfObject(); if (isAlreadyChecked(pageDict)) return; checkPageObject(pageDict, page.getResources().getPdfObject()); PdfDictionary pageResources = page.getResources().getPdfObject(); checkResources(pageResources); checkAnnotations(pageDict); checkPageSize(pageDict); int contentStreamCount = page.getContentStreamCount(); for (int j = 0; j < contentStreamCount; ++j) { checkedObjects.add(page.getContentStream(j)); } }
protected void flushSingleRenderer(IRenderer resultRenderer) { Transform transformProp = resultRenderer.<Transform>getProperty(Property.TRANSFORM); if (!waitingDrawingElements.contains(resultRenderer)) { processWaitingDrawing(resultRenderer, transformProp, waitingDrawingElements); if (FloatingHelper.isRendererFloating(resultRenderer) || transformProp != null) return; } if (!resultRenderer.isFlushed() && null != resultRenderer.getOccupiedArea()) { // TODO Remove checking occupied area to be not null when DEVSIX-1001 is resolved. int pageNum = resultRenderer.getOccupiedArea().getPageNumber(); PdfDocument pdfDocument = document.getPdfDocument(); ensureDocumentHasNPages(pageNum, null); PdfPage correspondingPage = pdfDocument.getPage(pageNum); if (correspondingPage.isFlushed()) { throw new PdfException(PdfException.CannotDrawElementsOnAlreadyFlushedPages); } boolean wrapOldContent = pdfDocument.getReader() != null && pdfDocument.getWriter() != null && correspondingPage.getContentStreamCount() > 0 && correspondingPage.getLastContentStream().getLength() > 0 && !wrappedContentPage.contains(pageNum) && pdfDocument.getNumberOfPages() >= pageNum; wrappedContentPage.add(pageNum); if (pdfDocument.isTagged()) { pdfDocument.getTagStructureContext().getAutoTaggingPointer().setPageForTagging(correspondingPage); } resultRenderer.draw(new DrawContext(pdfDocument, new PdfCanvas(correspondingPage, wrapOldContent), pdfDocument.isTagged())); } }
protected void flushSingleRenderer(IRenderer resultRenderer) { Transform transformProp = resultRenderer.<Transform>getProperty(Property.TRANSFORM); if (!waitingDrawingElements.contains(resultRenderer)) { processWaitingDrawing(resultRenderer, transformProp, waitingDrawingElements); if (FloatingHelper.isRendererFloating(resultRenderer) || transformProp != null) return; } if (!resultRenderer.isFlushed() && null != resultRenderer.getOccupiedArea()) { // TODO Remove checking occupied area to be not null when DEVSIX-1001 is resolved. int pageNum = resultRenderer.getOccupiedArea().getPageNumber(); PdfDocument pdfDocument = document.getPdfDocument(); ensureDocumentHasNPages(pageNum, null); PdfPage correspondingPage = pdfDocument.getPage(pageNum); if (correspondingPage.isFlushed()) { throw new PdfException(PdfException.CannotDrawElementsOnAlreadyFlushedPages); } boolean wrapOldContent = pdfDocument.getReader() != null && pdfDocument.getWriter() != null && correspondingPage.getContentStreamCount() > 0 && correspondingPage.getLastContentStream().getLength() > 0 && !wrappedContentPage.contains(pageNum) && pdfDocument.getNumberOfPages() >= pageNum; wrappedContentPage.add(pageNum); if (pdfDocument.isTagged()) { pdfDocument.getTagStructureContext().getAutoTaggingPointer().setPageForTagging(correspondingPage); } resultRenderer.draw(new DrawContext(pdfDocument, new PdfCanvas(correspondingPage, wrapOldContent), pdfDocument.isTagged())); } }
for (int i = canvas.getPage().getContentStreamCount() - 1; i >= 0; --i) { if (canvas.getPage().getContentStream(i).equals(canvas.getPdfCanvas().getContentStream())) { pageStream = true;
for (int i = canvas.getPage().getContentStreamCount() - 1; i >= 0; --i) { if (canvas.getPage().getContentStream(i).equals(canvas.getPdfCanvas().getContentStream())) { pageStream = true;
flushResourcesContentStreams(); int contentStreamCount = getContentStreamCount(); for (int i = 0; i < contentStreamCount; i++) { getContentStream(i).flush(false);