用PHP编辑PDF?

时间:2008-08-10 21:58:25

标签: php pdf

有没有人知道在PHP中编辑PDF的好方法?优选地是开源/零许可证成本方法。 :)

我正在考虑打开PDF文件,替换PDF中的文本,然后写出PDF的修改版本?

我以前使用FPDF以编程方式创建了PDF文件,但有时发现它有点笨拙。

10 个答案:

答案 0 :(得分:67)

如果您采用“填空”方法,则可以在页面上的任何位置精确定位文本。因此,将缺少的文本添加到文档中相对容易(如果不是有点乏味)。例如,使用Zend Framework:

<?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');

如果您尝试替换内联内容,例如“[占位符字符串]”,则会变得更加复杂。虽然技术上可行,但您可能会弄乱页面的布局。

PDF文档由一组基本绘图操作组成:此处为line,此处为image,文本块等等。它不包含有关这些基元的布局意图的任何信息。

答案 1 :(得分:39)

有一个免费且易于使用的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');

答案 2 :(得分:19)

如果您需要非常简单的PDF,那么Zend或FPDF就可以了。但是我发现它们很难和令人沮丧。此外,由于API的工作方式,没有好的方法可以将内容与演示文稿从业务逻辑中分离出来。

出于这个原因,我使用dompdf,它自动将HTML和CSS转换为PDF文档。您可以像对HTML页面一样布局模板并使用标准HTML语法。您甚至可以包含外部CSS文件。库不完美,非常复杂的标记或css有时会被破坏,但我还没有找到其他任何有用的东西。

答案 3 :(得分:3)

Zend Framework可以加载和编辑现有的PDF文件。我认为它也支持修订。

我用它在项目中创建文档,效果很好。从来没有编辑过。

查看文档here

答案 4 :(得分:3)

不知道这是否是一个选项,但它与Zend的pdf库非常相似,但你不需要加载一堆额外的代码(zend框架)。它只是扩展了FPDF。

http://www.setasign.de/products/pdf-php-solutions/fpdi/

在这里你基本上可以做同样的事情。加载PDF,在其上面书写,然后保存到新的PDF。在FPDI中,您基本上将PDF作为图像插入,以便您可以将任何内容放在其上。

但是,再一次,这使用FPDF,所以如果你不想使用它,那么它将无法工作。

答案 5 :(得分:2)

PHP中的PDF / pdflib扩展文档很稀疏(在bugs.php.net中已经注意到了这一点) - 我建议你使用Zend库。

答案 6 :(得分:2)

Tcpdf也是一个用于在php中生成pdf的好库 http://www.tcpdf.org/

答案 7 :(得分:1)

我对dompdf寄予厚望(这是一个很酷的主意),但定位问题是我使用fpdf的一个主要因素。虽然每个元素都必须设置,但这很乏味;所有人都出来了,它是强大的。

我在文档的工作区下面放置一个图像,将我的布局放在最适合的位置。它甚至对于列来说总是足够的(需要一点点的PHP字符串计算,但没什么太可怕的。)

祝你好运。

答案 8 :(得分:0)

我们使用pdflib从我们的rails应用程序创建PDF文件。它有PHP和大量其他语言的绑定。

我们使用的是商业版本,但它们也有free/open source version,但有一些限制。

不幸的是,这只允许创建PDF。

如果您想打开并“修改”现有文件,pdflib会提供a product which does this this,但费用为LOT

答案 9 :(得分:-1)

<?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);
?>