gpt4 book ai didi

c# - 使用 iTextSharp 多次写入包含字段的 PDF 文件

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

我有一个包含 3 个字段的 PDF 文档 txt_FirstNametxt_MiddleNametxt_LastName 我使用 iTextSharp 写入.

我有一个循环来创建输出文件、写入文件并关闭文件。

第一次在循环中文件写入名字和中间名。

在循环中的第二次,文件应该有名字、中间名,并写下姓氏。

问题:问题是,当它第二次进入循环并将姓氏写入名字时,中间名消失了。

目标:我想做的主要事情是多次写入同一个 PDF 文档

下载PDF模板: https://www.scribd.com/document/412586469/Testing-Doc

    public static string templatePath = "C:\\temp\\template.pdf";
public static string OutputPath = "C:\\Output\\";

private static void Fill_PDF()
{
string outputFile = "output.pdf";
int counter = 1;

for (int i = 0; i < 2; i++)
{
PdfStamper pdfStamper;
PdfReader reader;

reader = new PdfReader(File.ReadAllBytes(templatePath));
PdfReader.unethicalreading = true;

if (File.Exists(OutputPath + outputFile))
{
pdfStamper = new PdfStamper(reader, new FileStream(OutputPath + outputFile,
FileMode.Append, FileAccess.Write));
}
else
{
pdfStamper = new PdfStamper(reader, new FileStream(OutputPath + outputFile,
FileMode.Create));
}
AcroFields pdfFormFields = pdfStamper.AcroFields;

if (counter == 1)
{
pdfFormFields.SetField("txt_FirstName", "Scooby");
pdfFormFields.SetField("txt_MiddleName", "Dooby");
counter++;
}
else if (counter == 2)
{
pdfFormFields.SetField("txt_LastName", "Doo");
}
pdfStamper.Close();
}
}

最佳答案

这似乎是一个简单的错误。第一次通过循环时,您加载空白模板并写下名字和中间名。第二次通过循环,您再次加载空白模板仅向其中写入姓氏,然后保存到相同的文件名,覆盖它。如果在第二次循环中,你想加载已经包含名字和中间名的文件,你必须加载你第一次写的输出文件,而不是空白再次模板。或者如果你想再次加载空白模板,在你的 if (counter == 2) 子句中,你将不得不写下所有 3 个名字,而不仅仅是姓氏。

我重现了您的错误,并使其正常工作。这是我描述的第一个解决方案的代码(对您的代码进行了少量修改):

    public static string templatePath = "C:\\temp\\template.pdf";
public static string OutputPath = "C:\\temp\\output\\";

private static void Fill_PDF()
{
string outputFile = "output.pdf";
int counter = 1;

for (int i = 0; i < 2; i++)
{
PdfStamper pdfStamper;
PdfReader reader = null;

/********** here's the changed part */
if (counter == 1)
{
reader = new PdfReader(File.ReadAllBytes(templatePath));
} else if (counter == 2)
{
reader = new PdfReader(File.ReadAllBytes(OutputPath + outputFile));
}
/************ end changed part */

PdfReader.unethicalreading = true;

if (File.Exists(OutputPath + outputFile))
{
pdfStamper = new PdfStamper(reader, new FileStream(OutputPath + outputFile,
FileMode.Append, FileAccess.Write));
}
else
{
pdfStamper = new PdfStamper(reader, new FileStream(OutputPath + outputFile,
FileMode.Create));
}
AcroFields pdfFormFields = pdfStamper.AcroFields;

if (counter == 1)
{
pdfFormFields.SetField("txt_FirstName", "Scooby");
pdfFormFields.SetField("txt_MiddleName", "Dooby");
counter++;
}
else if (counter == 2)
{
pdfFormFields.SetField("txt_LastName", "Doo");
}
pdfStamper.Close();
}
}

关于c# - 使用 iTextSharp 多次写入包含字段的 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483618/

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