Hi friends
Someone of you knows how to print an specific page inside a PDF
document. I was trying many ways unsuccessfully
First I tried with this simple code:
document = PDDocument.load(new FileInputStream("Sample.pdf"));
System.out.println("Retrieving all pages");
List pages = document.getDocumentCatalog().getAllPages();
PDPage page = (PDPage) pages.get(1);
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintable(page);
document.silentPrint(printerJob);
It does't work, the entire document is printed :-(
Then I tried with something more complex based on the Splitter sample
document = PDDocument.load(new FileInputStream("Sample.pdf"));
List pages = document.getDocumentCatalog().getAllPages();
PDPage page = (PDPage) pages.get(1);
newDoc = new PDDocument(); // new document is created
newDoc.setDocumentInformation(document.getDocumentInformation());
newDoc.getDocumentCatalog().setViewerPreferences(document.getDocumentCatalog().getViewerPreferences());
PDPage newPage = newDoc.importPage(page);
newPage.setCropBox(page.findCropBox());
newPage.setMediaBox(page.findMediaBox());
newPage.setResources(page.getResources());
newPage.setRotation(page.findRotation());
PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintable(newDoc.getPrintable(0));
newDoc.silentPrint(printerJob);
I was really close with this last code, the document is created but no
text is included inside. Also throws the following warning:
ADVERTENCIA: java.lang.NullPointerException
java.lang.NullPointerException
at
org.apache.pdfbox.util.PDFStreamEngine.processEncodedText(PDFStreamEngine.java:366)
at org.apache.pdfbox.util.operator.ShowText.process(ShowText.java:45)
at
org.apache.pdfbox.util.PDFStreamEngine.processOperator(PDFStreamEngine.java:551)
at
org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:274)
at
org.apache.pdfbox.util.PDFStreamEngine.processSubStream(PDFStreamEngine.java:256)
at
org.apache.pdfbox.util.PDFStreamEngine.processStream(PDFStreamEngine.java:225)
at org.apache.pdfbox.pdfviewer.PageDrawer.drawPage(PageDrawer.java:107)
at org.apache.pdfbox.pdmodel.PDPage.print(PDPage.java:824)
at sun.print.RasterPrinterJob.printPage(RasterPrinterJob.java:1964)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1431)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1247)
at org.apache.pdfbox.pdmodel.PDDocument.print(PDDocument.java:1039)
at
org.apache.pdfbox.pdmodel.PDDocument.silentPrint(PDDocument.java:1030)
at
com.fedex.international.lac.utilities.print.PDFSpliterSample.main(PDFSpliterSample.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)
Thanks in advance
Saludos
Pablo