在PHP中编辑PDF?[已关闭]

dluptydi  于 2023-02-15  发布在  PHP
关注(0)|答案(9)|浏览(149)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

八年前就关门了。
Improve this question
有人知道用PHP编辑PDF的好方法吗?最好是开源/零许可证成本的方法。:)
我的想法沿着打开一个PDF文件,替换PDF中的文本,然后写出PDF的修改版本?
在前端

uyhoqukh

uyhoqukh1#

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

如果你想替换内嵌内容,比如“[placeholder string]”,那就复杂多了。虽然技术上可以做到,但你很可能会弄乱页面的布局。
PDF文档由一组图元绘制操作组成:行在这里,图像在这里,文本块在那里,等等。它不包含关于这些原语的布局意图的任何信息。

n9vozmp4

n9vozmp42#

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

p4tfgftt3#

如果你需要非常简单的PDF,那么Zend或者FPDF就可以了。但是我发现它们很难使用,而且令人沮丧。另外,由于API的工作方式,没有一个好的方法来将内容、表示和业务逻辑分开。
出于这个原因,我使用dompdf,它可以自动将HTML和CSS转换为PDF文档。你可以像HTML页面一样布局模板,并使用标准的HTML语法。你甚至可以包含一个外部CSS文件。这个库并不完美,非常复杂的标记或css有时会被损坏,但我还没有找到其他同样有效的库。

hjzp0vay

hjzp0vay4#

不知道这是否是一个选项,但它的工作原理与Zend的pdf库非常相似,但你不需要加载一堆额外的代码(zend框架),它只是扩展了FPDF。
http://www.setasign.de/products/pdf-php-solutions/fpdi/
在这里你基本上可以做同样的事情。加载PDF,在上面写,然后保存到一个新的PDF。在FPDI中你基本上可以把PDF作为一个图像插入,这样你就可以把你想要的任何东西放在上面。
但是同样,它使用FPDF,所以如果你不想使用它,它就不会工作。

fafcakar

fafcakar5#

Zend Framework可以加载和编辑现有的PDF文件,我认为它也支持修订。
我用它在一个项目中创建文档,效果很好。虽然从来没有编辑过。
查看文档here

ohfgkhjo

ohfgkhjo6#

PHP中的PDF/pdflib扩展文档很少(在www.example.com中已经提到了这一点bugs.php.net)--我建议您使用Zend库。

bsxbgnwa

bsxbgnwa7#

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

m4pnthwp

m4pnthwp8#

我们使用pdflib从我们的Rails应用程序创建PDF文件,它绑定了PHP和大量其他语言。
我们使用商业版本,但他们也有一个free/open source version,这有一些限制。
不幸的是,这只允许创建PDF。
如果你想打开和“编辑”现有的文件,pdflib提供a product which does this this,但是需要一个LOT

bqjvbblv

bqjvbblv9#

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

相关问题