c# - iTextSharp 将预先存在的 PDF 作为图层添加到另一个 PDF

标签 c# pdf pdf-generation itext

我有正在转换为 PDF 的报告。其中一些报告缺少信息,仅仅是因为我们没有对其进行跟踪。我用报告的外壳创建了另一个 PDF,并在其上放置了输入字段控件。我想知道是否有办法将 shell PDF 应用于转换后的 PDF,以便用户可以在那些空白字段中输入信息,而无需打印出来并手写?我通过 Adob​​e Acrobat Pro 9.3 将生成的 PDF 作为 Layer 应用于 shell PDF 来手动完成此操作。我已经对 iTextSharp 进行了很多关于 Layers 的探索,但我仍然没有找到任何有用的东西。

先谢谢你!

最佳答案

1) 图层不适用于字段。 PDF 图层是页面内容的一部分。与所有注释一样,表单字段 float 在页面上方。

2) 话虽如此,您可以使用 Acrobat/Reader JavaScript 隐藏和显示表单域。 “doc”对象通常是字段和页面入口点中的“this”,因此要显示给定的字段,它只是:

var fld = this.getField("fieldName");
fld.hidden = false;

有很多不同的地方可以将 JS 添加到 PDF。各种字段事件、页面事件、文档事件。您还可以将图层的操作设置为某些 javaScript。哎呀,您可以将书签的操作设置为 javascript 而不是“去那里”操作。

请注意,图层在 PDF 技术术语中称为“可选内容组”(OCG)。如果您真的想要创建一个层,它看起来应该是这样的:

// layer implements PdfOCG
PdfLayer layer = new PdfLayer("MyLayer", writer);

PdfContentByte cb = getAContentByteFromSomewhere();

cb.beginLayer(layer); // takes PDFOCG object

/* draw stuff to be part of that layer */

cb.endLayer();

iText 站点上有很多示例对应“iText In Action, 2nd edition”(我不收钱,作者是 friend )。 The aforementioned examples can be found here .

值得重复:字段不能是 OCG(图层)的一部分。然而,它们可以编写脚本来表现得像它们一样。

关于c# - iTextSharp 将预先存在的 PDF 作为图层添加到另一个 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3442666/

相关文章:

C#:实现IDisposable接口(interface)时Dispose方法的内容应该是什么

ruby-on-rails - Ruby on Rails JPEG 转 PDF

java - 通过 java itext api (com.lowagie.text.pdf) 生成 PDF 文件时使用箭头键滚动时启用连续滚动

java - 如何在 apache PDFbox 中生成表格时换行文本

vba - 按特定顺序将多个页面导出为 PDF

c# - 删除单个反斜杠,将字符串中的 double 转换为单精度数

c# - 在页面构造函数中异步调用 Web 服务

c# - 从 Visual Studio 2015 运行在 SQL Server Data Tools for Visual Studio 2013 中开发的 SSIS 包

javascript - 将 Livecycle 动态可填写 PDF 转换为静态可填写 PDF(而不是扁平化 PDF)

PHP FPDF 无法在 Chrome 中加载 PDF 文档