Заполнение поля FieldType: Choice с несколькими вариантами с использованием FDF через Pdftk в PHP
Я использую Pdftk и pdftk-php (который основан на forge-fdf). Я хотел бы создать FDF, который можно объединить с PDF, чтобы заполнить раскрывающееся текстовое поле с несколькими параметрами. Способ pdftk-php работает по умолчанию, он будет заполнять выпадающие списки только одним значением; передача этого массива не работает.
Вот соответствующий вывод pdftk с именем файла dump_data_fields.
FieldType: Choice
FieldName: VehicleIDData1
FieldFlags: 4587520
FieldJustification: Left
Согласно этому примеру из спецификации PDF 1.2, для раскрывающихся списков требуется опция /Opt в 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.
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êt
FieldJustification: Left
FieldStateOption: Off
FieldStateOption: avec arrêt
FieldStateOption: deces
FieldStateOption: sans arrêt
Когда я заполняю php-pdftk:
$pdf->fillForm(
array(
'conséquences' => 'avec arrêt'
)
);
Не работает Ни с 'avec arrê ;t'
, Но это работает с 'deces'
,
В чем проблема?