【发布时间】:2014-04-18 20:01:39
【问题描述】:
我已经搜索过此功能,但找不到任何相关内容。我已经看到了从 PDF 文档中提取图像、文本和 Acro 字段的各种示例,但我想要一些不同的东西。我已经将一个 Excel 工作表转换为 PDF,其中有几个 ActiveX TextFields。转换为 PDF 后,这些字段不再是交互式的。我正在从 C# 应用程序读取 PDF 文件,我想检索这些 ActiveX 文本字段的坐标,然后需要删除这些字段。我正在尝试通过阅读 PDF 文件资源,
var fields = (PdfDictionary)page.Get(PdfName.CONTENTS);
我不确定要使用哪个正确的枚举值,或者是否可以通过这种方式检索字段。 示例 PDF 文件可以从这里查看PDF File Link
更新:到目前为止,我已经设法确定从 excel 导出到 pdf 时的 ActiveX 文本字段是这样的(如果我弄错了,抱歉),
<</Type/XObject/Subtype/Form/BBox[ 0 0 377.07 40.005] /Matrix[ 0.19094 0 0 1.7998 0 0] /Filter/FlateDecode/Length 155>>
我还在我的代码中检索了这些值。我只需要每个字段的坐标,我的猜测是 BBox 和 Matrix 值与此有关。有什么建议吗?
【问题讨论】:
-
基本上,如果字段不是(Acroform 或 XFA)表单字段,它们就不是字段,只有我们(查看 PDF)认为是字段框的行。因此,一般来说,您必须收集线条并寻找特定的矩形。但是,对于您的特定 PDF,单个“字段”使用单个 xobjects 表示。因此,您可以使用更新帖子的数据以及绘制 xobject 时的当前转换矩阵来获取坐标,例如
3.92 0 0 0.40333 183.42 582.54 cm /Meta9 Do为公司名称。不过,这很脆弱。 -
感谢 mkl 的回复。我不完全理解它“您可以使用更新帖子的数据以及绘制 xobject 时的当前转换矩阵来获取坐标”。我已经从 MS Excel 中放置了这些 XOBject,然后将其转换为 PDF。应用程序不知道用于放置 XObject 的坐标。从值 "3.92 0 0 0.40333 183.42 582.54" 我可以理解 183.42 和 582.54 提到了位置,但是我在哪里可以获得尺寸?
-
从值...我可以理解... - 此外,
3.92 0 0 0.40333是一个缩放子矩阵,应用于您已经找到的0.19094 0 0 1.7998矩阵之后.将此缩放应用于边界框大小377.07 40.005应该会产生 xobject 的尺寸。除非 xobject 本身有一些边距,否则它们应该是“字段”尺寸。
标签: c#-4.0 itextsharp