有没有人知道用PHP编辑PDF的好方法?最好是开源/零许可证成本的方法。 :)
我想的是打开一个PDF文件,替换其中的文本,然后输出修改后的PDF版本?
在前端方面
有没有人知道用PHP编辑PDF的好方法?最好是开源/零许可证成本的方法。 :)
我想的是打开一个PDF文件,替换其中的文本,然后输出修改后的PDF版本?
在前端方面
如果你采用“填空”的方法,你可以在页面上精确地定位文本。因此,向文档中添加缺失的文本相对容易(尽管可能有点繁琐)。例如,使用Zend框架:
<?php
require_once 'Zend/Pdf.php';
$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');
如果您想替换内联内容,比如"[placeholder string]",那么情况会变得更加复杂。虽然在技术上是可能的,但很可能会破坏页面的布局。
PDF文档由一组原始绘图操作组成:这里有一条线,这里有一个图像,那里有一块文本等。它不包含任何关于这些基元的布局意图的信息。
有一个免费且易于使用的PDF类可用于创建PDF文档。它叫做FPDF。与FPDI (http://www.setasign.de/products/pdf-php-solutions/fpdi) 结合使用,甚至可以编辑PDF文档。下面的代码展示了如何使用FPDF和FPDI来填写现有礼品券以及用户数据。
require_once('fpdf.php');
require_once('fpdi.php');
$pdf = new FPDI();
$pdf->AddPage();
$pdf->setSourceFile('gift_coupon.pdf');
// import page 1
$tplIdx = $this->pdf->importPage(1);
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true);
// now write some text above the imported page
$this->pdf->SetFont('Arial', '', '13');
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');
不确定是否可以采用此选项,但它与Zend的pdf库非常相似,但您不需要加载大量额外的代码(Zend框架)。它只是扩展了FPDF。
http://www.setasign.de/products/pdf-php-solutions/fpdi/
在这里,您基本上可以执行相同的操作。加载PDF文件,覆盖其上方,并将其保存为新的PDF文件。在FPDI中,您基本上将PDF文件作为图像插入,因此可以在其上放置任何内容。
但是,请注意,这需要使用FPDF,因此如果您不想使用FPDF,则无法实现该功能。
PHP中PDF/pdflib扩展的文档很稀少(在bugs.php.net上已经有人注意到了)- 我建议您使用Zend库。
Tcpdf是一个在PHP中生成PDF的好库 http://www.tcpdf.org/
<?php
//getting new instance
$pdfFile = new_pdf();
PDF_open_file($pdfFile, " ");
//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");
//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);
//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
PDF_setfont($pdfFile, $font, 12);
} else {
echo ("Font Not Found!");
PDF_end_page($pdfFile);
PDF_close($pdfFile);
PDF_delete($pdfFile);
exit();
}
//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);
//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get the len to tell the browser about it
$pdflen = strlen($pdfFile);
//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>
pdf_set_info($pdfFile, "Title", "PDFlib");
- user183037