iTextPDF - 生成的第二个PDF文件显示第一个生成的PDF文件中的文本

时间:2017-08-21 09:22:50

标签: java itext pdf-generation

我正在使用iTextPDF生成PDF,从一些文本输入中获取数据。

当我运行应用程序并创建第一个PDF时,它会按预期生成。

然后我改变一些值并生成另一个值,这就是出现问题的地方。第一个PDF上显示的最后一个条目打印在第二个生成的PDF的第一个条目的顶部。

不确定为什么会这样?是保存到缓冲区还是其他东西,不太确定。

以下是生成PDF的代码:

  public class ExportTicket implements Action{

     PdfPCell titleCell = new PdfPCell();
     PdfPCell contentCell = new PdfPCell();

     public String performAction(HttpServletRequest request) throws PewException {

        // CREATING DOCUMENT (ITEXTPDF)
        Document document = new Document();

        PdfWriter.getInstance(document, new FileOutputStream("Ticket_" + ticketNo + ".pdf"));

        // Fonts
        Font headingFont = new Font(Font.FontFamily.UNDEFINED, 10, Font.BOLD, BaseColor.BLACK);

        // Open Document to Write
        document.open();

        // Table Creation
        PdfPTable table = new PdfPTable(2);
        table.setTotalWidth(200);
        table.setWidths(new int[]{ 5, 10 });
        table.setHorizontalAlignment(Element.ALIGN_LEFT);

        // Add Ticket Number
        contentCell.addElement(new Chunk("Ticket Number: " + ticketNo, headingFont));
        contentCell.setColspan(2);
        table.addCell(contentCell);

        // Add table to Document & Close Document
        document.add(table)
        document.close();
      }
  }

请参阅附加图像进行输出,第一个显示第一个文件生成,第二个显示第二个文件生成,

PDF File Generated First             票证编号:20170034的第一个生成的PDF文件 PDF File Generated Second             票证号码的第二个生成的PDF文件:20170035

2 个答案:

答案 0 :(得分:2)

你有奇怪的优先事项。您认为应该通过仅创建一次PdfPCell来节省处理时间(尽管您总是需要一个新实例),但是通过一遍又一遍地创建字体会浪费处理时间(而您可以轻松地重用它)。

这是您班级的改进版本(我假设您从请求中获得ticketNo):

public class ExportTicket implements Action{

    // Fonts
    Font headingFont = new Font(Font.FontFamily.UNDEFINED, 10, Font.BOLD, BaseColor.BLACK);

    public String performAction(HttpServletRequest request) throws PewException {
        String ticketNo = request.getParameter("ticketNo");
        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream("Ticket_" + ticketNo + ".pdf"));
        // Open Document to Write
        document.open();

        // Table Creation
        PdfPTable table = new PdfPTable(2);
        table.setTotalWidth(200);
        table.setWidths(new int[]{ 5, 10 });
        table.setHorizontalAlignment(Element.ALIGN_LEFT);

        // Add Ticket Number
        PdfPCell contentCell = new PdfPCell()
        contentCell.addElement(new Chunk("Ticket Number: " + ticketNo, headingFont));
        contentCell.setColspan(2);
        table.addCell(contentCell);

        // Add table to Document & Close Document
        document.add(table)
        document.close();
    }
}

答案 1 :(得分:0)

可能是因为你从未重置'contentCell'吗?

或者它是重置的值吗?