web-dev-qa-db-ja.com

TCPDFエラー:出力ファイルを作成できません

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_が表示されています。

注:ファイルのアクセス許可の問題はありません

誰でも問題を指摘できますか?.

5

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');
14
Puya Sarmidani

「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);
}
5
Atul Baraiya

これは、PDFをパブリックディレクトリに保存する場合にtcpdfを使用するlaravelプログラマーのためのヒントです。これを使用してください。

PDF::Output(public_path('/uploads/pdf/hello_world.pdf'),'F');

3
mostafaznv

この問題はファイルのパスが原因で発生します。 $pdf->Output('output.pdf', 'F');を絶対パス$pdf->Output('/var/www/yourdomain/output.pdf', 'F');に変更することで、これを修正します

2
harrrrrrry

相対パスではなく完全パスを使用する必要があります。使用例with__DIR__:

 $pdf->Output(__DIR__."/../invoices/invoice_".date('d-M-Y').".pdf", 'F');
2
Charaf JRA

スクリプトを実行するときに、ファイルsample.pdfがどこにも開かれていないことを確認してください。他の場所で開いている場合、TCPDFはそれを開くことができません。

0

このエラーは画像が多すぎることが原因であることがわかりました。 PDF 186枚の画像で作成しようとしてこのエラーが発生しました。上記のすべてのオプションを試してもこのエラーが発生しました。その後、画像を減らしました(そして100枚の画像でテストを行いました) PDF作成しました。画像の数を再度増やして、エラーを再度取得してください。

0
Mike Craig

フォルダの権限も確認してください。同じ問題があり、フォルダーのアクセス許可を変更することで解決します。

0