Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并文件时出现错误:文件结尾,应为行_Java_Android_Pdfbox - Fatal编程技术网

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)