我们正在使用 WkHtmlToPdf 将 html 转换为 pdf。现在我也使所有表单字段都可以根据要求进行编辑。由于在将 Html 转换为 Pdf 时 WkHtmlToPdf 中存在错误,因此它使所有表单字段的属性为可见不可打印。
为了解决这个问题,我们使用 ITextSharp 读取由 WkHtmlToPdf 生成的现有 pdf 并将该属性设置为每个表单字段的可见性。
我就是这样做的
var pdfReader = new PdfReader(inputFilename);
using (var outputStream = new FileStream(outputFilename, FileMode.OpenOrCreate))
{
var stamper = new PdfStamper(pdfReader, outputStream);
// Regenarating all the fileds using itextSharp.
// Since wkHtmltoPdf has differnt default settings for pdf form fields (Visible and not Printable)
var formFields = stamper.AcroFields;
var filedNames = formFields.Fields.Keys;
foreach (var keyName in filedNames)
{
formFields.SetFieldProperty(keyName, "setflags", PdfAnnotation.FLAGS_PRINT, null);
formFields.SetFieldProperty(keyName, "setflags", PdfFormField.FF_EDIT, null);
formFields.SetFieldProperty(keyName, "textsize", 8.0f, null);
formFields.RegenerateField(keyName);
}
}
这解决了我所有字段的问题,但复选框。我在 html 中有几个复选框,它们使用 WkHtmlToPdf 转换为 pdf。我意识到,当我尝试 RegenerateField()(foreach 循环中的最后一行)复选框时,它会丢失其所有属性(无论我选中还是未选中),它只显示空复选框,并且不可编辑。
为了解决这个问题,我想出了以下
if (formFields.GetFieldType(keyName).Equals(AcroFields.FIELD_TYPE_CHECKBOX))
{
// Regenerate checkbox formfield causing it to reset all its properties
// including checkd/uncheked property
formFields.SetFieldProperty(keyName, "setflags", PdfAnnotation.FLAGS_PRINT, null);
// Ignore the commented code as it is not working Not sure why??? and how
//var item = formFields.GetFieldItem(keyName);
//var appearance = item.GetValue(0).Get(PdfName.AS);
//if (appearance != null)
/{
// if (appearance.tostring().tolower().equals("/yes"))
// {
// formfields.regeneratefield(keyname);
// Not even one working when I try to set the check box status like below
// success = formfields.setfield(keyname, "yes");
// success = formfields.setfield(keyname, "/yes");
// success = formfields.setfield(keyname, "/yes");
// success = formfields.setfield(keyname, "on");
// success = formfields.setfield(keyname, "1");
// }
}
使用代码(不包括注释)代码复选框成功保留其状态并显示在生成的 Pdf 中。但它不是打印。我检查了复选框的属性,它与 pdf 中的任何其他字段一样可见。除了复选框之外,所有字段(文本框)都在打印其值。
我正在通过 --> Open pdf document--> Forms--> Add/Edit Fields 检查属性
我在这里做错了什么?我没有在复选框上设置属性,而是尝试使用 Itextsharp 构建一个全新的复选框,但我无法使用 ItexSharp 手动示例。以前有人做过这些东西吗?
即使我使用 ItextSharp 生成了一个新的复选框,我如何才能完全替换现有的复选框?
非常感谢您阅读我的故事。。