Я использую 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, вы должны сначала объединить их.
Тестирование показало, что вы можете объединить разделы mutlitple <head>...</head><body>...</body>
(каждая из этих пар запустит новую страницу в DOMPDF), но они должны быть внутри одного и того же <html>
элемент документа (DOMPDF v0.6.1).
Если вы объединяете элементы внутри элемента <body>
создается одна страница.
Если вы добавляете несколько документов <html>
сразу после другого (как было предложено Simo), в первый 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);