【问题标题】:how to convert multiple html files with Dompdf?如何使用 Dompdf 转换多个 html 文件?
【发布时间】:2015-02-23 18:56:25
【问题描述】:

我在做什么:

我正在使用一个名为 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);

【问题讨论】:

  • 您首先要覆盖$html 变量。另外你需要有两个不同的文件名,否则你会覆盖你的文件。
  • 一个文件包含,创建文件!
  • 是的@hakre 我你是对的!
  • 我现在已经查看了 DOMPDF 并对其进行了一些测试,它不适用于字符串连接,但在 PHP 中使用 DOMDocument (DOMPDF 内部也使用)有相当多的选择。包含的演示 PDF:stackoverflow.com/a/27658136/367456

标签: php codeigniter pdf dompdf


【解决方案1】:

您想使用 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)

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

例如您想将第二个 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 规则(希望它们是可移植的)。

【讨论】:

  • 仅供参考,利用自 v0.6.0 起提供的 HTML5 解析引擎将清理您的文档,以便只有一个正文元素,因此没有分页符。
【解决方案2】:

你需要合并这两个文件:

//this file is not converting
$html .= $this->load->view('wilcare/report1',$result,true);

【讨论】:

  • 如果你在合并后打印 $html 变量,它会显示什么?
  • 获取两个文件但只转换一个。
  • 可能是因为你有一个无效的html文件,或者缺少一些结束标签,尝试验证整个文件(合并一个)。
  • 我对 DOMPDF 不是特别多才多艺,但我不希望该库真正处理 HTML 文档的连接。
猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 1970-01-01
相关资源
最近更新 更多