【问题标题】:save HTML page to PDF in PHP在 PHP 中将 HTML 页面保存为 PDF
【发布时间】:2015-06-18 19:55:13
【问题描述】:

我需要将 url 转换为 pdf

我尝试使用 tcpdf,但出现如下错误: 注意:未定义的偏移量:第 17218 行 /opt/lampp/htdocs/IBI/tcpdf/tcpdf.php 中的 4 TCPDF ERROR: 部分数据已输出,无法发送 PDF 文件

我认为问题在于页面有html和js和CSS

这是尝试过的代码和网址:

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

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 006');
$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.' 006', PDF_HEADER_STRING);

// 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 font
$pdf->SetFont('dejavusans', '', 10);

// add a page
$pdf->AddPage();
// test some inline CSS
$html = file_get_contents("http://dvns.me/mahmoud/IBI/");
$pdf->writeHTML($html, true, false, true, false, '');

//Close and output PDF document
$pdf->Output(time().'.pdf', 'I');

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

【问题讨论】:

  • 您可以检查您的标头是否已发送? reference headers_sent
  • @huggilou 在哪里查看?在代码的第一个还是最后?
  • $pdt->Output()function 之前
  • @huggilou 我尝试添加 echo headers_sent();在输出 ($pdf->Output(time().'.pdf', 'I');) 之前并打印 true,这意味着发送了标头
  • 也许您在开始 PHP 标记“

标签: javascript php html pdf tcpdf


【解决方案1】:

尝试在require() 之前插入ob_clean() 喜欢

ob_clean()
// set document information
$pdf->SetCreator(PDF_CREATOR);

请参阅reference hererelated issue here

【讨论】:

    【解决方案2】:

    我使用以下库 jsPDF 实现了类似的事情

    在视图中定义您希望使用 ID 打印的表格:

    <table id="printTable" class='table table-striped' border="0">
    

    【讨论】:

      【解决方案3】:

      尝试使用以下代码隐藏通知消息:

      error_reporting(E_ERROR | E_WARNING | E_PARSE);
      

      这段代码是插入到脚本的开头

      【讨论】:

      • 我明白了:警告:在第 19515 行的 /opt/lampp/htdocs/IBI/tcpdf/tcpdf.php 中为 foreach() 提供的参数无效警告:在 / 中为 foreach() 提供的参数无效opt/lampp/htdocs/IBI/tcpdf/tcpdf.php 第 19515 行警告:在第 19515 行的 /opt/lampp/htdocs/IBI/tcpdf/tcpdf.php 中为 foreach() 提供的参数无效 警告:为 foreach 提供的参数无效() in /opt/lampp/htdocs/IBI/tcpdf/tcpdf.php on line 19515 TCPDF ERROR: Some data has been output, can't send PDF file
      • 您的 html 似乎无法在 pdf 文件中输出。尝试用更简单的示例替换您的$htmlvar,例如&lt;html&gt;&lt;body&gt;Hello world&lt;/body&gt;&lt;/html&gt;
      • 我之前尝试过并且可以正常工作,我知道问题出在 html 输出端,但我该如何解决呢?谢谢
      • @huggilou 请 var_dump foreach 循环的变量。
      • 我看一下您要转换为 PDF 的页面。问题是你有一些 javascript 脚本不能用 file_get_contents 函数执行...你应该在客户端使用 PDF 转换来保存图表等
      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 2018-07-05
      • 2016-08-29
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多