1

PHPExcel 1.7.6 で PDF を生成しようとして失敗した後 (メモリ不足エラー)、1.7.8 にアップグレードしました。私は一生、それを機能させる方法を理解できません。tcPDF と mPDF を試しましたが、どちらも同じです。

Excel 出力に戻すと、パスが正しく設定されていることがわかります。私が得ることができるのは「PDFレンダリングライブラリが定義されていません」であり、それが何を望んでいるのか理解できません-「mPDF5.4」、「MPDF54」(フォルダー自体の実際の名前)、「 mpdf'、'mpdf.php'...毎回同じです。

私は 1 年以上 PHPExcel を使用しているので、まったく新しいわけではありません。この問題について認めるよりもずっと多くの時間を失ってしまいました。また、この問題がどこにも説明されていないことがわかりました。このアウト。

私が使用している実際のコードは次のとおりです。

ini_set('include_path', ini_get('include_path').'\\Classes\\');

$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
$rendererLibrary = 'mPDF5.4';
$rendererLibraryPath = ini_get('include_path') . $rendererLibrary;

(つまり、サンプル コードのコピーです。)

完全を期すために、私が使用しているヘッダーは

echo header("Content-Type: application/pdf");
echo header("Content-Disposition: attachment; filename=".$filename.".pdf" );
echo header('Cache-Control: max-age=0');

当然、これらはファイルの上部近くにあります。

ファイルの終わり近くで、出力コードは次のとおりです。

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');
4

3 に答える 3

2

私はそれを働かせました。画期的な瞬間があり、それを完全に理解したと言いたいのですが、どうやってそれを機能させたのかわかりません. しかし、それが誰かを助けることを期待して、私がやったことをレイアウトさせてください.

WindowsでXAMPPを実行しています。私のファイル構造には、xampp\php\PEAR\Classes に PHPExcel 自体のフォルダーがあります。domPDF は同じフォルダーにあり、名前を「dompdf」に変更しました。

思い出せない理由で、インクルードパスを次のように設定しました。

ini_set('include_path', ini_get('include_path').'\\Classes\\');

レンダリング パスを設定するには、次を使用しました。

$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
$rendererLibrary = 'dompdf';
$rendererLibraryPath = ini_get('include_path') . $rendererLibrary;

実際のライターの作成には、次のものを使用しています。

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save($path.$fullFileName);

物事を変えたかもしれないことに気付いた1つのことは、これを行うことでした:

// include 'PHPExcel/Writer/Excel2007.php';

つまり、私が PHPExcel で行ったすべてのこととは異なり、Writer フォルダーからは何も含めていません。私が覚えている限りでは、質問をした 1 週間前と今回の違いはこれだけです。1.7.8 の Tests フォルダーから 01simple-download-pdf.php ファイルを取得したら、そこからコードをコピーしてパスに微調整するだけで済みました。

要約すると、$rendererName はそのままにしておきます。$rendererLibrary は、ライブラリを含むフォルダーの名前です。私の場合は「dompdf」です。$rendererLibraryPath は文字通りそのフォルダーへのパスを設定しているため、pdf ライブラリ フォルダーを含むパスで終わります。

私が uber-leet hax0r ではないことは明らかですが、SO は私のために非常に多くのプログラミングの質問に答えてくれました。これが他の誰かに役立つことを願っているので、私のように時間を無駄にすることはありません.

于 2013-02-13T09:21:59.480 に答える
0

このエラーが発生し、TCPDF または DOMPDF フォルダーへの正しいパスを設定している場合 (完全なパスを記述する必要はありません)、次の行があることも確認してください。

if (!PHPExcel_Settings::setPdfRenderer(
        $rendererName,
        $rendererLibraryPath
    )) {
    die(
        'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
        EOL .
        'at the top of this script as appropriate for your directory structure'
    );
}
于 2015-06-19T06:51:00.177 に答える
0

PHPOffice には PHPWord も含まれています。PHPWord で同じエラー メッセージが表示されました。これはLINUX用です。この場合、「PhpWord」を「PhpExcel」に置き換えるとうまくいくはずです。パス $rendererLibraryPath を必要に応じて変更する必要があります。

$rendererName = \PhpOffice\PhpWord\Settings::PDF_RENDERER_DOMPDF;
$rendererLibraryPath = realpath(__DIR__ . '/../../../../../dompdf-0.6.1');
\PhpOffice\PhpWord\Settings::setPdfRenderer($rendererName, $rendererLibraryPath);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'PDF');
$objWriter->save('helloWorld.pdf');
于 2014-08-11T19:37:34.800 に答える