要求 TCPDF 上的空白页

Blank page on require TCPDF

所以我是 html 的 pdf 新手,所以我正在努力学习它。当我用谷歌搜索一个好的 html 到 pdf 转换器时,我遇到了 TCPDF。这对我来说是完美的,因为我使用 php。但是当我需要 tcpdf.php 文件时,我的页面变得完全空白,而且我似乎看不到任何错误。

我试过的有以下几种:


我试图制作一个只包含所需文件的测试项目。它奏效了!但是在另一个项目中我遇到了这个问题。

我试图通过使用 catch Exception 来获取错误。但是仍然没有任何信息的迹象。

我用谷歌搜索了很多东西,但我想不通,怎么可能在一个项目中一切正常,但在另一个项目中,似乎没有任何效果。我哪里遗漏了什么?

这是我的代码

<?php
/**
 * Created by PhpStorm.
 * User: Mark
 * Date: 18-2-2019
 * Time: 15:54
 */

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

require "init.php";
//require_once "tcpdf.php"; // this is what I have normally, and yes the location is correct

try {
  require_once "tcpdf.php"; // if I remove this everything works just fine.
} catch (Exception $e) {
  var_dump($e);
}

print_r(get_loaded_extensions());

// Include the main TCPDF library (search for installation path).
require_once('examples/tcpdf_include.php');

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
dd($pdf);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 001');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
$pdf->setFooterData(array(0,64,0), array(0,64,128));

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set default font subsetting mode
$pdf->setFontSubsetting(true);

// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->SetFont('dejavusans', '', 14, '', true);

// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();

// set text shadow effect
$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));

// Set some content to print
$html = <<<EOD
<h1>Welcome to <a href="http://www.tcpdf.org" style="text-decoration:none;background-color:#CC0000;color:black;">&nbsp;<span style="color:black;">TC</span><span style="color:white;">PDF</span>&nbsp;</a>!</h1>
<i>This is the first example of TCPDF library.</i>
<p>This text is printed using the <i>writeHTMLCell()</i> method but you can also use: <i>Multicell(), writeHTML(), Write(), Cell() and Text()</i>.</p>
<p>Please check the source code documentation and other examples for further information.</p>
<p style="color:#CC0000;">TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE <a href="http://sourceforge.net/donate/index.php?group_id=128076">MAKE A DONATION!</a></p>
EOD;

// Print text using writeHTMLCell()
$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);

// ---------------------------------------------------------

// Close and output PDF document
// This method has several options, check the source code documentation for more information.
$pdf->Output('example_001.pdf', 'I');

//============================================================+
// END OF FILE
//============================================================+

我使用php版本7.2.9

在将 PDF 输出到网页时,您不能在它之前输出任何内容,因为它必须设置 HTTP headers。如果屏幕上有任何内容,PHP headers 函数将无法设置它们。

来自文档 https://www.php.net/manual/en/function.header.php

Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include, or require, functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.

作为额外说明,您可以使用 tecnickcom/tcpdf 通过 composer 包含 TCPDF,因为看起来您可能已经在使用带有 symfony 或 laravel 的 composer,因为您正在使用 dd方法。

请注意,TCPDF 也不会抛出异常。如果你想让它抛出异常,你可以覆盖错误方法。例如

<?php

class MyPdf extends TCPDF
{
    public function error($msg)
    {
        throw new Exception($msg);
    }
}