Merge files give error: End-of-File, expected string

I use PdfBox for android to add data to a PDF file.

Data to add

 public byte [] prerparePdfToAppend() { final PDDocument document = new PDDocument(); final PDPage sourcePage = new PDPage(); document.addPage(sourcePage); PDPageContentStream contentStream = new PDPageContentStream(document, sourcePage); contentStream.beginText(); contentStream.setFont(PDType1Font.COURIER, 12); contentStream.showText("Name: " + firstName + " " + lastName); contentStream.newLine(); ... contentStream.endText(); contentStream.close(); output = new ByteArrayOutputStream(); document.save(output); document.close(); byte [] bytesToAppend = new byte[output.size()]; output.write(bytes); output.close(); return bytesToAppend; } 

Merge Code (Simplified)

 public void merge (String assetFileName) { byte [] toAppendPdf = prerparePdfToAppend(); PDFMergerUtility mergerUtility = new PDFMergerUtility(); mergerUtility.addSource(PDFBoxResourceLoader.getStream(assetFileName)); mergerUtility.addSource(new ByteArrayInputStream(toAppendPdf)); mergerUtility.setDestinationStream(destStream); mergerUtility.mergeDocuments(); //IOException } 

An exception

 java.io.IOException: Error: End-of-File, expected line at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1419) at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:1648) at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1627) at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:348) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:888) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:802) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:172) 
+2
source share
1 answer

The last lines of the prerparePdfToAppend method look strange to me. But why make your life complicated? Return PDDocument:

 public PDDocument prerparePdfToAppend() { final PDDocument document = new PDDocument(); final PDPage sourcePage = new PDPage(); document.addPage(sourcePage); PDPageContentStream contentStream = new PDPageContentStream(document, sourcePage); contentStream.beginText(); contentStream.setFont(PDType1Font.COURIER, 12); contentStream.showText("Name: " + firstName + " " + lastName); contentStream.newLine(); ... contentStream.endText(); contentStream.close(); return document; } 

Then your merge code will look like this:

 public void merge (String assetFileName) { PDFMergerUtility mergerUtility = new PDFMergerUtility(); PDDocument srcDoc = PDDocument.load(PDFBoxResourceLoader.getStream(assetFileName)); PDDocument dstDoc = prerparePdfToAppend(); mergerUtility.appendDocument(dstDoc, srcDoc); dstDoc.save(destStream); srcDoc.close(); dstDoc.close(); } 

If this does not work, make sure that

 PDFBoxResourceLoader.getStream(assetFileName) 

- really a stream of real pdf. If it still does not work, indicate which line of this new code throws an exception. And of course, make sure you are using the latest version of PDFBox.

+3
source

All Articles