Я использую библиотеку 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);
Вы хотите создать файл PDF из двух файлов HTML с помощью DOMPDF.
Это невозможно. DOMPDF поддерживает создание одного файла PDF из одного документа HTML.
Внутренне DOMPDF использует DOMDocument представлять документ HTML. Поэтому, если вы хотите поместить два файла HTML в DOMPDF, вам нужно сначала объединить их.
Тестирование показало, что вы можете объединить несколько <head>...</head><body>...</body>
разделы (каждая из этих пар начнет новую страницу в DOMPDF), но они должны быть внутри <html>
элемент документа (DOMPDF v0.6.1).
Если вы объединяете элементы внутри <body>
элемент, то создается одна страница.
Если вы добавляете несколько <html>
документы сразу за другим (как предлагает Симо), единственный первый документ помещается в PDF.
Я добавляю два примера PHP:
<head>...</head><body>...</body>
который DOMPDF отображает как две страницы (PDF)Например. Вы хотите добавить содержимое тела второго 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 (одна страница)
Вот пример с новой страницей во втором 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 (которые, мы надеемся, переносимы).
Вам необходимо объединить два файла:
//this file is not converting
$html .= $this->load->view('wilcare/report1',$result,true);