我正在使用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();
}
}
请参阅附加图像进行输出,第一个显示第一个文件生成,第二个显示第二个文件生成,
答案 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'吗?
或者它是重置的值吗?