Search code examples
javapdfbox

Apache PDFBox to open temporary created PDF file


I'm using apache pdfbox 2.x version and I am trying to read a temp created file. Below is my code to create a temp file and read it:

Path mergedTempFile = null;
    
        try {
            mergedTempFile = Files.createTempFile("merge_", ".pdf");
            PDDocument pdDocument = PDDocument.load(mergedTempFile.toFile());

But it gives error:

java.io.IOException: Error: End-of-File, expected line
    at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1098)
    at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:2577)
    at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:2560)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:219)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1099)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1082)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1006)
    at com.howtodoinjava.demo.PdfboxApi.test(PdfboxApi.java:326)
    at com.howtodoinjava.demo.PdfboxApi.main(PdfboxApi.java:317)

From this link I have got a reference but it did not help anyway: Similar Issue Link

Please help me with this. Still, I can not get rid of this.


Solution

  • PDDocument.load(...) is used to parse an existing PDF.

    The passed temporary file (mergedTempFile) is empty, thus the exception. Just create a PDDocument with the constructor (resides in-memory) and later save it with PDDocument.save(...).

    Path mergedTempFile = null;
    try {
        mergedTempFile = Files.createTempFile("merge_", ".pdf");
        try (PDDocument pdDocument = new PDDocument()) {
    
            // add content
            pdDocument.addPage(new PDPage()); // empty page as an example
    
            pdDocument.save(mergedTempFile.toFile());
        }
    
    } catch (IOException e) {
        // exception handling
    }
    
    // use mergedTempFile for further logic