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

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

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

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

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

Тестирование показало, что вы можете объединить разделы mutlitple <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 ( из этого полного примера кода ):

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

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

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