php现在编辑pdf,用PHP编辑PDF?

用PHP编辑PDF?

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

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

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

kaybenleroll asked 2019-06-14T17:09:38Z

10个解决方案

64 votes

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

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,其中为text chunk等。它不包含有关这些基元的布局意图的任何信息。

grom answered 2019-06-14T17:10:08Z

38 votes

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

metatron answered 2019-06-14T17:10:32Z

18 votes

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

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

AdamTheHutt answered 2019-06-14T17:11:08Z

3 votes

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

我用它来创建一个项目中的文档,它工作得很好。 从来没有编辑过。

在这里查看文档

Juan answered 2019-06-14T17:11:48Z

3 votes

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

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

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

但同样,这使用FPDF,所以如果你不想使用它,那么它将无法工作。

Darryl Hein answered 2019-06-14T17:12:36Z

2 votes

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

Ross answered 2019-06-14T17:13:00Z

2 votes

Tcpdf也是在php中生成pdf的好方法 [http://www.tcpdf.org/]

Mufaddal answered 2019-06-14T17:13:26Z

1 votes

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

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

祝好运。

josh.chavanne answered 2019-06-14T17:14:01Z

0 votes

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

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

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

如果你想打开并“编辑”现有文件,pdflib会提供一个这样做的产品,但成本很高

Orion Edwards answered 2019-06-14T17:14:47Z

0 votes

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

?>

Nitin answered 2019-06-14T17:15:05Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java证明ArrayList是线程不安全的

证明ArrayList是线程不安全的 我们开启100个线程.每个线程向List加100个数据,那么当所有线程执行完成之后应该是10000条,然后就对比一下结果,看看是否为10000条. thread.join(); 是让主线程等待所有的子线程执行完,才执行接下来的语句 运行结果为9988,而且每次运行结果还不一…

[CSS] 点击事件触发的动画

源码 https://github.com/YouXianMing/CSS-Animations/tree/master/Event 效果 细节 1) 一个完整的可回溯的动画至少包括了两种状态,以及两种状态的动画设置,还有其关键帧设置. 2) 设置的值其实只有A,B两种状态而已 3) 动画开始的时候,只设置一个状态值,而不设置状态的动画设置…

discuz邮件设置PHP,Discuz!6.0—如何配置发送邮件的参数

邮件发送方式个教程教大家如何配置邮件参数,主要介绍以下两个个方面:邮件发送方式邮件头的分隔符一、邮件发送方式:Discuz!6.0支持如下三种邮件发送方式:1、通过 PHP 函数的 sendmail 发送(推荐此方式)图1介绍:这种方式…

在AndroidStudio中数据存储第三方数据管理Bmob的使用

---恢复内容开始--- 在日常写代码的过程中我们比较痛苦的就是数据库的建立和使用,那么今天来介绍一下一个第三方的数据管理平台Bmonb。 一、我们首先进入Bmob的官网创建一个账号 Bome官网网址:http://www.bmob.cn/ 二、打开Androidstudio新建一个项目然后…

java for循环的这种写法怎么理解:for (; ; ) {},

无限循环的一种写法 for (;;) {//do something.... } for(a1;a2;a3){} a1:表示初始化,可以省略 a2:表示判断条件,可以省略 a3:表示循环后,变量(不一定十循环变量,可以将循环体放在里面——很变态&#xff…

day38 19-Spring整合web开发

整合Spring开发环境只需要引入spring-web-3.2.0.RELEASE.jar这个jar包就可以了,因为它已经帮我们做好了. Spring整合web开发,不用每次都加载Spring环境了。 package cn.itcast.service;public class UserService {public void sayHello(){System.out.println("Hello Sprin…

线程的生命周期及五种基本状态介绍

一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括: Java线程具有…

php外联样式,css外联样式不起作用怎么办

css外联样式不起作用的解决办法:首先用sublime编辑器打开css文件;然后修改本地css文件编码格式为“utf-16LE”;最后重新保存运行即可。本教程操作环境:Windows7系统、Sublime Text3&&css3版本,该方法适用于所有…

使用阿里云docker加速器

登陆之后,在docker镜像仓库-加速器可获得专有加速地址。 如何使用Docker加速器 针对Docker客户端版本大于1.10的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器: sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json &…

JAVA执行过程sql,SQL 执行过程

一、MySQL架构总览:二、查询执行流程一条select的生存周期:流程:1.连接1.1客户端发起一条Query请求,监听客户端的‘连接管理模块’接收请求;1.2将请求转发到‘连接进/线程模块’;1.3调用‘用户模块’来进行授权检查&am…

Java 1.8 HashMap源码探究

(#)最近听说1.8的HashMap引入了红黑树做了性能的优化,遂又把出了源码来研究研究(留下口,后面再写)转载于:https://www.cnblogs.com/wscit/p/6730136.html

安装elasticsearch-php,安装 |《Elasticsearch-PHP 中文文档 6.0》| PHP 技术论坛

安装Elasticsearch-php 只有四个要求您需要担心的:PHP 7.0.0 或者更高的版本ext-curl: PHP 的 Libcurl 扩展(参见下面的注释)Native JSON 扩展 (ext-json) 1.3.7 或者更高的版本其余的依赖项将由 Composer 自动下载安装。 Composer 是 PHP 的包和依赖项管理器。通过…

java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big解决方法

1:报错如下 Exception in thread "main" java.io.IOException: DerInputStream.getLength(): lengthTag111, too big.at sun.security.util.DerInputStream.getLength(DerInputStream.java:599)at sun.security.util.DerValue.init(DerValue.java:391)at sun.securit…

ClassLoader.getResourceAsStream(name);获取配置文件的方法

1:报错如下 2:分析 3:解释 使用Spring的ClassPathResource来读取maven项目resource下的文件 一般来说,我们项目的配置文件及静态资源都会放置在resources目录下。有时我们在项目中使用到resources目录下的文件,这时我们可以使用Spring下的Resouce接口来…

matlab msgbox 换行,[转载]Matlab/GUI笔记

转自 http://www.kylen314.com/archives/412不显示坐标刻度:set(gca,xtick,[])频率响应:[H,F]freqz(b,1,512);plot(F,20*log10(abs(H)));滤波:Y Filter(A,B,X);A/B虑X得到Y播放音乐:sound(x,fs)摄像头模块:% 获取摄像…

答CSDN关于建模的系列问题

最近工作一直比较忙,很多想法没时间写下来,最近回复了CSDN杂志社的一系列相关的建模问题,顺便贴在这里,欢迎大家讨论。 以下是我对建模的一些看法 1 你怎么看待建模?作为一个程序员,可能每个人都经历过这样…

sqlserver操作geography方法

--总表面积SELECT geography::STGeomFromText(POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)), 4326).STArea() --二进制(WKB)表示形式SELECT geography::STGeomFromText(LINESTRING( -122.360 47.65…

ClassPathResource使用简介

ClassPathResource使用简介 使用Spring的ClassPathResource来读取maven项目resource下的文件 一般来说,我们项目的配置文件及静态资源都会放置在resources目录下。有时我们在项目中使用到resources目录下的文件,这时我们可以使用Spring下的Resouce接口来…

用matlab画阻尼振动包络线,matlab阻尼振动模拟.doc

matlab阻尼振动模拟matlab阻尼振动模拟班级 应数0801 姓名 翟伟西 学号 u座机电话号码5实验目的通过这个实验能更好的了解学习matlab程序语言,了解matlab在仿真方面的应用实验原理通过把做阻尼振动的小球的运动作投影,更好的观察在阻尼振动过程中&#x…