現在、java.io.Fileを使用しているときに2つの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は、第1からのみメイン文書の内容及びませんが含まれています。だから、私は何かが足りなくて、ドキュメントがマージされていないように見えます。
私は新しい質問を開きたくないので、 mergeDocumentsの代わりにappendDocumentを使用することに利点がありますか? – Stephan
Stacktraceが追加されました。 – Stephan
ありがとうございます。このスタックトレースは、空のファイルを開いたときに得られるスタックトレースです。マージは(非空の)ストリームで私のために働く。 –