用php修改现有的pdf文档
Posted
技术标签:
【中文标题】用php修改现有的pdf文档【英文标题】:Modify existing pdf document with php 【发布时间】:2021-10-07 20:53:24 【问题描述】:所以我想做的很简单,我想修改现有的 pdf 文档。
它不会写入我添加的现有 pdf 文件,而是写入一个空白文件。
这里是代码。
<?php
require('vendor/autoload.php');
$mpdf = new mPDF();
$mpdf->AddPage();
// set the sourcefile
$mpdf->setSourceFile('hs.pdf');
// import page 1
$tplIdx = $mpdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 200 mm (This is the image of the included pdf)
$mpdf->useTemplate($tplIdx, 10, 10, 200);
// now write some text above the imported page
$mpdf->SetTextColor(0,0,255);
$mpdf->SetFont('Arial','B',8);
$mpdf->SetXY(95, 16);
$mpdf->Write(0, "Mindfire");
$mpdf->Output('newpdf.pdf');
这是我要写入的图像。 enter image description here
添加这是它输出的图像 enter image description here
正如您所看到的,它似乎只是每次都写入一个空白文档,而不是写入第一个 pdf。
有什么想法吗?
更新:
这是我的 composer.json 文件
"require":
"mpdf/mpdf": "v5.5.1"
我尝试了所有不同版本的 mpdf,但仍然存在相同的错误。
Uncaught Error: Class 'Mpdf\Mpdf' not found in
【问题讨论】:
从您的代码来看,这应该是错误的。因为它应该是$mpdf = new \Mpdf\Mpdf()
,除非您使用的是 mPDF 版本 <= 6.0
,其中该类名是有效的,在这种情况下,您将错过对 $mpdf->SetImportUse()
或 full example 的调用
使用 $mpdf = new \Mpdf\Mpdf() 给我“未捕获的错误:找不到类 'Mpdf\Mpdf'”,当我使用 $mpdf = new \mPDF('utf-8 ', 'A4-L');我用composer安装了mpdf,不确定我在这里缺少什么..
我将我的版本切换到 ^v8.0.13 并且我仍然收到 Uncaught Error: Class 'Mpdf\Mpdf' not found in,无论版本如何,它仍然找不到,我想如果我解决了剩下的就好了,我复制你给我看的例子。
听起来 PHP 在 OPcache 中有原始源。您可能需要在运行 composer dump-autoload
之前和/或之后在您的环境中使用 clear it,以便在版本 7.0+ 中使用 new \Mpdf\Mpdf()
。需要查看 composer.json 和可能的 phpinfo() 以确定可能导致失败的原因。
刚刚更新了我在 composer.json 文件中的内容,我尝试使用 composer dump-autoload 但仍然没有任何变化......
【参考方案1】:
mPDF 版本的语法和作曲家的用法似乎有些混乱。 由于您尝试了一些不明智的解决方法,我建议重置作曲家环境和Reinstalling mPDF。
将项目目录设置为您的 CWD
cd /path/to/project
删除作曲家管理的文件
Linux 操作系统
rm -rf ./vendor
rm ./composer.json
rm ./composer.lock
Windows 操作系统命令
rmdir /Q /S .\vendor
del .\composer.json
del .\composer.lock
Windows 操作系统 PowerShell
Remove-Item -Recurse -Force .\vendor
Remove-Item .\composer.json
Remove-Item .\composer.lock
重新安装 mPDF 库文件
composer require mpdf/mpdf
您的项目目录应包含以下内容: 其中 pdf_creator.php 是用于生成 PDF 的脚本。
project/
composer.json
hs.pdf
pdf_creator.php
vendor/
mpdf/
autoload.php
...
检查您的 composer.json 文件中的 mPDF 版本 根据版本使用以下示例之一。
"require":
"mpdf/mpdf": "^8.0"
mPDF 4.3 到 6.x
方法名称使用 pascal-cased 模式
没有命名空间
类名是mPDF()
示例:example41_MPDFI_template.php
<?php
/* pdf_creator.php */
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new mPDF();
// set the sourcefile
$mpdf->SetImportUse(); // <--- required for mPDF versions < 8.0
$mpdf->SetSourceFile(__DIR__ . '/hs.pdf'); // absolute path to pdf file
// import page 1
$tplIdx = $mpdf->ImportPage(1);
// use the imported page and place it at point 10,10 with a width of 200 mm (This is the image of the included pdf)
$mpdf->UseTemplate($tplIdx, 10, 10, 200);
// now write some text above the imported page
$mpdf->SetTextColor(0, 0, 255);
$mpdf->SetFont('Arial', 'B', 8);
$mpdf->SetXY(95, 16);
$mpdf->Write(0, 'Mindfire');
$mpdf->Output('newpdf.pdf');
mPDF 7.x
方法名称使用 pascal-cased 模式
引入了 \Mpdf 命名空间
类名是Mpdf()
例如Importing Files & Templates
<?php
/* pdf_creator.php */
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
// set the sourcefile
$mpdf->SetImportUse(); // <--- required for mPDF versions < 8.0
$mpdf->SetSourceFile(__DIR__ . '/hs.pdf'); // absolute path to pdf file
// import page 1
$tplIdx = $mpdf->ImportPage(1);
// use the imported page and place it at point 10,10 with a width of 200 mm (This is the image of the included pdf)
$mpdf->UseTemplate($tplIdx, 10, 10, 200);
// now write some text above the imported page
$mpdf->SetTextColor(0, 0, 255);
$mpdf->SetFont('Arial', 'B', 8);
$mpdf->SetXY(95, 16);
$mpdf->Write(0, 'Mindfire');
$mpdf->Output('newpdf.pdf');
mPDF 8.x
方法名称使用 驼峰式 模式
引入了 \Mpdf 命名空间
类名是Mpdf()
方法Mpdf::SetImportUse()
被移除
例如Importing Files & Templates
<?php
/* pdf_creator.php */
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf();
// set the sourcefile
// $mpdf->SetImportUse(); // <--- not needed for mPDF version 8.0+
$mpdf->setSourceFile(__DIR__ . '/hs.pdf'); // absolute path to pdf file
// import page 1
$tplIdx = $mpdf->importPage(1);
// use the imported page and place it at point 10,10 with a width of 200 mm (This is the image of the included pdf)
$mpdf->useTemplate($tplIdx, 10, 10, 200);
// now write some text above the imported page
$mpdf->SetTextColor(0, 0, 255);
$mpdf->SetFont('Arial', 'B', 8);
$mpdf->SetXY(95, 16);
$mpdf->Write(0, 'Mindfire');
$mpdf->Output('newpdf.pdf');
现在从 CLI 运行您的脚本以查看它是否发出任何错误。
cd /path/to/project
php pdf_creator.php
注意
编辑 PDF 文件不需要$mpdf->AddPage();
,除非
向生成的输出 PDF 添加另一个页面。
【讨论】:
谢谢你,你让这看起来很简单。这是完美的工作,上帝保佑。以上是关于用php修改现有的pdf文档的主要内容,如果未能解决你的问题,请参考以下文章