通过创建多个PDF出现的问题

时间:2019-07-22 21:29:11

标签: c# loops

我成功创建了一个pdf,但是如何设计文件名循环? 问题是每个循环我的文件都会被覆盖

我尝试将变量添加到文件中,但不起作用:

var filename = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
    + strGPNrVar + DateTime.Now + "Report.pdf";

这是到目前为止的代码:

Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/Report.pdf", FileMode.Create));

PdfPTable table = new PdfPTable(5);
document.Opem();

foreach (var f in transactions)
{
      //MessageBox.Show("Das ist die Menge" + f.CurrencyAmount);

      table.AddCell(f.ID.ToString());
      table.AddCell(f.TransactionType);
      table.AddCell(f.UserName);
      table.AddCell(f.EuroAmount);
      table.AddCell(f.GPNummer);


      document.Add(table);

}

document.Close();

System.Diagnostics.Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/Report.pdf");
MessageBox.Show("Pdfs erfolgreich erstellt");

我需要为每个客户循环一次。文件名应为GpNrvar字符串,还应为datetime.now

2 个答案:

答案 0 :(得分:1)

您说“它不起作用”,但是您没有描述为什么它不起作用。如果您告诉我们发生了什么事,我们可以更好地帮助您解决问题。但是,我认为您的问题是日期的默认格式包含无效文件名字符列表中的字符。

您的代码通过直接添加到字符串中来使用DateTime.Now

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ strGPNrVar+ DateTime.Now + "Report.pdf";

这等同于说:

Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
+ strGPNrVar + DateTime.Now.ToString() + "Report.pdf";

请注意ToString()部分-需要将DateTime值转换为字符串,并且默认格式通常包括斜杠和冒号,但文件名on Windows filesystems中均不允许使用斜杠和冒号。在您的情况下(如果strGPNrVar为“ 123”),您将最终得到这样的文件名(在美国的系统上):

C:\Users\YourUsername\Desktop1237/22/2019 9:46:06 PMReport.pdf

您需要手动指定日期格式以消除无效字符。正如其他人指出的那样,这说明了第二个问题,您应该使用Path.Combine来组合目录路径和文件名-这将在需要的地方添加斜杠:

var filename = 
    Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
  strGPNrVar + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss")
  + $"_Report.pdf");

答案 1 :(得分:0)

谢谢,您帮了我很多忙! 这是对我有用的代码:

var pdf1 =
            Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            strGPNrVar + "_" + DateTime.Now.ToString("yyyy-MM-dd-hh.mm.ss")
            + $"_Report.pdf");
            using (FileStream fs = new FileStream(pdf1, FileMode.Create,
            FileAccess.Write, FileShare.None))
           {

            Document document = new Document(PageSize.A4);
            PdfWriter writer = PdfWriter.GetInstance(document, fs);