roy*_*oyB 4 java android pdfbox
我正在使用Android 版 PdfBox来将数据附加到PDF文件中。
要附加的数据
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;
}
Run Code Online (Sandbox Code Playgroud)
合并代码(简化)
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
}
Run Code Online (Sandbox Code Playgroud)
例外情况
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)
Run Code Online (Sandbox Code Playgroud)
prerparePdfToAppend 方法的最后几行对我来说看起来很奇怪。但为什么要让你的生活变得复杂呢?返回 PD 文档:
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;
}
Run Code Online (Sandbox Code Playgroud)
您的合并代码将如下所示:
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();
}
Run Code Online (Sandbox Code Playgroud)
如果这不起作用 - 请确保
PDFBoxResourceLoader.getStream(assetFileName)
Run Code Online (Sandbox Code Playgroud)
是真正的 PDF 流。如果仍然不起作用,请指出新代码的哪一行产生异常。当然,请确保您使用的是最新版本的 PDFBox。
| 归档时间: |
|
| 查看次数: |
15253 次 |
| 最近记录: |