9

編集可能なフィールドを含む PDF があります。HTMLフォームからこのPDFに値を渡したいです。FPDF を使用してみましたが、動作しますが、PDF に値を渡した後、PDF のフィールドは編集できなくなります。

もう 1 つの欠点は、値を PDF に渡すときに各フィールドの正確な座標を指定する必要があることです。「PDF編集可能」を維持するために使用できる他のツールに関するアイデアはありますか?

次のコードを使用してpdf http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/simple-demo/を生成しました

4

1 に答える 1

5

私が本当に気に入った PHP ネイティブの PDF 充填メソッドを見つけることができませんでした。代わりに、PHP を使用して XFDF を生成し、pdftk を使用て入力可能な PDF にプッシュします。(このコードでは、PDF のフィールドに名前を付ける必要があることに注意してください。)

連想配列から XFDF を生成する関数の例を次に示します。

function forge_xfdf($file,$info,$enc='UTF-8'){
    $data='<?xml version="1.0" encoding="'.$enc.'"?>'."\n".
        '<xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve">'."\n".
        '<fields>'."\n";
    foreach($info as $field => $val){
        $data.='<field name="'.$field.'">'."\n";
        if(is_array($val)){
            $data.='<</T('.$field.')/V[';
            foreach($val as $opt)
                $data.='<value>'.$opt.'</value>'."\n";
        }else{
            $data.='<value>'.$val.'</value>'."\n";
        }
        $data.='</field>'."\n";
    }
    $data.='</fields>'."\n".
        '<ids original="'.md5($file).'" modified="'.time().'" />'."\n".
        '<f href="'.$file.'" />'."\n".
        '</xfdf>'."\n";
    return $data;
}

次に、その XFDF を一時ファイルに書き込みます。

$empty_form      = '/path/to/fillable/pdf/form.pdf'
$fdf_filename    = tempnam(PDF_TEMP_DIR, 'fdf');
$output_filename = tempnam(PDF_TEMP_DIR, 'pdf');
$fdf_data = forge_xfdf($empty_form, $data, 'UTF-8');

if($fdf_fp = fopen($fdf_fn, 'wb')){
    fwrite($fdf_fp, $fdf_data);
    fclose($fdf_fp);

    $command = '/usr/local/bin/pdftk "'.$empty_form.'" fill_form "'.$fdf_filename.'" output "'.$output_file.'" dont_ask';
    passthru($command);

    // SEND THE FILE TO THE BROWSER

    unlink($output_file);
    unlink($fdf_filename);
}

編集不可能な PDF が必要な場合は、単語flattenの前に単語をコマンドに追加しdont_askます。


PDF フォームへの入力に執着していない場合は、HTML でフォームを生成し、dompdfを使用して HTML から PDF に変換することもできます。

于 2013-03-12T20:06:57.297 に答える