用PHP编辑PDF?[关闭]


80

有谁知道用PHP编辑PDF的好方法?最好是开源/零许可证费用方法。:)

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

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


我只用过FPDF,认为它很棒。真的很棒。
SQLMason

我也在试图找到一种快速的解决方案。我希望每个产品页面都使用相同的pdf,但在每个pdf上都替换了产品编号和产品名称。我发现使用邮件合并(Word或OpenOffice)实际上是最简单的方法。然后,我导出了所有PDF并上传了它们。希望这对某人有帮助。
2015年

Answers:


70

如果您采用“填空”方法,则可以将文本精确地定位在页面上的任何位置。因此,将丢失的文本添加到文档中相对容易(即使不是那么乏味)。例如,使用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文档由一组基本绘图操作组成:此处的行,此处的图像,此处的文本块等。它不包含有关这些基元的布局意图的任何信息。


1
这很棒!我没有意识到Zend框架是免费的,我对专有的Zend Studio感到困惑。
利亚姆

8
对于任何尝试使用此功能的人,请注意以下事项:它仅适用于Acrobat 4及更高版本中创建的PDF。在版本4之后,Adobe开始对文件进行编码,这使得对PDF进行编辑(或导入到其他PDF)变得更加困难。
Darryl Hein

4
PDF 1.4支持已被添加
Raphael Schweikert

2
如果没有Zend,这现在可以工作吗?
William Entriken

如果我想替换[占位符字符串]之类的内容,有什么解决方案?
Starx

42

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

1
优秀的图书馆-正是我追求的,感谢您的推荐
james-geldart 2012年

1
这很好,但在某些pdf文件中会给出此错误"FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."任何解决方案?

您需要将pdf转换为旧版本(pdf 1.4)或使用fpdi商业版。 我们将解析器替换作为单独的商业附加组件提供,使FPDI能够处理使用这些压缩功能的文档。 来源
SwissFr

是否可以从另一个网页设置setSourceFile?例如:example.com/file.pdf?
亚历克斯

19

如果您需要非常简单的PDF,则Zend或FPDF很好。但是我发现他们很难和沮丧地合作。同样,由于API的工作方式,也没有很好的方法将内容与业务逻辑分离。

因此,我使用dompdf,它将自动将HTML和CSS转换为PDF文档。您可以像处理HTML页面一样布置模板,并使用标准HTML语法。您甚至可以包含一个外部CSS文件。该库不是完美的,非常复杂的标记或CSS有时会被弄乱,但我还没有发现其他可行的方法。


9
-1因为它不能回答问题。张贴者希望编辑现有的PDF,而不是从头开始创建它们。
Reimund

9
我进入此页面的原因是我想编辑PDF,但此答案对我来说似乎更有用,因为我可以看到为什么在HTML中从头开始构建而不是编辑现有PDF可能更容易。
贾斯汀·文森特

3

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

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

在这里,您基本上可以做同样的事情。加载PDF,在其顶部覆盖,然后保存到新的PDF。在FPDI中,您基本上将PDF插入为图像,因此可以将所需的内容放在其上。

但这又使用了FPDF,所以如果您不想使用它,那么它将无法正常工作。


3

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

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

此处查看文档


2

PHP中的PDF / pdflib扩展文档很少(在bugs.php.net中已指出)-我建议您使用Zend库。



1

我对dompdf确实抱有很高的期望(这是一个很酷的主意),但是定位问题是我使用fpdf的主要因素。尽管这很乏味,因为必须设置每个元素。当所有人离开时,它是强大的。

我在文档中的工作区下面放置了一个图像,以将布局放在上面以适合布局。即使对于列,它也总是足够的(只需要一点点php字符串计算,但是没有什么太令人头疼的了)。

祝好运。


0

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

我们使用商业版本,但它们也有免费/开源版本,这有一些限制。

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

如果您要打开和“编辑”现有文件,则pdflib会提供提供此功能的产品,但要花费很多


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

8
您正在使用哪个库?
雨果·埃斯特拉达

1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037 2011年

仍不清楚这是什么图书馆
Deniz Celebi

我相信他的意思是内置php pdflib扩展。php.net/manual/en/pdf.examples-basic.php
Kostiantyn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.