Как конвертировать несколько HTML-файлов с 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));

проблема

Это только преобразование одного файла.

Я также попробовал это:

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

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

3

Решение

Вы хотите создать файл PDF из двух файлов HTML с помощью DOMPDF.

Это невозможно. DOMPDF поддерживает создание одного файла PDF из одного документа HTML.

Внутренне DOMPDF использует DOMDocument представлять документ HTML. Поэтому, если вы хотите поместить два файла HTML в DOMPDF, вам нужно сначала объединить их.

DOMPDF HTML поведение слияния

Тестирование показало, что вы можете объединить несколько <head>...</head><body>...</body> разделы (каждая из этих пар начнет новую страницу в DOMPDF), но они должны быть внутри <html> элемент документа (DOMPDF v0.6.1).

Если вы объединяете элементы внутри <body> элемент, то создается одна страница.

Если вы добавляете несколько <html> документы сразу за другим (как предлагает Симо), единственный первый документ помещается в 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 (этого полного примера кода):

<!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 (которые, мы надеемся, переносимы).

4

Другие решения

Вам необходимо объединить два файла:

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