2016-04-20 4 views
1

Я ищу, чтобы начать с исходного файла PDF, который имеет графику и текст, а затем взять некоторый код html, который имеет динамические значения для некоторого пользовательского ввода, генерирует это как PDF, мы надеемся, либо используя начальный PDF-файл, либо как background, OR каким-то образом запускает скрипт PHP, чтобы «объединить» оба PDF, где один выступает в качестве фона для другого.Как наложить HTML сгенерированный PDF поверх существующего PDF?

У меня есть некоторый код, который визуализирует в HTML отформатированный PDF: (используя 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 для этого.

Есть ли способ сплавить два пути, которые у меня выше?

+0

Я бы рекомендовал имя файла на основе сеанса для этой цели. Когда пользователь отправляет форму, он создает файл PDF на сервере. Имя файла будет сеансом пользователя. Проверьте, существует ли какой-либо PDF для этого конкретного пользователя с помощью [scandir()] (php.net/manual/en/function.scandir.php) или file_exists() и отображает все файлы PDF; если есть файл с этим сеансом пользователя, введите имя файла во второй код, используя другую кнопку отправки. –

+0

@MawiaHL это не корень моей проблемы, она уже сохраняется как имя файла на основе сеанса, с добавлением динамических имен файлов. Проблема заключается в том, чтобы сделать один PDF поверх другого PDF. что означает 1 страница + 1 страница = 1 страница, а не отдельные визуализации. – NoReceipt4Panda

ответ

2

Вы также можете использовать различные существующие документы 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(); 
+0

это не сделает 2-страничный pdf-файл вправо? Я ищу, чтобы это была одна страница pdf, где две страницы накладываются друг на друга. – NoReceipt4Panda

+0

Вы прочитали код? Если HTML_Generated_pdf.pdf имеет только одну страницу, это приведет к 1 странице ... Страница 1 из myPDF.pdf будет использоваться в качестве фона для всех страниц. Логика очень тривиальна и не нуждается в дальнейшем объяснении, я думаю ... как насчет того, чтобы попробовать? –

+0

Я просто попробовал и отформатировал его в своем коде. вы абсолютно правы, это сработало! Мне пришлось вставить несколько строк, но это полностью работает! Активировать свой удивительный ответ сейчас бутон! – NoReceipt4Panda

Смежные вопросы