TCPDFとFPDIを組み合わせてPDFを生成しようとしています。これが私のコードです。
_require_once('../tcpdf/tcpdf.php');
require_once('../FPDI/fpdi.php');
$fileName = '../sample.pdf';
class PDF extends FPDI {
/**
* "Remembers" the template id of the imported page
*/
var $_tplIdx;
var $numPages = 0;
/**
* Draw an imported PDF logo on every page
*/
function Header() {
global $fileName;
if (is_null($this->_tplIdx)) {
$this->setSourceFile($fileName);
$this->_tplIdx = $this->importPage(1);
$this->numPages = $this->setSourceFile($fileName);
}
$size = $this->useTemplate($this->_tplIdx);
}
function Footer() {
// emtpy method body
}
}
// initiate PDF
$pdf = new PDF($fileName);
$pdf->setFontSubsetting(true);
// add a page
$pdf->AddPage();
// save file
$pdf->Output('output.pdf', 'F');
_
ここで、最後の行$pdf->Output('output.pdf', 'F');
はファイルを保存するためのものです。しかし、それは機能していません。私が$pdf->Output()
しか持っていなかったとき、ブラウザでpdfを表示していました。
ダウンロードのために$pdf->Output('output.pdf', 'D');
を試してみましたが、うまくいきました。 $pdf->Output('output.pdf', 'F');
が機能していないようで、エラー_TCPDF ERROR: Unable to create output file: output.pdf
_が表示されています。
注:ファイルのアクセス許可の問題はありません
誰でも問題を指摘できますか?.
Ob_clean();を入れてみてください。 $ pdf-> Output( 'output.pdf'、 'F');のすぐ上
ob_clean();
// save file
$pdf->Output('output.pdf', 'F');
それが機能しない場合。次のようにパスを設定する必要があります:
$pdf->Output('yourpath/output.pdf', 'F');
絶対パスがわからない場合は、次を試してください。
$pdf->Output($_SERVER['DOCUMENT_ROOT'] . 'output.pdf', 'F');
「include/tcpdf_static.php」ファイルの静的関数「fopenLocal」の約2435行で、「ifステートメント」全体を削除すると、正常に機能します。
public static function fopenLocal($filename, $mode) {
/*if (strpos($filename, '://') === false) {
$filename = 'file://'.$filename;
} elseif (strpos($filename, 'file://') !== 0) {
return false;
}*/
return fopen($filename, $mode);
}
これは、PDFをパブリックディレクトリに保存する場合にtcpdfを使用するlaravelプログラマーのためのヒントです。これを使用してください。
PDF::Output(public_path('/uploads/pdf/hello_world.pdf'),'F');
この問題はファイルのパスが原因で発生します。 $pdf->Output('output.pdf', 'F');
を絶対パス$pdf->Output('/var/www/yourdomain/output.pdf', 'F');
に変更することで、これを修正します
相対パスではなく完全パスを使用する必要があります。使用例with__DIR__:
$pdf->Output(__DIR__."/../invoices/invoice_".date('d-M-Y').".pdf", 'F');
スクリプトを実行するときに、ファイルsample.pdfがどこにも開かれていないことを確認してください。他の場所で開いている場合、TCPDFはそれを開くことができません。
このエラーは画像が多すぎることが原因であることがわかりました。 PDF 186枚の画像で作成しようとしてこのエラーが発生しました。上記のすべてのオプションを試してもこのエラーが発生しました。その後、画像を減らしました(そして100枚の画像でテストを行いました) PDF作成しました。画像の数を再度増やして、エラーを再度取得してください。
フォルダの権限も確認してください。同じ問題があり、フォルダーのアクセス許可を変更することで解決します。