目前我可以在使用java.io.File時合併兩個PDF文件,但無法在使用輸入和輸出流時合併它們。無法合併PDFBox的流
下面的代碼工作並生成合並PDF成功。
File mainDoc = new File(path...);
File additionalDoc = new File(path...);
PDFMergerUtility pdfMerger = new PDFMergerUtility();
pdfMerger.setDestinationFileName(path + "/merged.pdf");
pdfMerger.addSource(mainDoc);
pdfMerger.addSource(additionalDoc);
pdfMerger.mergeDocuments(null);
然後我試圖通過使用流來做同樣的事情。
ByteArrayOutputStream out = new ByteArrayOutputStream();
InputStream mainDocStream = new FileInputStream(path...);
InputStream additionalDocSteam = new FileInputStream(path...);
PDFMergerUtility pdfMerger = new PDFMergerUtility();
pdfMerger.addSource(mainDocStream);
pdfMerger.addSource(additionalDocSteam);
pdfMerger.setDestinationStream(out);
pdfMerger.mergeDocuments(null);
到達線pdfMerger.mergeDocuments(空)時上面的代碼;拋出以下異常:
java.io.IOException: Error: End-of-File, expected line at org.apache.pdfbox.pdfparser.BaseParser.readLine(BaseParser.java:1119) at org.apache.pdfbox.pdfparser.COSParser.parseHeader(COSParser.java:2005) at org.apache.pdfbox.pdfparser.COSParser.parsePDFHeader(COSParser.java:1988) at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:269) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1143) at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1059) at org.apache.pdfbox.multipdf.PDFMergerUtility.mergeDocuments(PDFMergerUtility.java:263)
最後我試圖按照這個答案(Merge Pdf Files Using PDFBox)作爲一個例子,但我生成的PDF似乎並沒有已合併這兩個PDF文件。 這是我試過的代碼。
public InputStream createPDF() {
try{
// Note, i have also tried to use java.io.File instead of an
// InputStream but the result was the same
// File mainDoc = new File(path...);
// PDDocument document = PDDocument.load(mainDoc);
InputStream pdfInputStream = null;
InputStream mainDocStream = new FileInputStream(path...);
PDDocument document = PDDocument.load(mainDocStream);
InputStream additionalDocSteam = new FileInputStream(path...);
PDDocument additionalDocument = PDDocument.load(additionalDocSteam);
PDFMergerUtility pdfMerger = new PDFMergerUtility();
pdfMerger.appendDocument(additionalDocument, document);
document.save(out);
document.close();
PDDocument.load(out.toByteArray());
pdfInputStream = new ByteArrayInputStream(out.toByteArray());
}catch(...){
....
}
return pdfInputStream;
}
上述代碼確實生成PDF但新創建的PDF僅包含沒有從第二個主文檔和內容。所以看起來我錯過了一些東西,文檔沒有合併。
因爲我不想打開一個新的問題。使用appendDocument而不是mergeDocuments有什麼優點嗎? – Stephan
添加了Stacktrace。 – Stephan
謝謝;這個堆棧跟你打開一個空文件時的結果完全一樣。合併爲我工作(非空)流。 –