【发布时间】:2020-01-03 19:56:47
【问题描述】:
我目前正在使用 SetaPDF 获取位于文档中的表单字段并将这些表单字段名称保存在数据库中。但是,我正在尝试获取这些表单字段的页码。我在 Seta 文档中找不到任何有助于解决此问题的内容。我可以使用其他 PDF 库来完成此操作吗?
$document = SetaPDF_Core_Document::loadByFilename($file);
$formFiller = new SetaPDF_FormFiller($document);
$fields = $formFiller->getFields();
foreach ($fields->getNames() as $fieldName) {
$field = $fields->get($fieldName);
$is_read_only = 0;
if ($field->isReadOnly()) {
$is_read_only = 1;
}
$is_text = 1;
$field_name = DB::Scrub($fieldName);
$base_field_name = $field->getOriginalQualifiedName();
if (strpos($base_field_name,"#") !== false) {
$arr_field = explode("#", $base_field_name);
$base_field_name = $arr_field[0];
}
if (strpos($base_field_name,"*") !== false) {
$is_text = 0;
$base_field_name = str_replace("*","",$base_field_name);
}
$sql = "INSERT INTO [cust].[PDF_Fields] (file_name,field_name,base_field_name,is_read_only,is_text)
VALUES ('$new_file','$field_name','$base_field_name',$is_read_only,$is_text)";
DB::Query($sql);
}
【问题讨论】:
-
如果您要遍历 PDF 的页面,只需添加一个计数器并用它填充页码。
-
不幸的是,我不是。我正在打开文档并调用 getFields() 方法。这将获取文档中的每个字段。不包含页面详细信息。
-
请注意,PDF AcroForm 字段在技术上不是任何页面的一部分,而是作为文档范围的元数据存在。相反,字段在页面上由 Widget Annotation 表示。一个字段可以有零到多个小部件,它们看起来可能不同,但都具有相同的值。
-
那很不幸。谢谢你的解释。
-
我不熟悉 SetaPDF 但您可以尝试以下操作(不确定 SetaPDF 是否支持该功能):从字段对象中检索字段小部件列表(这些是page) 并从每个字段小部件中检索对包含小部件的页面的引用。此信息存在于 PDF 文件中,您必须查看 SetaPDF 是否公开。