2010-08-24 1 views
2

Я использую Pdftk и pdftk-php (который основан на forge-fdf). Я хотел бы создать FDF, который можно объединить с PDF, чтобы заполнить раскрывающееся текстовое поле с несколькими параметрами. Как работает pdftk-php по умолчанию, он будет заполнять только выпадающие списки одним значением; передача его массивом не работает.Заполнение поля TypeType: поле выбора с несколькими параметрами с использованием FDF через Pdftk в PHP

Вот соответствующий вывод из pdftk filename dump_data_fields.

FieldType: Choice 
FieldName: VehicleIDData1 
FieldFlags: 4587520 
FieldJustification: Left 

В соответствии с этим примером из спецификации PDF 1.2 выпадающие списки, по-видимому, требуют опции/Опция в FDF.

%FDF-1.2 
1 0 obj << 
/FDF << 
/Fields 
[ 
<< 
/T (My Children) 
/V (Tali) 
/Opt [(Maya) (Adam) (Tali)] 
November 12, 1996 
: 379 
>> 
] 
/F (Dependents.pdf) 
>> 
>> 
endobj 
trailer 
<</Root 1 0 R>> 
%%EOF 

Это подтверждается таблицей на странице 717 в 1,7 specification

Opt 
array 
(Required; choice fields only) An array of options to be presented to the user. Each element of the array can take either of two forms: 
•A text string representing one of the available options 
•A two-element array consisting of a text string representing one of the available options and a default appearance string for constructing the item’s appearance dynamically at viewing time (see “Variable Text” on page 677) 

PDFTK-PHP не использует/Opt; если вы передадите ему массив значений для поля, он будет использовать/Kids, который не заполняет другие выпадающие записи. Я попытался изменить программу для использования/Opt вместо этого, но нет никакой разницы в полученных PDF-файлах. Что я делаю не так?

protected function forge_fdf_fields(&$fdf, 
      &$fdf_data, 
      &$fields_hidden, 
      &$fields_readonly, 
      $accumulated_name, 
      $strings_b) // true <==> $fdf_data contains string data 
    // 
    // string data is used for text fields, combo boxes and list boxes; 
    // name data is used for checkboxes and radio buttons, and 
    // /Yes and /Off are commonly used for true and false 
{ 
    if(0< strlen($accumulated_name)) { 
     $accumulated_name.= '.'; // append period seperator 
    } 

    foreach($fdf_data as $key => $value) { 
    // we use string casts to prevent numeric strings from being silently converted to numbers 
     $fdf.= "<< "; // open dictionary 

     if(gettype($value)== 'array') { // parent; recurse 
      $fdf.= "/T (".$this->escape_pdf_string((string)$key).") "; // partial field name 
      $fdf .= "/V (" . $this->escape_pdf_string((string)$value[0]) . ") "; 

      $fdf .= "/Opt ["; 
      foreach ($value as $option) { 
       $fdf .= "(" . $this->escape_pdf_string((string)$option) . ") "; 
      } 

      /* This is the older code I'm replacing. 
      $fdf.= "/Kids [ ";         // open Kids array 

      // recurse 
      $this->forge_fdf_fields($fdf, 
       $value, 
       $fields_hidden, 
       $fields_readonly, 
       $accumulated_name. (string)$key, 
       $strings_b); 
      */ 

      $fdf.= "] "; // close Kids array 
     } else { 

      // field name 
      $fdf.= "/T (".$this->escape_pdf_string((string)$key).") "; 

      // field value 
      if($strings_b) { // string 
       $fdf.= "/V (".$this->escape_pdf_string((string)$value).") "; 
      } 
      else { // name 
       $fdf.= "/V /".$this->escape_pdf_name((string)$value). " "; 
      } 

      // field flags 
      $this->forge_fdf_fields_flags($fdf, 
         $accumulated_name. (string)$key, 
         $fields_hidden, 
         $fields_readonly); 
     } 
     $fdf.= ">> \x0d"; // close dictionary 
    } 
} 

ответ

1

Я был бы очень заинтересовал ответ :)

Я пытаюсь заполнить это поле:

FieldType: Button 
FieldName: conséquences 
FieldFlags: 0 
FieldValue: avec arr&#234;t 
FieldJustification: Left 
FieldStateOption: Off 
FieldStateOption: avec arr&#234;t 
FieldStateOption: deces 
FieldStateOption: sans arr&#234;t 

Когда я наполняюсь PHP-Pdftk:

$pdf->fillForm(
    array(
     'conséquences' => 'avec arrêt' 
    ) 
); 

Не работает. Ни с 'avec arr&#234 ;t'. Но он работает с 'deces'.

В чем проблема?

+0

Не знаю; это было долго. Верните назад, если вы это выясните! У меня есть смутные воспоминания о том, чтобы пойти на документы, о которых идет речь, с помощью шестнадцатеричного редактора ... – James

Смежные вопросы