ABC PDF 版本 6.0 表单字段只读

ABC PDF version 6.0 Form Fields Read Only

我们有一个 VB.NET 程序正在使用 Supergoo 的 ABCPDF 版本 6.1.1.2。我们的程序采用标准 XML 字符串并将值放置在模板 PDF 上相应的 PDF 表单字段中。

问题:

我们有 3000 多个 PDF 文件,这些文件都 "tagged" 带有表单域。模板 PDF 上最多可能有 50 个表单域,总共可能使用大约 150,000 个表单域。我们注意到其中一些表单域的表单域公共属性被错误地设置为隐藏。 (见截图)

问题是添加字符串值后返回的 PDF 没有显示。对吗?修复表单字段 属性 并完成。但是,无法知道其他 150,000 个表单字段中还有多少被这样错误标记。

有谁知道我是否可以调整 PDF 生成程序以强制忽略常见的表单域 属性?这是 vb.net 代码的示例,我希望稍微改变一下...

 Dim theDoc As Doc = New Doc
 theDoc.Form.Fields("SampleFieldName").?????? 'can we set something here to ignore the hidden property?

根据文档 http://www.websupergoo.com/helppdfnet/source/6-abcpdf.objects/field/2-properties/page.htm

Field 对象的 .Page 属性 会告诉您该字段所在的页面。由于页面是 class,如果结果 'Is Nothing' 那么您知道该字段不可见,因为它没有出现在 PDF 文档的任何页面上。

请注意,在使用未隐藏但呈现时实际上不可见的字段(太小、分布在两个页面上等)时,有一些注意事项。如果您需要处理,您可能会对 http://www.websupergoo.com/helppdfnet/source/6-abcpdf.objects/field/2-properties/rect.htm 感兴趣,具体取决于您的用例。

ABCPDF v6软件,我通过米海的建议发现是可以的。我编写了这个 C# 示例,希望它能对以后的人有所帮助...

static void SetFillableFieldsToWriteableExample(string origFileLocation, string newFileLocation)
{
        Doc theDoc = new Doc();
        theDoc.Read(origFileLocation);
        var theFields = theDoc.Form.GetFieldNames();
        foreach (string theField in theFields)
        {
            Field theFieldInstance = theDoc.Form[theField];
            theDoc.SetInfo(theFieldInstance.ID, "/F", "4");
        }
        theDoc.Save(newFileLocation);
}

我已经对此进行了测试,当所有字段都是 PDF 上的文本字段时它可以正常工作。不确定其他字段类型。

此代码不应在此处编写的生产环境中使用。不能保证 origFileLocation 或 newFileLocation 引用 PDF 并且没有错误处理等问题。这仅用于演示目的。