簡體   English   中英

iText 5: Create a single PDF "ByteArrayOutputStream()" from two streams in a Java "HttpServlet" servlet to display in browser window

[英]iText 5: Create a single PDF "ByteArrayOutputStream()" from two streams in a Java "HttpServlet" servlet to display in browser window

I have a Java "HttpServlet" class that creates an iText 5 PDF document by calling a Java class that returns the PDF document as a "ByteArrayOuputStream." stream 被寫入 servlet 的“HttpServletResponse”並顯示在瀏覽器 window 中。

在 Java servlet 中:

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException{

// Other code.

ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();

// Java class call to create PDF document.

baosPDF = new InvoicePDF();

// Set up the return HTTP header.

response.setHeader("Cache-Control", "max-age=30");
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=INV_"
                            + request.getParameter("invoiceNumber").toString()
                            + ".pdf");

// Set length HTTP header value.

response.setContentLength(baosPDF.size());

// Write all data to the browser.

ServletOutputStream sos = response.getOutputStream();

baosPDF.writeTo(sos);
           
sos.flush();
 
// Other code.

}

上面的代碼運行良好。

In certain circumstances, I need to create another "ByteArrayOuputStream" PDF document in the servlet using another Java class and have that PDF document displayed first and then the other PDF document next in the browser window.

我嘗試將兩個“ByteArrayOutputStream”(寫入方法)連接成一個並寫入“ServletOutputStream”,但只有寫在“ByteArrayOuputStream”末尾的 stream 顯示在瀏覽器 window 中。

在 servlet 中,我需要創建一個 PDF“ByteArrayOuputStream”,以某種方式合並兩個 PDF 文檔。

ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();

ByteArrayOutputStream baosCoverPDF = new ByteArrayOutputStream();

//Java class call to create PDF document

baosCoverPDF = new coverPDF();

baosPDF = new InvoicePDF(hosturl, invoiceNumber);  

我需要一個包含“baoCoverPDF”和“baosPDF”流作為單個 PDF 的單個“ByteArrayOuputStream”,它將在瀏覽器中顯示兩個 PDF 流? 有關“PdfReader”和“PdfCopy”組合等方向的任何幫助?

我能夠使用以下代碼使其在 Java servlet 中工作。

Document pdfDocument = new Document();
ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
PdfCopy copy = new PdfCopy(pdfDocument, pdfOutputStream);

pdfDocument.open();

baosCoverPDF = new coverPDF();

PdfReader coverPageReader = new PdfReader(baosCoverPDF.toByteArray());

for (int i = 1; i <= coverPageReader.getNumberOfPages(); i++) {
   copy.addPage(copy.getImportedPage(coverPageReader, i));
}

baosInvoice = new InvoicePDF(); 

PdfReader invoiceReader = new PdfReader(baosInvoice.toByteArray());

for (int i = 1; i <= invoiceReader.getNumberOfPages(); i++) {
   copy.addPage(copy.getImportedPage(invoiceReader, i));
}

pdfDocument.close();

baosPDF.write(pdfOutputStream.toByteArray());

copy.close();
coverPageReader.close();
invoiceReader.close();

然后我像以前一樣執行 rest 到 output 到瀏覽器 window。

// Set up the return HTTP header.

response.setHeader("Cache-Control", "max-age=30");
response.setContentType("application/pdf");
response.setHeader("Content-disposition", "inline; filename=INV_"
                            + 
request.getParameter("invoiceNumber").toString()
                            + ".pdf");

// Set length HTTP header value.

response.setContentLength(baosPDF.size());

// Write all data to the browser.

ServletOutputStream sos = response.getOutputStream();

baosPDF.writeTo(sos);
           
sos.flush();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM