11

アプリに laravel を使用しましたが、dompdf は次の場所にあります。

../ベンダー/dompdf/dompdf

私が達成したかったのは、.docx ファイル (Microsoft Word) を .pdf ファイルに変換することです。docx ファイルは、テンプレート ファイルを読み込んで値を置き換えることにより、phpWord によって生成されました。

スニペットは次のとおりです。

 // Get the absolute path of the template file
 $wordTemplatePath = $this->getDocumentTemplatePath('resignation.docx');

 // Load the template file
  $document = $this->phpWord->loadTemplate($wordTemplatePath);

// This will be filled with data
 $wordData = []

.... Process to fill the data .....

// Replace value to actual word document
  $this->setTemplateValues($wordData, $document);


// Generate its filename
  $file = $this->generateFileName('Retirement-Certificate.docx', $id);

        // Fetch the absolute path to save the document
        $filepath = $this->getSavePath($file);

        // Save the word document
        $document->saveAs( $filepath );

その後、.docx ファイルが生成されます。それのPDF版も作りたかった。そこで、このコード スニペットを検索して見つけ、コードに追加しました。

             \PhpOffice\PhpWord\Settings::setPdfRendererPath('../vendor/dompdf/dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('DOMPDF');

//Load temp file
$phpWord = \PhpOffice\PhpWord\IOFactory::load($filepath); 

//Save it
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');  

しかし、私はこのエラーが発生しました:

    {"error":
{"type":"PhpOffice\\PhpWord\\Exception\\Exception","message":"PDF rendering library or library path has not been defined.",
"file":"C:\\xampp\\htdocs\\vagrant\\vendor\\phpoffice\\phpword\\src\\PhpWord\\Writer\\PDF.php",
"line":49}}

PHPWord の PDF ライターとして DomPDF を作成するにはどうすればよいですか? 他に選択肢がないのでこちらで質問させていただきます。あなたが私を助けてくれることを願っています。ありがとう!

4

2 に答える 2

4

@Franz Holzingersの回答は、今日インストールしたPHPワードのバージョンではレンダラー名がDomPDFである必要があることを除いて、正しいと思います。示されているようにすべて大文字の場合、メソッドは失敗します。また、今日インストールしたバージョンは構成ファイルを使用するため、明示的な呼び出しが機能している間、構成ファイルのロード後に配置すると、構成のロード前に配置すると上書きされます。より簡単な答えは、phpword インストール ディレクトリの「src」の上のディレクトリにある「phpword.ini.dist」ファイルを見つけることです。DomPDF ディレクトリの行を編集して、DomPDF をインストールした場所を示し、ファイルを同じディレクトリに phpword.ini という名前で保存します。これで、構成ローダーは、Frank が文書化した呼び出しを実行します。DomPDF へのパスを間違って入力した場合、警告は表示されませんが、メソッド \PhpOffice\PhpWord\Settings::getPdfRendererPath(domPdfPath); を使用して正しくインストールされたことをテストできます。そのメソッドからの戻り値が空の場合、構成ファイルで指定したパス名が存在しなかったことを意味します。ローダーは、パスに DomPDF が含まれていることを確認せず、パスが存在することのみを確認することに注意してください。

現時点で、phpword は 3 つの PDF レンダリング エンジンをサポートしていることに注意してください。インストールへのパスを指定し、PDF レンダラーの名前を DomPDF、TCPDF、または MPDF のいずれかの値 (大文字と小文字を区別) に設定することにより、上記の ini ファイルで 3 つのいずれかを構成できます。DomPDF が推奨されており、デフォルトですが、他のいずれかに投資したり、好みがある場合は、phpword で使用できることがコードに表示されます。

于 2015-01-22T12:49:01.610 に答える