2012-01-11 3 views
1

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

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

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

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

+0

PHP имеет расширение для манипулирования PDF-файлов - онлайновая документация здесь: http://php.net/manual/en/book.pdf.php –

+0

спасибо, но я ничего не нашел о полях формы там. – Confidence

+0

Ну как насчет здесь? http://php.net/manual/en/ref.fdf.php –

ответ

2

под онлайн-документации для «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

Это ответ был верным до php 5.2, но поддержка pecl fdf была удалена php 5.3. . У всех нас есть короткий момент молчания для утраченной библиотеки ................ – ftrotter

1

Я upvoted ответ Мюррей, потому что она была в Эрнеста, и я уверен, что он прав pre php 5.3

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

К счастью, one "noah" made a comment on the php documentation с решением проблемы regx preg_match_all. Включено здесь с небольшими изменениями для ясности. Да здравствует ноа.

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

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

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

HTH

-FT

+1

[libreoffice, чтобы сделать его формой PDF с именованными полями.] (Http://www.ehow.com/how_7513242_create-fillable-form-pdf-linux.html) ссылка мертва. Ссылка [archive.org] (https://web.archive.org/web/20150110073421/http://www.ehow.com/how_7513242_create-fillable-form-pdf-linux.html) по-прежнему работает. Возможно, дублируйте (восстановите) шаги здесь? – luckydonald

1

Если вы управляете 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, чтобы вставить их в db, и, наконец, после того, как некоторые из них выдумали, вышли выше.Надеюсь, это удовлетворит потребности некоторых людей. xfdf также может работать, но вам нужно будет анализировать как xml, тогда - это было проще для меня.

0

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

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

parse_str($allVars, $myPost); 

foreach($myPost as $key => $value) { 
$allKeys[] = $key; 
} 
Смежные вопросы