我想从可填充的 pdf 中提取可用字段作为数组。
一个数组,如:array('firstname','secondname','address');
如果它们已填写,我不需要这些字段的值。
使用 PHP 最简单的方法是什么?
在“fdf_next_field_name”的在线文档下,给出了以下示例,您可以修改以将字段名称存储到数组中
<?php
$fdf = fdf_open($HTTP_FDF_DATA);
for ($field = fdf_next_field_name($fdf); $field != ""; $field = fdf_next_field_name($fdf, $field)) {
echo "field: $field\n";
}
?>
我赞成默里的回答,因为她很认真,我很确定他在 php 5.3 之前是对的
可悲的是, pecl fdf 已不复存在。
值得庆幸的是,一个“诺亚”用 preg_match_all 正则表达式解决了这个问题,对 php 文档发表了评论。为清晰起见,在此处略作修改。诺亚万岁。
function parse($text_from_file) {
if (!preg_match_all("/<<\s*\/V([^>]*)>>/x",$text_from_file,$out,PREG_SET_ORDER))
return;
for ($i=0;$i<count($out);$i++) {
$pattern = "<<.*/V\s*(.*)\s*/T\s*(.*)\s*>>";
$thing = $out[$i][2];
if (eregi($pattern,$out[$i][0],$regs)) {
$key = $regs[2];
$val = $regs[1];
$key = preg_replace("/^\s*\(/","",$key);
$key = preg_replace("/\)$/","",$key);
$key = preg_replace("/\\\/","",$key);
$val = preg_replace("/^\s*\(/","",$val);
$val = preg_replace("/\)$/","",$val);
$matches[$key] = $val;
}
}
return $matches;
}
我希望有人会厌倦 php 中缺乏真正的 fdf 支持并解决这个问题。
如果您正在阅读此问题,我们可能都遵循相同的基本工作流程,那么您应该知道我遵循的基本工作流程是:
高温高压
-FT
如果您控制 pdf 并且只想要密钥,则以下将起作用。使用 php,没有其他库(如果您的主机没有它们很好)。
将 pdf 提交按钮设置为 html 并将页面设置为您的 php 代码将运行的地址。
$q_string = file_get_contents("php://input");
parse_str($q_string , $pdf_array);
$pdfkeys = array_keys($pdf_array);
来自 pdf 文件的 html 查询字符串被放入变量 $q_string。然后将其解析为一个名为 $pdf_array 的数组。$pdf_array 包含所有的键和值。然后 array_keys() 用于根据需要将所有键放入 $pdfkeys 中。
我来这里是为了寻找如何读取 pdf 值以放入数据库中,最后经过一番摸索后想出了上面的内容。希望能满足一些人的需求。xfdf 也可以工作,但你需要解析为 xml——这对我来说更简单。
我从提交到我的服务器的 PDF 中获得了正常的帖子,但不在 $_POST 数组中。你只需要从 php://input 解析它:
$allVars = file_get_contents("php://input");
parse_str($allVars, $myPost);
foreach($myPost as $key => $value) {
$allKeys[] = $key;
}