【问题标题】:ABC PDF version 6.0 Form Fields Read OnlyABC PDF 版本 6.0 表单字段只读
【发布时间】:2015-09-09 18:45:21
【问题描述】:

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

问题:

我们拥有超过 3000 个 PDF 文件,这些文件都已使用表单域进行了“标记”。模板 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?

【问题讨论】:

  • 在 PDF 中,隐藏属性有点位于标志掩码中(字段小部件字典中的 /F 条目)。我对 ABCpdf 不熟悉,但也许你可以找到一种方法在现场设置这些标志。
  • 这正是我想要的。感谢您的见解。就我而言,ABC PDF 有一个 SetInfo 方法,允许您覆盖表单字段设置。覆盖它的实际代码是:theDoc.SetInfo(theField.ID, "/F", "4");

标签: vb.net pdf-generation abcpdf


【解决方案1】:

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

Field 对象的 .Page 属性将告诉您该字段所在的页面。由于 Page 是一个类,如果结果为“无”,那么您就知道该字段不可见,因为它不会出现在 PDF 文档的任何页面上。

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

【讨论】:

  • 感谢您的意见。但是,此版本的 ABCPDF 似乎没有 xxx.Form.Fields.Field() 选项。另外,我希望有一种方法可以真正改变表单字段的状态,使其不被隐藏。
  • 1) 那应该是 Fields.Item("name of the field")。如果您不知道如何使用您正在使用的产品访问页面中的字段列表,那么您将通过我链接的文档弄清楚如何做到这一点。就我而言,我回答了你的问题。 2) 将字段更改为“不隐藏”有点复杂,因为 PDF 格式的工作方式涉及添加图形对象并将其链接到页面,并且可能值得提出一个新问题。
  • 谢谢。我确实知道如何访问该字段,因为我们已经有一个 10,000 行的程序可以做到这一点。您好心发布的示例不存在,因为您最初编写它并且问题尚未得到回答。无论如何,谢谢你的时间。听起来您不确定 ABCPDF 是否甚至能够将 PDF 表单字段的公共属性更改为“未隐藏”。据我所知,文档似乎也没有解决这个具体案例。
【解决方案2】:

对于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 并且在其他问题中没有错误处理。这仅用于演示目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    相关资源
    最近更新 更多