Я хочу начать с первоначального файла PDF, который имеет графику и текст, а затем взять некоторый код html, который имеет динамические значения для некоторого ввода пользователя, генерирует это как PDF, мы надеемся, либо используя исходный PDF в качестве фона, ИЛИ каким-то образом запускать PHP-скрипт, чтобы «объединить» оба PDF, в которых один из них выступает в качестве фона для другого.
У меня есть код, который отображает PDF в формате HTML: (используя DOMPDF)
$initialpdf = file_get_contents('file_html.html'); $initialpdf = str_replace(array( '%replaceText1%', '%replaceText2%' ), array ( $replaceText1, $replaceText2, ), $initialpdf); $fp = fopen('file_html_new.html','w'); file_put_contents('file_html_new.html', $initialpdf); require_once("dompdf/dompdf_config.inc.php"); spl_autoload_register('DOMPDF_autoload'); function pdf_create($html, $filename, $paper, $orientation, $stream=TRUE) { $dompdf = new DOMPDF(); $dompdf->set_paper($paper,$orientation); $dompdf->load_html($html); $dompdf->render(); $pdf = $dompdf->output(); @file_put_contents($filename . ".pdf", $pdf); } $filename = 'HTML_Generated_pdf'; $dompdf = new DOMPDF(); $html = file_get_contents('file_html_new.html'); pdf_create($html,$filename,'Letter','landscape');
В приведенном выше коде содержится html-файл «file_html.html» и заменяется на строки с пользовательскими значениями ввода, отображается как новый HTML-файл с именем «file_html_new.html», а затем отображается как файл PDF.
У меня также есть другой PHP-код, который визуализирует PDF, имея PDF в качестве исходного источника: (используя FPDF)
<?php ob_clean(); ini_set("session.auto_start", 0); define('FPDF_FONTPATH','font/'); define('FPDI_FONTPATH','font/'); require('fpdf.php'); require('fpdi.php'); $pdf = new FPDI(); $pdf->setSourceFile("/home/user/public_html/wp-content/myPDF.pdf"); $tplIdx = $pdf->importPage(1); $specs = $pdf->getTemplateSize($tplIdx); $pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L', 'Letter'); $pdf->useTemplate($tplIdx, 0, 0); $pdf->SetFont('helvetica'); $pdf->SetXY(30, 30); $pdf->Write(0, $replaceText1); ob_end_clean(); $pdf->Output('New_Generated_PDF.pdf', 'F'); ?>
Это занимает уже существующий PDF-файл «myPDF.pdf» и использует его в качестве фона, записывая некоторые переданные в документ значения и сохраняя вновь созданный документ.
Хотя это, по сути, то, что я хочу сделать, мне нужно работать с html, потому что точное форматирование текста становится строгим и почти невозможно сделать, просто построив его вручную.
Я могу использовать DOMPDF, FPDF, FPDI, TCPDF или любой другой ресурс PHP для этого.
Есть ли способ сплавить два пути, которые у меня выше?
Конечно, вы можете использовать и другие существующие документы PDF с FPDI. Этот код должен показать вам концепцию (на самом деле я предполагаю, что все форматы страниц – это портрет A4):
<?php $pdf = new FPDI(); // let's get an id for the background template $pdf->setSourceFile('myPDF.pdf'); $backId = $pdf->importPage(1); // iterate over all pages of HTML_Generated_pdf.pdf and import them $pageCount = $pdf->setSourceFile('HTML_Generated_pdf.pdf'); for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { // add a page $pdf->AddPage(); // add the background $pdf->useTemplate($backId); // import the content page $pageId = $pdf->importPage($pageNo); // add it $pdf->useTemplate($pageId); } $pdf->Output();