gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:25:14 26 4
gpt4 key购买 nike

我正在使用 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 第一个生成的 PDF 文件,票号:20170034 PDF File Generated Second 第二个生成的 PDF 文件,票号:20170035

最佳答案

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

这是您的类(class)的改进版本(我假设您从请求中获取了 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();
}
}

关于java - iTextPDF - 生成的第二个 PDF 文件显示第一个生成的 PDF 文件中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45793525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com