php 使用 dompdf 转为 pdf

php to pdf using dompdf

我有以下启动代码。

<?
require('html2fpdf.php');
$pdf=new HTML2FPDF();
$pdf->AddPage();
$fp = fopen("en/print-job.php?ID=12","r");
$strContent = fread($fp, filesize("en/print-job.php?ID=12"));
fclose($fp);
$pdf->WriteHTML($strContent);
$pdf->Output("home.pdf");
echo "PDF file is generated successfully!";
?>

我有一个名为 print-pdf.php 的页面,它建立在 bootstrap 上,输出是这样的:

https://www.lotomanager.in/en/print-job.php?ID=12

那么如何将此页面原样转换为 pdf?

我从上面的代码得到以下结果:

Warning: fopen(en/print-job.php?ID=12): failed to open stream: No such file or directory in /home/loto/public_html/pdf.php on line 5

Warning: filesize(): stat failed for en/print-job.php?ID=12 in /home/loto/public_html/pdf.php on line 6

Warning: fread() expects parameter 1 to be resource, boolean given in /home/loto/public_html/pdf.php on line 6

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/loto/public_html/pdf.php on line 7 PDF file is generated successfully!

不太清楚你的意思。如果您打算在文档中显示 ID:

$dompdf->loadHtml('hello world ' . $_GET['ID'] );

试试这个

<?php
require_once 'dompdf/autoload.inc.php';
?>
<?php

// reference the Dompdf namespace

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$html = file_get_contents('http://www.lotomanager.in/en/print-job.php?ID=12');
$dompdf = new Dompdf();
$dompdf->loadHtml($html);

 // (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
?>

DOMPDF 有一个 load_html_file 方法供您使用。为了安全起见,我还将 $_GET 转换为整数。

<?php
require_once 'dompdf/autoload.inc.php';
?>
<?php

// reference the Dompdf namespace

use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->load_html_file('https://www.lotomanager.in/en/print-job.php?ID='.(int)$_GET['ID']);

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
?>

你通过重构 print-job.php 来做到这一点,你可以得到一些生成 HTML 的函数,它可以将 HTML 打印给用户或将它提供给PDF 库。

最简单的方法可能是

ob_start();
include('print-job.php');
$html = ob_end_clean();

但这可能会导致两个文件中的不同全局变量或其他内容出现问题,您必须小心将来对 pront-job.php 的更改。所以如前所述最好清理那里的代码不要直接打印。

更好的方法是根本不使用 dompdf + html,而是专门创建具有适当布局的 PDF。这是更多的工作,但应该提供更清晰的结果。