【问题标题】:How to create a new PDF file if a file name already exists?如果文件名已存在,如何创建新的 PDF 文件?
【发布时间】:2015-03-27 14:03:23
【问题描述】:

我下面的代码会输出一个简单的收据,其中包含用户的一些详细信息,例如姓名、票价和停靠站号。这会生成一个包含这些详细信息的 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();
        }
}

}

【问题讨论】:

  • 这与 PDF、PDF 生成或 iText 无关。
  • @Jongware 为什么?我正在生成一个 PDF 文件,并且正在使用 IText 库。那我应该用什么标签呢?

标签: java filenames


【解决方案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 操作即可创建一个新文件名。定义OutputStream 时使用该文件名(或File 实例)。

如您所见,此答案在任何地方都没有提及 iText,尽管我们创建或列出的文件的扩展名是 .pdf,但它也与 PDF 或 PDF 生成无关。这是一个纯 Java 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2012-08-24
    • 1970-01-01
    • 2014-07-20
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多