用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 版本 &lt;= 6.0,其中该类名是有效的,在这种情况下,您将错过对 $mpdf-&gt;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-&gt;AddPage();,除非 向生成的输出 PDF 添加另一个页面。

【讨论】:

谢谢你,你让这看起来很简单。这是完美的工作,上帝保佑。

以上是关于用php修改现有的pdf文档的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式填充现有的 PDF 文档 [关闭]

litepdf简单的PDF操作库

使用 Swift 5 - PDFKit 在 iOS 中编辑和保存现有的 pdf 文档

Apache PDFbox开发指南之PDF文档读取

怎么用adobe acrobat编辑pdf文件

怎样用PDF编辑器修改PDF文档