86

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

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

在前端

4

9 回答 9

72

如果您采用“填空”方法,您可以将文本精确定位在页面上所需的任何位置。因此,将缺少的文本添加到文档中相对容易(如果不是有点乏味的话)。以 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');

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

PDF 文档由一组原始绘图操作组成:此处的线条、此处的图像、此处的文本块等。它不包含有关这些原始布局意图的任何信息。

于 2008-08-11T00:49:58.077 回答
50

有一个免费且易于使用的 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');
于 2010-11-15T12:31:15.320 回答
19

如果您需要非常简单的 PDF,那么 Zend 或FPDF就可以了。但是,我发现与它们一起工作很困难且令人沮丧。此外,由于 API 的工作方式,没有很好的方法将内容与表示与业务逻辑分开。

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

于 2008-08-27T09:59:34.070 回答
3

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

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

在这里查看文档

于 2008-08-10T23:16:39.123 回答
3

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

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

在这里你基本上可以做同样的事情。加载 PDF,覆盖它,然后保存到新的 PDF。在 FPDI 中,您基本上将 PDF 作为图像插入,因此您可以在其上放置您想要的任何内容。

但同样,它使用 FPDF,所以如果你不想使用它,那么它就行不通。

于 2008-09-09T22:46:40.497 回答
2

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

于 2008-08-21T16:15:39.893 回答
0

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

于 2012-05-29T12:38:35.323 回答
-2

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

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

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

如果您想打开和“编辑”现有文件,pdflib 确实提供了一个产品可以做到这一点,但要花很多钱

于 2008-08-10T22:41:00.023 回答
-2
<?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);
?>
于 2009-10-21T05:49:12.943 回答