PHP: извлечение полей PDF в виде массива из PDF - PullRequest
1 голос
/ 11 января 2012

Я хочу извлечь доступные поля в виде массива из заполняемого файла PDF.

массив типа: array('firstname','secondname','address');

мне не нужны значения для этих полей, если они заполнены.

Какой самый простой способ сделать это с помощью PHP?

Ответы [ 4 ]

2 голосов
/ 11 января 2012

в онлайн-документации для "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";
}
?>
1 голос
/ 16 сентября 2016

Если вы управляете pdf и просто хотите получить ключи, сработает следующее. Использует php, никаких других библиотек (хорошо, если на вашем хосте их нет).

Установите кнопку отправки pdf на html и укажите на странице адрес, по которому будет выполняться ваш php-код. enter image description here

$q_string  = file_get_contents("php://input");
parse_str($q_string , $pdf_array);
$pdfkeys = array_keys($pdf_array);

Строка запроса html из файла pdf помещается в переменную $ q_string. Затем он анализируется в массив с именем $ pdf_array. $ pdf_array содержит все ключи и значения. Затем array_keys () используется для помещения всех ключей в $ pdfkeys так, как вы хотели.

Я пришел сюда, чтобы посмотреть, как читать значения pdf, чтобы поместить их в базу данных, и, наконец, после еще нескольких попыток разобраться в вышесказанном. Надеюсь, отвечает потребностям некоторых людей. xfdf также может работать, но тогда вам нужно будет разобрать как xml - для меня это было проще.

1 голос
/ 21 января 2013

Я проголосовал за ответ Мюррея, потому что она была в самом лучшем состоянии, и я почти уверен, что он прав до php 5.3

К сожалению, pecl fdf больше нет.

К счастью, один «Ноа» сделал комментарий к документации php с помощью reg_match_all regex решения проблемы. Включено здесь с небольшими изменениями для ясности. Да здравствует Ной.

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;
    }

Я ожидаю, что кто-то сыт по горло отсутствием истинной поддержки fdf в php и исправит это.

Поскольку мы все, вероятно, следуем одному и тому же базовому рабочему процессу, если вы читаете этот вопрос, то вы должны знать, что базовый рабочий процесс, которым я следую, является:

НТН

-Ft

0 голосов
/ 19 ноября 2017

Я получаю обычную запись из PDF-файлов, отправляемых на мой сервер, но не в массиве $ _POST.Вы просто должны разобрать его с php: // input:

$allVars = file_get_contents("php://input");

parse_str($allVars, $myPost);

foreach($myPost as $key => $value) {
 $allKeys[] = $key;
}
...