List of usage examples for org.apache.pdfbox.pdmodel PDDocument getDocumentCatalog
public PDDocumentCatalog getDocumentCatalog()
From source file:de.uzk.hki.da.convert.PdfService.java
License:Open Source License
/** * Generates a new PDF which only contains certainPages of the original document. * Users can choose if they wish to reduce to a number of pages (beginning from the first page) * or to a certain set of pages. Both options can be used at the same time. * By setting one of the parameters to either "" or null any of the options the according * option will not be used./*from w w w. j a v a 2 s . c o m*/ * * @param numberOfPagesText null or empty if unused or "n" (e.g. "2" for two pages from the beginning of the document). * @param certainPagesText white space separated list of numbers that mark pages which should be part of the target document. * * @throws IOException * @author Jens Peters * @author Sebastian Cuy * @author Daniel M. de Oliveira */ public void reduceToCertainPages(String numberOfPagesText, String certainPagesText) throws IOException { PDDocument srcPdf = null; PDDocument targetPdf = null; if (srcPdfFile == null) throw new IllegalStateException("srcFile not set"); srcPdf = PDDocument.load(srcPdfFile); targetPdf = new PDDocument(); @SuppressWarnings("rawtypes") List srcPages = srcPdf.getDocumentCatalog().getAllPages(); int numberOfPages = 0; if (numberOfPagesText != null && !numberOfPagesText.isEmpty()) { numberOfPages = Integer.parseInt(numberOfPagesText); for (int i = 0; i < Math.min(numberOfPages, srcPages.size()); i++) targetPdf.addPage((PDPage) srcPages.get(i)); } if (StringUtilities.isNotSet(numberOfPagesText) && StringUtilities.isNotSet(certainPagesText)) { for (int i = 0; i < srcPages.size(); i++) targetPdf.addPage((PDPage) srcPages.get(i)); } if (certainPagesText != null && !certainPagesText.isEmpty()) { String[] certainPagesTexts = certainPagesText.split(" "); int[] certainPages = new int[certainPagesTexts.length]; for (int i = 0; i < certainPagesTexts.length; i++) { certainPages[i] = Integer.parseInt(certainPagesTexts[i]); } Arrays.sort(certainPages); for (int i = 0; i < certainPages.length; i++) { if (certainPages[i] > numberOfPages && srcPages.size() > certainPages[i] - 1) targetPdf.addPage((PDPage) srcPages.get(certainPages[i] - 1)); } } try { targetPdf.save(targetPdfFile); } catch (Exception e) { throw new RuntimeException("Unable to create PDF!", e); } finally { targetPdf.close(); srcPdf.close(); } }
From source file:de.uzk.hki.da.convert.PublishPDFConversionStrategyTests.java
License:Open Source License
/** * Test.//from w ww . ja v a 2s . c o m * * @throws IOException Signals that an I/O exception has occurred. */ @Test public void test() throws IOException { o = TESTHelper.setUpObject("1", new RelativePath(workAreaRootPath)); WorkArea wa = new WorkArea(n, o); PublicationRight right = new PublicationRight(); right.setAudience(Audience.PUBLIC); right.setTextRestriction(new TextRestriction()); right.getTextRestriction().setCertainPages(new int[] { 1, 2, 7, 10, 12, 14, 15 }); o.getRights().getPublicationRights().add(right); DAFile sourceFile = new DAFile("a", "filename.pdf"); ConversionInstruction ci = new ConversionInstruction(); ci.setSource_file(sourceFile); ci.setTarget_folder("target/"); ConversionRoutine cr = new ConversionRoutine(); cr.setTarget_suffix("pdf"); ci.setConversion_routine(cr); cs.setObject(o); List<Event> events = cs.convertFile(new WorkArea(n, o), ci); File targetFile = wa.toFile(events.get(0).getTarget_file()); assertTrue(targetFile.exists()); assertEquals("filename.pdf", targetFile.getName()); // contract states that the PDF should have 7 pages PDDocument targetDoc = PDDocument.load(targetFile); assertEquals(7, targetDoc.getDocumentCatalog().getAllPages().size()); targetFile = wa.toFile(events.get(1).getTarget_file()); assertTrue(targetFile.exists()); assertEquals("filename.pdf", targetFile.getName()); // contract has no restrictions for institution, PDF should have targetDoc = PDDocument.load(targetFile); assertEquals(227, targetDoc.getDocumentCatalog().getAllPages().size()); }
From source file:de.uzk.hki.da.format.PdfService.java
License:Open Source License
/** * Generates a new PDF which only contains certainPages of the original document. * Users can choose if they wish to reduce to a number of pages (beginning from the first page) * or to a certain set of pages. Both options can be used at the same time. * By setting one of the parameters to either "" or null any of the options the according * option will not be used.//from w w w . jav a 2 s .co m * * @param numberOfPagesText null or empty if unused or "n" (e.g. "2" for two pages from the beginning of the document). * @param certainPagesText white space separated list of numbers that mark pages which should be part of the target document. * * @throws IOException * @author Jens Peters * @author Sebastian Cuy * @author Daniel M. de Oliveira */ public void reduceToCertainPages(String numberOfPagesText, String certainPagesText) throws IOException { PDDocument srcPdf = null; PDDocument targetPdf = null; if (srcPdfFile == null) throw new IllegalStateException("srcFile not set"); srcPdf = PDDocument.load(srcPdfFile); targetPdf = new PDDocument(); @SuppressWarnings("rawtypes") List srcPages = srcPdf.getDocumentCatalog().getAllPages(); int numberOfPages = 0; if (numberOfPagesText != null && !numberOfPagesText.isEmpty()) { numberOfPages = Integer.parseInt(numberOfPagesText); for (int i = 0; i < Math.min(numberOfPages, srcPages.size()); i++) targetPdf.addPage((PDPage) srcPages.get(i)); } if (certainPagesText != null && !certainPagesText.isEmpty()) { String[] certainPagesTexts = certainPagesText.split(" "); int[] certainPages = new int[certainPagesTexts.length]; for (int i = 0; i < certainPagesTexts.length; i++) { certainPages[i] = Integer.parseInt(certainPagesTexts[i]); } Arrays.sort(certainPages); for (int i = 0; i < certainPages.length; i++) { if (certainPages[i] > numberOfPages && srcPages.size() > certainPages[i] - 1) targetPdf.addPage((PDPage) srcPages.get(certainPages[i] - 1)); } } try { targetPdf.save(targetPdfFile); } catch (Exception e) { throw new RuntimeException("Unable to create PDF!", e); } finally { targetPdf.close(); } }
From source file:de.uzk.hki.da.format.PublishPDFConversionStrategyTests.java
License:Open Source License
/** * Test.//from w w w.jav a 2 s . c o m * * @throws IOException Signals that an I/O exception has occurred. */ @Test public void test() throws IOException { o = TESTHelper.setUpObject("1", new RelativePath(workAreaRootPath)); PublicationRight right = new PublicationRight(); right.setAudience(Audience.PUBLIC); right.setTextRestriction(new TextRestriction()); right.getTextRestriction().setCertainPages(new int[] { 1, 2, 7, 10, 12, 14, 15 }); o.getRights().getPublicationRights().add(right); DAFile sourceFile = new DAFile(o.getLatestPackage(), "a", "filename.pdf"); ConversionInstruction ci = new ConversionInstruction(); ci.setSource_file(sourceFile); ci.setTarget_folder("target/"); ConversionRoutine cr = new ConversionRoutine(); cr.setTarget_suffix("pdf"); ci.setConversion_routine(cr); cs.setObject(o); List<Event> events = cs.convertFile(ci); File targetFile = events.get(0).getTarget_file().toRegularFile(); assertTrue(targetFile.exists()); assertEquals("filename.pdf", targetFile.getName()); // contract states that the PDF should have 7 pages PDDocument targetDoc = PDDocument.load(targetFile); assertEquals(7, targetDoc.getDocumentCatalog().getAllPages().size()); targetFile = events.get(1).getTarget_file().toRegularFile(); assertTrue(targetFile.exists()); assertEquals("filename.pdf", targetFile.getName()); // contract has no restrictions for institution, PDF should have targetDoc = PDDocument.load(targetFile); assertEquals(227, targetDoc.getDocumentCatalog().getAllPages().size()); }
From source file:dev.ztgnrw.ExtractEmbeddedFiles.java
License:Apache License
/** * This is the main method./*from w w w .j ava2 s . c om*/ * * @param args The command line arguments. * * @throws IOException If there is an error parsing the document. */ public static void extractEmbeddedFiles(String file) throws IOException { PDDocument document = null; try { File pdfFile = new File(file); String filePath = pdfFile.getParent() + System.getProperty("file.separator"); document = PDDocument.load(pdfFile); PDDocumentNameDictionary namesDictionary = new PDDocumentNameDictionary(document.getDocumentCatalog()); PDEmbeddedFilesNameTreeNode efTree = namesDictionary.getEmbeddedFiles(); if (efTree != null) { Map<String, PDComplexFileSpecification> names = efTree.getNames(); if (names != null) { extractFiles(names, filePath); } else { List<PDNameTreeNode<PDComplexFileSpecification>> kids = efTree.getKids(); for (PDNameTreeNode<PDComplexFileSpecification> node : kids) { names = node.getNames(); extractFiles(names, filePath); } } } // extract files from annotations for (PDPage page : document.getPages()) { for (PDAnnotation annotation : page.getAnnotations()) { if (annotation instanceof PDAnnotationFileAttachment) { PDAnnotationFileAttachment annotationFileAttachment = (PDAnnotationFileAttachment) annotation; PDComplexFileSpecification fileSpec = (PDComplexFileSpecification) annotationFileAttachment .getFile(); PDEmbeddedFile embeddedFile = getEmbeddedFile(fileSpec); extractFile(filePath, fileSpec.getFilename(), embeddedFile); } } } } finally { if (document != null) { document.close(); } } }
From source file:diagramextractor.DiagramExtractor.java
/** * @param args the command line arguments *//*from w w w .ja va 2s .co m*/ public static void main(String[] args) throws IOException, COSVisitorException { if (args.length < 2) { showHelp(); System.exit(-1); } List<Integer> diagramOptionsList = new LinkedList<>(); diagramOptionsList = parseOptions(args); List<String> diagramNameList = new LinkedList<>(); diagramNameList = getDiagramNames(diagramOptionsList); File inputDir = new File(args[0]); File[] reports = inputDir.listFiles(); String diagramName = args[1]; PDDocument outputDocument = new PDDocument(); PDFMergerUtility merger = new PDFMergerUtility(); merger.setDestinationFileName("output.pdf"); for (File report : reports) { PDDocument doc = PDDocument.load(report); System.out.println("LOADED FILE: " + report.getName()); int pageNumber = 0; System.out.println("NUMBER OF PAGES: " + doc.getNumberOfPages()); for (int i = 0; i <= doc.getNumberOfPages(); i++) { PDFTextStripper stripper = new PDFTextStripper(); stripper.setStartPage(i); stripper.setEndPage(i); String contents = stripper.getText(doc); boolean containsDiagram = false; for (String diagram : diagramNameList) { if (contents.contains(diagram)) { containsDiagram = true; } } if (containsDiagram && !contents.contains("Table of Contents") && !contents.contains("Table of Figures") && !contents.contains("Obsah") && !contents.contains("Tabulka ?sel")) { pageNumber = i; System.out.println("Diagram found on page: " + pageNumber); PageExtractor extractor = new PageExtractor(doc, pageNumber, pageNumber); PDDocument extractedPage = extractor.extract(); PDPage page = (PDPage) extractedPage.getDocumentCatalog().getAllPages().get(0); PDPageContentStream contentStream = new PDPageContentStream(extractedPage, page, true, true, true); contentStream.beginText(); contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12); contentStream.moveTextPositionByAmount(100, 50); contentStream.drawString(report.getName()); contentStream.endText(); contentStream.close(); merger.appendDocument(outputDocument, extractedPage); } } if (pageNumber == 0) { System.out.println("The diagram " + diagramName + " was not found in file " + report.getName()); } doc.close(); } merger.mergeDocuments(); System.out.println(); System.out.println("Diagrams have been merged."); String outputFileName = generateFilename(inputDir.getCanonicalPath(), "output.pdf"); outputDocument.save(outputFileName); outputDocument.close(); System.out.println("Output file saved as: " + outputFileName); }
From source file:dpfmanager.shell.modules.report.util.ReportPDF.java
License:Open Source License
/** * Parse a global report to PDF format.//from w ww . j ava2 s. c om * * @param pdffile the file name. * @param gr the global report. */ public void parseGlobal(String pdffile, GlobalReport gr) { try { PDFParams pdfParams = new PDFParams(); pdfParams.init(PDPage.PAGE_SIZE_A4); PDFont font = PDType1Font.HELVETICA_BOLD; int pos_x = 200; pdfParams.y = 700; int font_size = 18; // Logo PDXObjectImage ximage = new PDJpeg(pdfParams.getDocument(), getFileStreamFromResources("images/logo.jpg")); float scale = 3; pdfParams.getContentStream().drawXObject(ximage, pos_x, pdfParams.y, 645 / scale, 300 / scale); // Report Title pdfParams.y -= 30; pdfParams = writeText(pdfParams, "MULTIPLE REPORT", pos_x, font, font_size); pdfParams.y -= 30; font_size = 15; pdfParams = writeText(pdfParams, "Processed files: " + gr.getIndividualReports().size(), pos_x, font, font_size, Color.cyan); // Summary table pos_x = 100; pdfParams.y -= 15; font_size = 8; Color col; for (String iso : gr.getCheckedIsos()) { if (gr.getIsos().contains(iso) || gr.getReportsOk(iso) == gr.getReportsCount()) { String name = ImplementationCheckerLoader.getIsoName(iso); pdfParams.y -= 15; col = gr.getReportsOk(iso) == gr.getReportsCount() ? Color.green : Color.red; pdfParams = writeText(pdfParams, gr.getReportsOk(iso) + " files conforms to " + name, pos_x, font, font_size, col); } } // Pie chart pdfParams.y += 10; if (pdfParams.y > 565) pdfParams.y = 565; pos_x += 200; int graph_size = 40; BufferedImage image = new BufferedImage(graph_size * 10, graph_size * 10, BufferedImage.TYPE_INT_ARGB); Graphics2D g2d = image.createGraphics(); Double doub = (double) gr.getAllReportsOk() / gr.getReportsCount(); double extent = 360d * doub; g2d.setColor(Color.green); g2d.fill(new Arc2D.Double(0, 0, graph_size * 10, graph_size * 10, 90, 360, Arc2D.PIE)); g2d.setColor(Color.red); g2d.fill(new Arc2D.Double(0, 0, graph_size * 10, graph_size * 10, 90, 360 - extent, Arc2D.PIE)); ximage = new PDJpeg(pdfParams.getDocument(), image); pdfParams.getContentStream().drawXObject(ximage, pos_x, pdfParams.y, graph_size, graph_size); pdfParams.y += graph_size - 10; font_size = 7; pdfParams = writeText(pdfParams, gr.getAllReportsOk() + " passed", pos_x + 50, font, font_size, Color.green); pdfParams.y -= 10; pdfParams = writeText(pdfParams, gr.getAllReportsKo() + " failed", pos_x + 50, font, font_size, Color.red); pdfParams.y -= 10; pdfParams = writeText(pdfParams, "Global score " + (int) (doub * 100) + "%", pos_x + 50, font, font_size, Color.black); /** * Individual Tiff images list */ pos_x = 100; pdfParams.y -= 50; for (IndividualReport ir : gr.getIndividualReports()) { int image_height = 65; int image_width = 100; // Draw image String imgPath = pdffile + "img.jpg"; int ids = 0; while (new File(imgPath).exists()) imgPath = pdffile + "img" + ids++ + ".jpg"; boolean check = tiff2Jpg(ir.getFilePath(), imgPath); BufferedImage bimg; if (!check) { bimg = ImageIO.read(getFileStreamFromResources("html/img/noise.jpg")); } else { bimg = ImageIO.read(new File(imgPath)); } image_width = image_height * bimg.getWidth() / bimg.getHeight(); if (image_width > 100) { image_width = 100; image_height = image_width * bimg.getHeight() / bimg.getWidth(); } // Check if we need new page before draw image int maxHeight = getMaxHeight(ir, image_height); if (newPageNeeded(pdfParams.y - maxHeight)) { pdfParams.setContentStream(newPage(pdfParams.getContentStream(), pdfParams.getDocument())); pdfParams.y = init_posy; } int initialy = pdfParams.y; int initialx = 100; pdfParams.y -= maxHeight; int maxy = pdfParams.y; ximage = new PDJpeg(pdfParams.getDocument(), bimg); pdfParams.getContentStream().drawXObject(ximage, pos_x, pdfParams.y, image_width, image_height); if (check) new File(imgPath).delete(); // Values image_width = initialx; pdfParams.y = initialy; if (maxHeight == 65) { pdfParams.y -= 10; } pdfParams = writeText(pdfParams, ir.getFileName(), pos_x + image_width + 10, font, font_size, Color.gray); font_size = 6; pdfParams.y -= 10; pdfParams = writeText(pdfParams, "Conformance Checker", pos_x + image_width + 10, font, font_size, Color.black); pdfParams.getContentStream().drawLine(pos_x + image_width + 10, pdfParams.y - 5, image_width + 150, pdfParams.y - 5); pdfParams.y -= 2; // Isos table for (String iso : ir.getCheckedIsos()) { if (ir.hasValidation(iso) || ir.getNErrors(iso) == 0) { String name = ImplementationCheckerLoader.getIsoName(iso); pdfParams.y -= 10; pdfParams = writeText(pdfParams, name, pos_x + image_width + 10, font, font_size, Color.black); pdfParams = writeText(pdfParams, ir.getNErrors(iso) + " errors", pos_x + image_width + 110, font, font_size, ir.getNErrors(iso) > 0 ? Color.red : Color.black); pdfParams = writeText(pdfParams, ir.getNWarnings(iso) + " warnings", pos_x + image_width + 140, font, font_size, ir.getNWarnings(iso) > 0 ? Color.orange : Color.black); } } if (pdfParams.y < maxy) maxy = pdfParams.y; // Chart pdfParams.y = initialy; pdfParams.y -= 10; pdfParams.y -= 10; graph_size = 25; image = new BufferedImage(graph_size * 10, graph_size * 10, BufferedImage.TYPE_INT_ARGB); g2d = image.createGraphics(); doub = (double) ir.calculatePercent(); extent = 360d * doub / 100.0; g2d.setColor(Color.gray); g2d.fill(new Arc2D.Double(0, 0, graph_size * 10, graph_size * 10, 90, 360, Arc2D.PIE)); g2d.setColor(Color.red); g2d.fill(new Arc2D.Double(0, 0, graph_size * 10, graph_size * 10, 90, 360 - extent, Arc2D.PIE)); ximage = new PDJpeg(pdfParams.getDocument(), image); pdfParams.getContentStream().drawXObject(ximage, pos_x + image_width + 180, pdfParams.y - graph_size, graph_size, graph_size); pdfParams.y += graph_size - 10; if (doub < 100) { pdfParams.y = pdfParams.y - 10 - graph_size / 2; pdfParams = writeText(pdfParams, "Failed", pos_x + image_width + 180 + graph_size + 10, font, font_size, Color.red); } pdfParams.y = pdfParams.y - 10 - graph_size / 2; pdfParams = writeText(pdfParams, "Score " + doub + "%", pos_x + image_width + 180 + graph_size + 10, font, font_size, Color.gray); if (pdfParams.y < maxy) maxy = pdfParams.y; pdfParams.y = maxy - 10; } // Full individual reports ArrayList<PDDocument> toClose = new ArrayList<PDDocument>(); for (IndividualReport ir : gr.getIndividualReports()) { if (!ir.containsData()) continue; PDDocument doc = null; if (ir.getPDF() != null) doc = ir.getPDF(); else if (ir.getPDFDocument() != null) doc = PDDocument.load(ir.getPDFDocument()); if (doc != null) { List<PDPage> l = doc.getDocumentCatalog().getAllPages(); for (PDPage pag : l) { pdfParams.getDocument().addPage(pag); } toClose.add(doc); } } pdfParams.getContentStream().close(); pdfParams.getDocument().save(pdffile); pdfParams.getDocument().close(); for (PDDocument doc : toClose) { doc.close(); } } catch (Exception tfe) { context.send(BasicConfig.MODULE_MESSAGE, new ExceptionMessage("Exception in ReportPDF", tfe)); } }
From source file:editorframework.pdfbox.testes.MyPDFBox.java
private void init() { JFrame jFrame = new JFrame(); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try {//from w ww. j a v a2s . c om final PDDocument doc = PDDocument.load(new File("./simple.pdf")); List<PDPage> allPages = doc.getDocumentCatalog().getAllPages(); PDPage page = (PDPage) allPages.get(1); setPage(page); jFrame.setBackground(Color.DARK_GRAY); setLayout(new FlowLayout()); jFrame.add(this); jFrame.setBounds(40, 40, getWidth() + 100, getHeight() + 50); jFrame.setVisible(true); jFrame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { try { doc.close(); } catch (IOException e1) { e1.printStackTrace(); } } }); } catch (IOException e) { System.out.println(e.toString()); } //doc.close(); }
From source file:editorframework.pdfbox.testes.TestesComPDFBox.java
public static void transformarPDFemImagem() throws IOException { //OPCAO 1 transformar o pdfpage em bufered image, e exibir no JFrame normal PDDocument document = PDDocument.load(new File("./simple.pdf")); List<PDPage> allPages = document.getDocumentCatalog().getAllPages(); PDPage firstPage = allPages.get(0);/* ww w.jav a 2 s . c o m*/ BufferedImage bi = firstPage.convertToImage(); File outputfile = new File("image.jpg"); ImageIO.write(bi, "jpg", outputfile); }
From source file:editorframework.pdfbox.testes.TestesComPDFBox.java
public static void exibirPDFEmUmJFrame() throws IOException { File PDFPath = new File("./simple.pdf"); PDDocument inputPDF = PDDocument.load(PDFPath); List<PDPage> allPages = inputPDF.getDocumentCatalog().getAllPages(); PDPage testPage = (PDPage) allPages.get(0); JFrame testFrame = new JFrame(); testFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); PDFPagePanel pdfPanel = new PDFPagePanel(); pdfPanel.setPage(testPage);/*from w ww. j a v a 2 s .c o m*/ testFrame.add(pdfPanel); testFrame.setBounds(40, 40, pdfPanel.getWidth(), pdfPanel.getHeight()); testFrame.setVisible(true); pdfPanel.validate(); // inputPDF.close(); }