gpt4 book ai didi

c# - Itextsharp 合并 Pdfs 与 acrofields

转载 作者:行者123 更新时间:2023-11-30 14:57:49 28 4
gpt4 key购买 nike

我正在使用 itext sharp 用值填充模板上的表单字段。

我使用 pdfescape.com 创建了模板

这是我用来将值放入 pdf 模板的代码。

 private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
{
var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
var reader = new PdfReader(templatePath);
var outStream = new MemoryStream();
var stamper = new PdfStamper(reader, outStream);

var form = stamper.AcroFields;
var fieldKeys = form.Fields.Keys;

// "Flatten" the form so it wont be editable/usable anymore
// stamper.FormFlattening = true;

foreach (KeyValuePair<String, String> pair in formKeys)
{
if (fieldKeys.Any(f => f == pair.Key))
{
form.SetField(pair.Key, pair.Value);
form.SetFieldProperty(pair.Key, "setfflags", PdfFormField.FF_READ_ONLY, null);
}
}
stamper.Close();
reader.Close();

return outStream.ToArray();
}

我首先使用了 stamper.FormFlattening = true,但后来这些值不可见。因此,我没有使用表单展平,而是将值设置为仅就绪,一切正常。

现在我想使用 the pdf merger by smart-soft 合并多个这些 pdf 文件

合并完成后,这些值将不可见。当我在表格上突出显示时,它会突出显示所有文本,但我无法阅读。我对此进行了研究,并了解到这些字段需要展平。

这是我突出显示所有内容时它在 pdf 上的样子的图像: Image of pdf highlighted Text

我不知道为什么我的字段在展平时不可见,即使我不使用合并。代码或模板有问题吗?替代品也将受到赞赏。

顺便说一句,如果相关的话,我的项目是一个 asp-mvc 项目。

编辑

我添加了以下代码,以便我首先读取模板,将值写入表单字段,关闭它,重新打开它,展平,然后按照其中一条评论的建议再次关闭它。我只是将从 GeneratePdf 函数得到的结果传递给这个函数:

private static byte[] flattenPdf(byte[] pdf)
{
var reader = new PdfReader(pdf);

var outStream = new MemoryStream();
var stamper = new PdfStamper(reader, outStream);

stamper.FormFlattening = true;

stamper.Close();
reader.Close();

return outStream.ToArray();
}

还是一样的结果

最佳答案

感谢 this answer by rhens,我找到了这个问题的解决方案

我所要做的就是通过添加一行来修改我的 GeneratePdf 函数:

form.GenerateAppearances = true;

这是最终结果:

private static byte[] GeneratePdf(Dictionary<String, String> formKeys, String pdfPath)
{
var templatePath = System.Web.HttpContext.Current.Server.MapPath(pdfPath);
var reader = new PdfReader(templatePath);
var outStream = new MemoryStream();
var stamper = new PdfStamper(reader, outStream);

var form = stamper.AcroFields;
form.GenerateAppearances = true; //Added this line, fixed my problem
var fieldKeys = form.Fields.Keys;

foreach (KeyValuePair<String, String> pair in formKeys)
{
if (fieldKeys.Any(f => f == pair.Key))
{
form.SetField(pair.Key, pair.Value);
}
}
stamper.Close();
reader.Close();

return flattenPdf(outStream.ToArray());
}

并且 flattenPdf 与我的问题保持一致。

关于c# - Itextsharp 合并 Pdfs 与 acrofields,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20165307/

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