如何用Dompdf转换多个HTML文件?

xit*_*tas 3 php pdf codeigniter dompdf

我在做什么:

我正在使用一个PHP库Dompdf,将我的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));
Run Code Online (Sandbox Code Playgroud)

问题

它仅转换一个文件。

我也尝试过这个:

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

  $dompdf->load_html($html && $html1);
Run Code Online (Sandbox Code Playgroud)

hak*_*kre 6

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

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

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

DOMPDF HTML合并行为

测试确实表明您可以串联多个<head>...</head><body>...</body>部分(每对都将在DOMPDF中启动新页面),但是它们必须位于同一<html>文档元素中(DOMPDF v0.6.1)。

如果在元素内合并元素,<body>则将创建一个页面。

如果您将多个<html>文档接一个接一个地添加(如Simo所建议),则只有第一个文档才会放入PDF。

我添加了两个PHP示例:

  1. 第一个展示了如何将两个HTML文档合并为一个单独的主体,DOMPDF将其呈现为一页(PDF
  2. 第二部分显示了如何将它们合并为<head>...</head><body>...</body>DOMPDF呈现为两页的两部分(PDF

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

例如,您要将第二个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');
Run Code Online (Sandbox Code Playgroud)

示例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>
<h1>Document 2</h1>
<p>Paragraph 2.1</p>
<p>Paragraph 2.2</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

创建此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();
Run Code Online (Sandbox Code Playgroud)

示例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>
Run Code Online (Sandbox Code Playgroud)

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


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