2016-04-14 5 views
0

Скажем, например, я хотел загрузить уже существующий PDF-файл, а затем перенести текст поверх этого файла PDF и сохранить его снова как новый файл PDF , По сути, они объединяют два, причем один из них переносится на другой.DOMPDF - Как написать текст поверх другого PDF-файла (PHP)

Я не хочу, чтобы PDF, работающий как фон, стал образом, чтобы потерять качество, чтобы все сохраняло его оригинальный векторный формат.

Как бы я сделал это слияние?

Я не хочу использовать программное обеспечение, возможно, есть сценарий, который делает это?

ответ

2

dompdf сам по себе не в состоянии выполнить такое действие. Вам нужно будет самостоятельно создавать ваши PDF-документы, а затем использовать стороннюю библиотеку для объединения двух документов.

Поскольку вы используете dompdf, я предполагаю, что вы можете найти решение на базе PHP. Взгляните на FPDI. После создания PDF-документов с помощью dompdf вы можете использовать FPDI для их объединения.

Я думаю, что это будет работать, но я не проверял это:

<?php 
// generate pdf documents 
require_once('dompdf/autoload.inc.php'); 

$dompdf = new Dompdf(); 
$dompdf->loadHtml('<p>Hello</p>'); 
$dompdf->render(); 
file_put_contents('doc1.pdf', $dompdf->output()); 

unset($dompdf); 

$dompdf = new Dompdf(); 
$dompdf->loadHtml('<p>&nbsp;</p><p>Hello</p>'); 
$dompdf->render(); 
file_put_contents('doc2.pdf', $dompdf->output()); 


// combine pdf documents 
require_once('fpdf.php'); 
require_once('fpdi.php'); 

// initiate FPDI 
$pdf = new FPDI('L'); 
// add a page 
$pdf->AddPage(); 
// set the source file to doc1.pdf and import a page 
$pdf->setSourceFile("doc1.pdf"); 
$tplIdx = $pdf->importPage(1); 
// use the imported page and place it at point 10,10 with a width of 210 mm 
$pdf->useTemplate($tplIdx, 10, 10, 210); 
// set the source file to doc2.pdf and import a page 
$pdf->setSourceFile("doc2.pdf"); 
$tplIdx = $pdf->importPage(1); 
// use the imported page and place it at point 100,10 with a width of 210 mm 
$pdf->useTemplate($tplIdx, 100, 10, 210); 

$pdf->Output(); 
+0

Я ценю ответ, не могли бы вы посмотреть на этот вопрос и, возможно, ответить на него? http://stackoverflow.com/questions/36752092/how-to-overlay-write-on-top-of-existing-pdf-with-html-generated-pdf Это очень похоже, я спросил его сегодня, и он имеет код уже – NoReceipt4Panda

+0

Я тестировал это, это отличное решение для перекрытия pdf друг над другом. –

0

Непонятно, в каком контексте вы планируете это сделать, и ваше описание процесса предполагает, что вы хотите наложить (или перекрыть) текст поверх существующего содержимого, а не транспонировать его. Если вы открываете документ с помощью любой утилиты, которая поддерживает синтаксический анализ входного PDF-документа и принятия нового контента в качестве новых объектов PDF, вам нечего мешать выпустить новый текст поверх старого текста. При просмотре на экране сначала будет отображаться старый материал, за которым следует любой новый материал, занимающий одни и те же (x, y) координаты. Другими словами, существующий материал PDF не нужно отображать в форме изображения, прежде чем новый контент может быть применен поверх него.

Обратите внимание, что если вы планируете отредактировать существующий материал, написав над ним, это не будет способ сделать это, поскольку новые/верхние объекты непосредственно не влияют на других под ним. Можно оттянуть верхние объекты в сторону (например, с помощью Acrobat), чтобы увидеть, что под ними.

+0

Я сожалею об отсутствии ясности, через какое-то время, проведенное в ответ на мой собственный вопрос, я вареный это касается того, как я собирался это сделать: взяв существующий файл PDF и наняв HTML-файл PDF сверху, слияние двух. – NoReceipt4Panda