我用Adobe LiveCycle Designer创建了一个PDF表单。我现在正在努力从PDF中以编程方式提取填充后的数据。
我尝试使用poppler(qt4绑定,但我想这并不重要),但显然poppler无法处理XFA表单。虽然evince和okular能够显示表单。。。
据我所知,PDF包含一个XDP,而XDP又包含XFA表单。我的问题是,我如何从PDF中提取这些数据?
构成XFA的XML文档(XDP格式)作为XFA键的值存储在AcroForm字典(交互式表单字典)中。AcroForm字典从Catalog字典(PDF文档的根)中引用。
XFA值可以是流或流数组。如果是流,它包含整个XML文档。如果是数组,不同的流包含单独的XDP数据包。将它们连接起来将获得完整的XML文档。
其中一个XDP数据包是dataSets数据包。实际的表单数据将在此数据包的子元素中:xfa: data。示例:
<xfa:dataSets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<!-- arbitrary XML data, e.g.: -->
<Employee>
<FirstName>John</FirstName>
<Name>Doe</Name>
</Employee>
</xfa:data>
</xfa:dataSets>
任何提供对PDF对象的低级访问的PDF库都可以用于提取XML文档。只需在目录中导航
一些PDF库可能提供更高级的方便方法。
(免责声明:我是iText软件公司的员工。)例如,使用iText(Java),您可以简单地将XFA作为一个组织来实现。w3c。dom。文档:
PdfReader reader = new PdfReader(pdfFile);
XfaForm xfa = reader.getAcroFields().getXfa();
org.w3c.dom.Document doc = xfa.getDomDocument();
或者仅仅以组织的形式获取数据集数据包。w3c。dom。节点:
org.w3c.dom.Node datasets = xfa.getDatasetsNode();
我必须从PDF签名文档中提取签名字段,以创建打印签名版本。到目前为止,我已经能够使用以下iText代码恢复签名者证书、原因、签名日期和其他字段: 据我所知,PDF签名是使用iText PdfPkcs7类制作的,使用setExternalDigest方法添加在外部应用程序中创建的PKCS1字节数组。文件看起来已由外部工具正确签名和验证。 但是,打印版本所需的字段之一是“签名数字戳”,它是签名文档哈希
假设我的用户去了他们办公室的扫描仪。扫描仪能够生成扫描文档的PDF。这基本上就是我拥有的文件类型。 我想做的是从这个PDF中提取文本。这不是“第一代”pdf,因为文本没有嵌入到pdf中。文本嵌入在PDF中的图像中。 PDFBox的iText中是否有允许检索此数据的功能?如果可能的话,我正在尝试避免对图像进行OCR。我希望IText或PDFBox中有一些内置的东西可以做到这一点。 请注意,我不是在谈
我知道以前也有人问过类似的问题,但是这些问题已经过时了(有些问题可以追溯到2006年)。 我有一个. net 3.5应用程序(w/iTextSharp 5),我正在转换为. net核心(iText 7),它从联邦快递跟踪文档中提取签名,通过SOAP服务以字节[]数组发送。这段代码多年来一直运行良好,只是略有更新。从联邦快递返回的PDF文档中有几个图像,但签名块不是110x46图像(这是pdf文件中
以下是从PDF中提取内容和元数据的程序。 import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import o
在python代码中,如何有效地将pdf中的某个页面保存为jpeg文件?(用例:我有一个python烧瓶Web服务器,其中pdf-s将被上传,每个页面对应的jpeg-s是存储的。) 这个解决方案很接近,但问题是它无法将整个页面转换为jpeg。
我正在使用PDFBox从我的pdf(只包含JPG的)中提取图像。 因为我将把这些图像保存在我的数据库中,所以我想先把每个图像直接转换成一个inputstream对象,而不把文件临时放在我的文件系统上。然而,我在这方面遇到了困难。我认为这是因为使用了,就像我在下面的示例中所做的那样: 然而,这是可行的: 知道我如何将每个PDXObjectImage(或我能得到的任何其他对象)转换为InputStre