当前位置: 首页 > 知识库问答 >
问题:

展平表单字段后隐藏在PDF图章后面的文本内容-iTextSharp, Adobe

濮阳驰
2023-03-14

如果我不展平表单字段,内容会按预期显示在图章上。当我展平时,内容隐藏在邮票后面。如果我将PDF加载到Adobe中,我可以移动图章并查看其背后的内容。

PDF模板是在Adobe Acrobat Reader DC中创建的(有关版本详细信息,请参阅底部)。我使用iTextSharp使用条件数据填充文档字段并返回PDF字节。

移动前的PDF邮票

PDF邮票,移动后

// flatten fields
pdfStamper.FormFlattening = true;
// stamping
var fields = stamper.AcroFields;

stamper.AcroFields.SetFieldProperty(fieldName, "textsize", fontSize, null);
fields.SetField(fieldName, value);
fields.SetFieldProperty(fieldName.ToString(),
    "setfflags",
    PdfFormField.FF_READ_ONLY,
    null); 

iTextSharp 5.5.12

Adobe Acrobat Reader DC 20.6.20042.371103

共有1个答案

督冠玉
2023-03-14

显示PDF页面时,首先绘制静态内容,然后在该静态内容上绘制各种注释。注释是按照它们在页面的注释数组中出现的顺序绘制的。

因此

如果我不展平表单字段,内容会按预期显示在图章上。

显然,这里的内容字段不是静态的。这就意味着戳注释发生在注释数组中,在表单字段小部件注释之前。

当我展平时,内容隐藏在邮票后面。

因为你只会把田野夷为平地

// flatten fields
pdfStamper.FormFlattening = true;

这是很自然的:扁平化字段意味着将其内容添加到静态页面内容中,并从表单中删除字段,从注释中删除字段小部件。因此,前一个字段内容现在是静态页面内容的一部分,因此在任何剩余注释之前绘制,尤其是在戳记之前。

如果您希望字段内容显示在戳上,您有两个选项:

>

  • 不要展平表单字段-如果您不展平表单字段,它们的内容将保留在注释中,由于注释数组中的顺序,注释将绘制在戳上

    为了获得某种类似扁平化的效果,可以将表单字段设置为只读(就像您已经做的那样),并锁定它们的小部件注释。

    首先展平图章-如果先展平非字段注释,则它们的内容将首先添加到静态页面内容中。因此,如果随后将字段展平,字段内容将显示在戳记内容上。

    iText还有另一个属性要求平展非字段注释:

    pdfStamper.AnnotationFlattening = true;
    

    不幸的是,它没有内置功能可以简单地按照页面上出现的顺序一次性展平所有注释(表单字段小部件和其他注释)。即使您将FormFlattningAnnotationFlattning设置为true,表单字段小部件也会在其他注释之前展平。

    因此,您必须在PDF上加盖两次戳记:在第一个戳记步骤中,您仅将annotationflatting设置为true,在第二个戳记集中,您将formflatting设置为true

  •  类似资料:
    • 我在用iTextVB。net将一些背景(即其他单页pdf)打印到另一个pdf上。 所以我有一个5页的“空白”pdf,我在第一页上盖上一个名为page1的文件的第一页。pdf,然后我把第2页的第一页。pdf作为第2页等的背景。 到目前为止,它运行良好,但我遇到了一个问题,在我的“空白”上打上一个特定的pdf文件——问题似乎与我称之为“page4”的文件有关。这似乎是因为第4页。pdf被设计成一个可填

    • 如何自动隐藏或删除DIV的内容。我把一些信息放在一个容器里。 我想显示新消息只有几秒钟,它可以是5,10什么,但然后我想它是空的,添加新消息,显示它,而不是隐藏。我当然知道setTimeout的"诀窍": 但是在这个选项中,我必须通过每个消息传递这个脚本,这不是我要找的。我也尝试过setInterval,但是正如名字所说,它是间隔,所以消息可以在5秒钟内可见,或者如果它到达间隔时间的末尾,甚至可以

    • 操作步骤: ①在"图层管理"模块,选择需要设置的图层,点击"更多"按钮。 ②选择"设置信息窗"按钮。 ③弹出"信息窗设置"窗口。 ④隐藏字段,将显示字段的√去掉,点击"应用"。 ⑤点击记录,弹出窗口字段已经隐藏。 字段隐藏前: 字段隐藏后: 注意 ●在不删除字段的情况下,设置信息窗中需要显示的字段,默认是全部显示。 ●标题字段无法隐藏。 操作动图: [查看原图]

    • 问题内容: 我有一个文本框,有没有办法隐藏闪烁的文本光标?我之所以这样说,是因为我正在制作一个恐怖/神秘的网站,线索之一就是可以在任何地方开始打字。 也许我可以用JavaScript做到这一点? 问题答案: 尝试这个: 这个想法是在真实的对象上方/上方创建第二个不可见的对象。用户正在键入不可见的内容,但由于不可见,因此文本(也不显示插入符号/光标)不出现!然后,您可以使用JavaScript将其值

    • 我正在开发一个客户机-服务器应用程序,其中客户机必须使用他们的签名签署PDF文档,并将它们上传到服务器。由于客户端没有将签名嵌入PDF的手段,他们只能读取原始字节并以原始字节的形式生成签名,因此任务变得复杂。 我正在尝试实现以下工作流: 客户端将未签名的PDF上载到服务器 服务器打开PDF,提取客户端需要签名的字节,并将这些字节发送回 客户端接收这些字节,使用客户端证书对其进行签名,并将签名发送到

    • 我正在使用最新版本的iText(5.5.0)来填充pdf表单并将其展平。 出于某种原因,当我使用fdf填写表格时,除了像“ç”这样的特殊字符外,一切都正常。但当我使用xfdf时,会出现特殊字符,但有两个字段不会出现(“comment”和“datelicFormatted”) - 该表单是通过转换word文档并使用acrobat 10添加文本字段创建的。 真正奇怪的是当我要求不要展平它时:字段包含正