1
我有一個包含PDF的blob數組。我試圖附加所有這些PDF並使用servlet response.getOutputStream
將結果發送給客戶端。但不知何故,我得到一個15字節的文檔,Acrobat Reader不可讀。itext 7 concat pdf併發送到回覆
其中數據是List<Data>
包含一些與Word文檔的斑點。 我首先使用Aspose轉換爲PDF。我相信這段代碼有效。 這樣就不成問題了。 Document
這裏的對象是一個Aspose庫。以PDF形式寫入輸出流的對象。 問題是,我無法在iText 7文檔中找到任何關於此的文檔,在示例中也沒有。
下面是我使用
List<PdfDocument> listPDF = new LinkedList<>();
for (Data aData : data) {
byte[] input = aData.getBlobValue();
ByteArrayInputStream inStream = new ByteArrayInputStream(input);
Document srcDocWord = new Document(inStream);
ByteArrayOutputStream pdfOStream = new ByteArrayOutputStream();
srcDocWord.save(pdfOStream, SaveFormat.PDF);
ByteArrayInputStream pdfIStream = new ByteArrayInputStream(pdfOStream.toByteArray());
PdfReader reader = new PdfReader(pdfIStream);
PdfDocument pdfDoc = new PdfDocument(reader);
listPDF.add(pdfDoc);
}
PdfDocument result = new PdfDocument(new PdfWriter(new ByteArrayOutputStream()));
for (PdfDocument pdfDoc : listPDF) {
pdfDoc.initializeOutlines();
List<PdfPage> list = pdfDoc.copyPagesTo(1, pdfDoc.getNumberOfPages(), result);
pdfDoc.close();
}
System.out.println(result.getNumberOfPages());
ByteArrayInputStream is = new ByteArrayInputStream(((ByteArrayOutputStream)pdfDoc.getWriter().getOutputStream()).toByteArray());
OutputStream os = response.getOutputStream();
os.write(is.read());
os.flush();
os.close();
現在如果我有2個PDF文件1號文件的代碼,則系統輸出返回2,這樣是正確的。 但是返回到響應的文檔只有15個字節很大。
嗨,看看iText的7 API,你會發現它已經改變,因爲iText的5 PdfDocument對象介紹,並根據文檔,pdfDoc.copyPagesTo是做到這一點的方式。這個方法返回結果對象到servlet,然後我嘗試對它進行流式處理。 如果通過將listPDF對象返回給servlet並在那裏創建'result'對象,使用上面看到的for循環以及使用響應對象的輸出流,如下所示找到解決方案: PdfDocument result = new PdfDocument (new PdfWriter(response.getOutputStream())); 但這似乎是一個奇怪的方式來做到這一點。 – chnoe