我的代码输出一个简单的收据,其中包含用户的一些详细信息,如姓名,票价和停止号码。这将生成包含这些详细信息的PDF文件。每当新用户在主窗体中输入数据时,这只会覆盖PDF文件中第一个用户的数据。如何在不附加或覆盖第一个用户的原始数据的情况下创建新的PDF文件? (如sample.pdf,sample2.pdf,sample3.pdf ......等)
public class PDFDisplay {
public static void generatePDF(PassengerBean passengerBean) {
Document document = new Document();
try {
final Chunk NEWLINE = new Chunk("\n");
PdfWriter.getInstance(document,
new FileOutputStream("C://sample.pdf"));
document.open();
Image img = Image.getInstance("C:\\Documents and Settings\\Pinky\\My Documents\\Angel's files\\ICS 113\\eclipse_ws\\MRTApplicationIteration2\\WebContent\\image\\mrt.jpg");
document.add(img);
String or = "Official Receipt";
String hr = "-----------------------------------------------------------";
String spacer = " ";
String name = "Passenger Name: " + passengerBean.lname + "," + " " + passengerBean.fname;
String dest = "Destination: " + passengerBean.dest + " STATION";
String stopno = passengerBean.stop;
double fare = passengerBean.fare;
String fare1 = "Fare: PHP" + " " + String.valueOf(fare);
String ccnum = "CREDIT CARD NUMBER: " + " " + "************" + passengerBean.ccnum.substring(Math.max(0, passengerBean.ccnum.length() - 4));
Paragraph para10 = new Paragraph(32);
para10.setSpacingBefore(10);
para10.setSpacingAfter(10);
para10.add(new Chunk(or));
document.add(para10);
Paragraph para9 = new Paragraph(32);
para9.setSpacingBefore(30);
para9.setSpacingAfter(10);
para9.add(new Chunk(hr));
document.add(para9);
// Setting paragraph line spacing to 32
Paragraph para1 = new Paragraph(32);
para1.setSpacingBefore(5);
para1.setSpacingAfter(10);
para1.add(new Chunk(name));
document.add(para1);
Paragraph para2 = new Paragraph();
para2.setSpacingAfter(10);
para2.add(new Chunk(dest));
document.add(para2);
Paragraph para3 = new Paragraph();
para3.setSpacingAfter(10);
para3.add(new Chunk(stopno));
document.add(para3);
Paragraph para4 = new Paragraph();
para4.setSpacingAfter(10);
para4.add(new Chunk(fare1));
document.add(para4);
Paragraph para5 = new Paragraph();
para5.setSpacingAfter(10);
para5.add(new Chunk(ccnum));
document.add(para5);
document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
答案 0 :(得分:1)
您可能需要实现所需的几乎所有方法都可以在File class
的Java API文档中找到您想要创建一个以sample
开头并以pdf
结尾的唯一文件。为此,您可以使用createTempFile()
method。 6年前StackOverflow已经回答了这个问题:What is the best way to generate a unique and short file name in Java
假设您确实希望在文件名中包含增量数字,例如sample0001.pdf,sample0002.pdf,sample0003.pdf等等,那么你可以使用list()
method。这将返回一个String
值数组,其中包含目录中所有文件的名称。我建议您使用FilenameFilter
,这样您才能获得以sample
开头的PDF文件。然后,您可以对这些名称进行排序,以找到编号最大的名称。请参阅How to list latest files in a directory using FileNameFilter以了解如何创建此类过滤器。
一旦你有一个具有最高编号的文件名,只需要String
操作来创建一个新的文件名。在定义File
时使用该文件名(或OutputStream
实例)。
正如您所看到的,这个答案并未在任何地方提及iText,虽然我们创建或列出的文件的扩展名为.pdf
,但它与PDF或PDF生成无关。这是一个纯粹的Java问题。