编程语言
首页 > 编程语言> > php – 如何使用Dompdf转换多个html文件?

php – 如何使用Dompdf转换多个html文件?

作者:互联网

我在做什么:

我正在使用名为Dompdf的PHP库将我的HTML文件转换为PDF.
我已成功将单个HTML文件转换为PDF.

我想做什么:

现在我有多个报告我想将它们转换成PDF文件.

我在做什么:

我在这里有一个例子,我从数据库中获取一个表单,另一个直接从视图中获取表单.

码:

$result['patients'] = $this->reports_model->get_xray_reports($id); // getting form from database

require_once "dompdf/dompdf_config.inc.php"; // include dompdf
$dompdf = new DOMPDF();
$dompdf->set_paper("A4");
$html = $this->load->view('wilcare/form_set_page_15',"",true);// loading direct from view
//this file is not converting
$html = $this->load->view('wilcare/report1',$result,true);//loading from db

$dompdf->load_html($html)

$dompdf->render();
$dompdf->stream("hello.pdf",array('Attachment'=>0));

问题

它只转换一个文件.

我也试过这个:

  $html = $this->load->view('wilcare/form_set_page_15',"",true);
  $html1 = $this->load->view('wilcare/report1',$result,true);

  $dompdf->load_html($html && $html1);

解决方法:

您想要使用DOMPDF从两个HTML文件创建PDF文件.

这是不可能的. DOMPDF支持从一个HTML文档创建一个PDF文件.

内部DOMPDF使用DOMDocument来表示HTML文档.因此,如果要将两个HTML文件放入DOMPDF,则必须先将它们合并.

DOMPDF HTML合并行为

测试确实表明你可以连接mutlitple< head> …< / head>< body> …< / body>部分(这些对中的每一对都将在DOMPDF中开始一个新页面),但它们必须位于相同的< html>内.文档元素(DOMPDF v0.6.1).

如果合并< body>内的元素元素然后创建单个页面.

如果你追加多个< html>文件接连不断(如Simo所建议的),唯一的第一个文件被放入PDF中.

我添加了两个PHP示例:

>第一个展示了如何将两个HTML文档合并为一个DOMPDF呈现为一个页面的正文(PDF)
>第二个显示如何将它们合并到两个< head> …< / head>< body> …< / body>哪个DOMPDF呈现为两页(PDF)

PHP示例代码HTML文档合并DOMPDF单体

例如.您希望将第二个HTML文档的正文内容追加到第一个HTML文档的正文末尾(DOMDocument类型的所有对象).

$doc1 = create_document(1);
$doc2 = create_document(2);

$doc1Body = $doc1->getElementsByTagName('body')->item(0);
$doc2Body = $doc2->getElementsByTagName('body')->item(0);
foreach ($doc2Body->childNodes as $child) {
    $import = $doc1->importNode($child, true);
    if ($import) {
        $doc1Body->appendChild($import);
    }
}
$doc1->saveHTMLFile('php://output');

示例性HTML输出(of this full Example Code):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Document 1</title>
</head>
<body>
<h1>Document 1</h1>
<p>Paragraph 1.1</p>
<p>Paragraph 1.2</p>
<h1>Document 2</h1>
<p>Paragraph 2.1</p>
<p>Paragraph 2.2</p>
</body>
</html>

创建此PDF:http://tinyurl.com/nrv78br(一页)

PHP示例代码HTML文档合并DOMPDF多个页面

这里是第二个HTML文档上有一个新页面的示例:

foreach ($doc2->documentElement->childNodes as $child) {
    $import = $doc1->importNode($child, true);
    if ($import) {
        $doc1->documentElement->appendChild($import);
    }
}
$html = $doc1->saveHTML();

示例HTML输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Document 1</title></head><body>
<h1>Document 1</h1>
<p>Paragraph 1.1</p>
<p>Paragraph 1.2</p>
</body><head><title>Document 2</title></head><body>
<h1>Document 2</h1>
<p>Paragraph 2.1</p>
<p>Paragraph 2.2</p>
</body></html>

创建此PDF:http://tinyurl.com/oe4odmy(两页)

根据文档的需要,您可能需要执行其他步骤,例如合并标题和CSS规则(希望是可移植的).

标签:php,pdf,codeigniter,dompdf
来源: https://codeday.me/bug/20190830/1766652.html