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