public static void compressPDF(Path originPDF, Path outfilePath) throws IOException { PdfReader pdfReader = new PdfReader(originPDF.toString()); PdfDocument inputPdfDoc = new PdfDocument(pdfReader); File outputPDF = new File(outfilePath.toString()); PdfDocument outPdfDoc = new PdfDocument(new PdfWriter(outputPDF.getPath() ).setSmartMode(true)); int size = inputPdfDoc.getNumberOfPages(); inputPdfDoc.copyPagesTo(1, size, outPdfDoc); outPdfDoc.close(); inputPdfDoc.close(); }
/** * Gets the last page of the document. * * @return last page. */ public PdfPage getLastPage() { return getPage(getNumberOfPages()); }
/** * This method adds the field to the last page in the document. * If there's no pages, creates a new one. * * @param field the {@link PdfFormField} to be added to the form */ public void addField(PdfFormField field) { PdfPage page; if (document.getNumberOfPages() == 0) { document.addNewPage(); } page = document.getLastPage(); addField(field, page); }
/** * Creates and adds new page to the end of document. * * @return added page */ public PdfPage addNewPage() { return addNewPage(getDefaultPageSize()); }
/** * Get the first page of the document. * * @return first page of the document. */ public PdfPage getFirstPage() { checkClosingStatus(); return getPage(1); }
if (document.isAppendMode()) { throw new PdfException(PdfException.FieldFlatteningIsNotSupportedInAppendMode); for (int i = 1; i <= document.getNumberOfPages(); i++) { PdfObject resources = document.getPage(i).getPdfObject().getAsDictionary(PdfName.Resources); initialPageResourceClones.put(i, resources == null ? null : resources.clone()); if (annotation != null && document.isTagged()) { tagPointer = document.getTagStructureContext().removeAnnotationTag(annotation); if (xObjectResources != null && pageResources != null && xObjectResources == pageResources) { xObject.getPdfObject().put(PdfName.Resources, initialPageResourceClones.get(document.getPageNumber(page))); document.getCatalog().remove(PdfName.AcroForm);
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())); } }
/** * 将图片合成为一个PDF * @param inputImage 图片,格式为图片格式 * @param outputPDF 输出文件 * @throws FileNotFoundException * @throws MalformedURLException */ public static void generatePDFFromImage(File[] inputImage,File outputPDF) throws FileNotFoundException, MalformedURLException { List<Image>images=new LinkedList<>(); for(File file:inputImage){ images.add(new Image(ImageDataFactory.create(file.getPath()))); } PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outputPDF.getPath())); images.forEach(image -> pdfDoc.addNewPage(new PageSize(new Rectangle(image.getImageScaledWidth(), image.getImageScaledHeight())))); BackgroundEventHandler handler = new BackgroundEventHandler(images); pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, handler); pdfDoc.close(); }
public static void addBookMark(Book book,String src,String dest){ PdfDocument pdfDoc = null; try { pdfDoc = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); PdfOutline root = pdfDoc.getOutlines(false); PdfDocumentInfo info=pdfDoc.getDocumentInfo(); info.setTitle(book.getName()); info.setAuthor(book.getAuthor()); List<Node> nodes = book.getOutline(); addOutline(nodes, root, pdfDoc); pdfDoc.close(); } catch (IOException e) { e.printStackTrace(); } }
public static String getTitle(String src){ try { PdfDocument pdfDoc = new PdfDocument(new PdfReader(src)); PdfDocumentInfo info = pdfDoc.getDocumentInfo(); String title=info.getTitle(); pdfDoc.close(); return title; } catch (Exception e) { return null; } }
/** * Get the page number associated to the provided widget. * * @param widget PdfWidgetAnnotation from which to extract the page number * @return page number */ protected int getWidgetPageNumber(PdfWidgetAnnotation widget) { int pageNumber = 0; PdfDictionary pageDict = widget.getPdfObject().getAsDictionary(PdfName.P); if (pageDict != null) { pageNumber = document.getPageNumber(pageDict); } else { for (int i = 1; i <= document.getNumberOfPages(); i++) { PdfPage page = document.getPage(i); if (!page.isFlushed()) { if (page.containsAnnotation(widget)) { pageNumber = i; break; } } } } return pageNumber; }
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(pdfDest, writerProps)); pdfDocument.setDefaultPageSize(new PageSize(width, height)); PdfPage page = pdfDocument.addNewPage(); PdfCanvas pageCanvas = new PdfCanvas(page); pdfDocument.close();
protected void manipulatePdf(String dest) throws Exception { PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest)); PdfCanvas canvas = new PdfCanvas(pdfDoc.addNewPage()); Barcode128 code128 = new Barcode128(pdfDoc); code128.setCode("123456789"); code128.setCodeType(Barcode128.CODE128); PdfFormXObject xObject = code128.createFormXObject(Color.BLACK, Color.BLACK, pdfDoc); float x = 36; float y = 750; float w = xObject.getWidth(); float h = xObject.getHeight(); canvas.saveState(); canvas.setFillColor(Color.LIGHT_GRAY); canvas.rectangle(x, y, w, h); canvas.fill(); canvas.restoreState(); canvas.addXObject(xObject, 36, 750); pdfDoc.close(); } }
int size = pdfDocument.getNumberOfPages(); for (int i = 1; i <= size; i++) { PdfPage pdfPage = pdfDocument.getPage(i); List<PdfOutline> outlineList = pdfPage.getOutlines(false); if (outlineList != null) { for (PdfOutline pdfOutline : outlineList) { if (pdfOutline.getTitle().equals(outlineTitle)) { startPage = pdfDocument.getPageNumber(pdfPage); PdfOutline nextOutLine = getAbsoluteTreeNextOutline(pdfOutline); if (nextOutLine != null) { endPage = pdfDocument.getPageNumber(getPageByOutline(i, nextOutLine)) - 1; } else { endPage = size; return null; pdfDocument.copyPagesTo(startPage, endPage, toDocument);
public CompareTool.CompareResult compareWithFile(File file) { PdfDocument cmpDocument = null; try { cmpDocument = new PdfDocument(new PdfReader(file.getAbsolutePath())); return compareWithDocument(cmpDocument); } catch (IOException e) { LoggerHelper.warn(LoggerMessages.CREATE_COMPARE_DOC_ERROR, e, getClass()); return null; } finally { if (cmpDocument != null) { cmpDocument.close(); } } }
@Test public void manipulatePdf() throws IOException { PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC)); Rectangle rect = new Rectangle(36, 750, 523, 56); FontFilter fontFilter = new FontFilter(rect); FilteredEventListener listener = new FilteredEventListener(); LocationTextExtractionStrategy extractionStrategy = listener.attachEventListener(new LocationTextExtractionStrategy(), fontFilter); new PdfCanvasProcessor(listener).processPageContent(pdfDoc.getFirstPage()); String actualText = extractionStrategy.getResultantText(); System.out.println(actualText); pdfDoc.close(); }
@Override public void flush() { for (int i = 0; i < getDocument().getNumberOfPages(); ++i) { createParentTreeEntryForPage(getDocument().getPage(i + 1)); } getPdfObject().put(PdfName.ParentTree, getParentTreeHandler().buildParentTree()); getPdfObject().put(PdfName.ParentTreeNextKey, new PdfNumber((int) getDocument().getNextStructParentIndex())); if (!getDocument().isAppendMode()) { flushAllKids(this); } super.flush(); }
private PdfDocument createPdfDocument(PageRange currentPageRange) { PdfDocument newDocument = new PdfDocument(getNextPdfWriter(currentPageRange), new DocumentProperties().setEventCountingMetaInfo(metaInfo)); if (pdfDocument.isTagged() && preserveTagged) newDocument.setTagged(); if (pdfDocument.hasOutlines() && preserveOutlines) newDocument.initializeOutlines(); return newDocument; }
/** * Convenience method for fast PdfCanvas creation by a certain page. * * @param doc The document * @param pageNum The page number */ public PdfCanvas(PdfDocument doc, int pageNum) { this(doc.getPage(pageNum)); }
if (!document.isTagged() || insertBefore < 1 || insertBefore > document.getNumberOfPages() + 1 ) return; int fromNum = document.getPageNumber(from); if (fromNum == 0 || fromNum == insertBefore || fromNum + 1 == insertBefore) return; Collection<PdfMcr> mcrs = document.getStructTreeRoot().getPageMarkedContentReferences(from); if (mcrs != null) { for (PdfMcr mcr : mcrs) { PdfArray tops = document.getStructTreeRoot().getKidsObject(); for (int i = 0; i < tops.size(); ++i) { PdfDictionary top = tops.getAsDictionary(i); document.getStructTreeRoot().addKidObject(destStruct++, top);