Java 合并文件时出现错误:文件结尾,应为行
我使用以将数据附加到Java 合并文件时出现错误:文件结尾,应为行,java,android,pdfbox,Java,Android,Pdfbox,我使用以将数据附加到PDF文件中 要追加的数据 合并代码(简化) 例外情况 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) a
PDF
文件中
要追加的数据
合并代码(简化)
例外情况
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)
prerparePdfToAppend方法的最后几行在我看来很奇怪。但是为什么要让你的生活变得复杂呢?返回PDA文档:
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;
}
合并代码将如下所示:
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();
}
如果这不起作用-确保
PDFBoxResourceLoader.getStream(assetFileName)
是真正的PDF文件流。如果仍然不起作用,请说明这段新代码的哪一行产生了异常。当然,请确保您使用的是最新版本的PDFBox。请将第一种方法更正为实际代码。prerparePdfToAppend()不返回任何内容。它应该返回output.toByteArray()。最后三行是不需要的。您甚至可以通过返回您的PDDocument并附加该文档来进一步缩短此时间。
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();
}
PDFBoxResourceLoader.getStream(assetFileName)