【问题标题】:PHP: Merge PDFs without composer?PHP:在没有作曲家的情况下合并 PDF?
【发布时间】:2019-07-09 22:46:52
【问题描述】:

我正在尝试将 PDF 文档与 PHP 合并,并进行了很多搜索并尝试了几种解决方案。似乎最常见的是使用 FPDI 库,然后使用像 PDF-Merger 这样的小类。

但问题是该库依赖于其他库以及其他库的那些库等等。安装示例主要是如何使用composer安装。但我希望能够为不使用作曲家的网站合并 pdf。而且似乎真的很难做到。

由于manual,如果我不想使用作曲家,唯一要做的就是将其写入您的代码作为库的安装:

require_once('path/to/src/autoload.php');

当然,用正确的路径。但是不,这对我不起作用。找不到 fpdi 类。如果您再次查看手册,您会看到以下警告:

别忘了之前安装 FPDF、TCPDF 或 tFPDF!

所以我手动下载了这三个库,而且如果没有 Composer,这些库也很难安装。并且仍然被困在这个烂摊子中。通过将 PDFMerger.php 文件从 use fpdi\FPDI; 更改为 \setasign\Fpdi\Fpdi,我取得了一些成功。所以现在找到了 Fpdi 类。但仍然会出错。

让我告诉你目前的情况。 这是我当前的代码:

<?php
require_once get_stylesheet_directory().'/classes/fpdf/fpdf.php';
require_once get_stylesheet_directory().'/classes/tfpdf/tfpdf.php';

require_once get_stylesheet_directory().'/classes/tcpdf/src/Output.php';
require_once get_stylesheet_directory().'/classes/tcpdf/src/MetaInfo.php';
require_once get_stylesheet_directory().'/classes/tcpdf/src/ClassObjects.php';
require_once get_stylesheet_directory().'/classes/tcpdf/src/Tcpdf.php'; 

require_once get_stylesheet_directory().'/classes/FPDI/src/autoload.php';
require_once get_stylesheet_directory().'/classes/FPDI/src/Fpdi.php';

require_once get_stylesheet_directory().'/classes/PDFMerger/PDFMerger.php';

$pdf = new \Clegginabox\PDFMerger\PDFMerger;
$pdf->addPDF('path/to/file1.pdf', 'all', 'P');
$pdf->addPDF('path/to/file2.pdf', 'all', 'P');
$pdf->merge();
?>

以下是浏览器中的错误消息:

注意:未定义的索引:w in /home/public_html/wp-content/themes/my-theme/classes/PDFMerger/PDFMerger.php 在第 85 行

注意:未定义的索引:h in /home/public_html/wp-content/themes/my-theme/classes/PDFMerger/PDFMerger.php 在第 85 行

注意:未定义的索引:w in /home/public_html/wp-content/themes/my-theme/classes/PDFMerger/PDFMerger.php 在第 85 行

注意:未定义的索引:h in /home/public_html/wp-content/themes/my-theme/classes/PDFMerger/PDFMerger.php 在第 85 行

致命错误:未捕获异常:FPDF 错误:一些数据已经 已输出,无法发送PDF文件 /home/public_html/wp-content/themes/my-theme/classes/fpdf/fpdf.php:271 堆栈跟踪:#0 /home/public_html/wp-content/themes/my-theme/classes/fpdf/fpdf.php(1063): FPDF->Error('Some data has a...') #1 /home/public_html/wp-content/themes/my-theme/classes/fpdf/fpdf.php(999): FPDF->_checkoutput() #2 /home/public_html/wp-content/themes/my-theme/classes/PDFMerger/PDFMerger.php(107): FPDF->Output('I', 'newfile.pdf') #3 /home/public_html/wp-content/themes/my-theme/functions.php(269): Clegginabox\PDFMerger\PDFMerger->merge() #4 /home/public_html/wp-includes/class-wp-hook.php(286): cdon_woocommerce_loaded('') #5 /home/public_html/wp-includes/cla 在 /home/public_html/wp-content/themes/my-theme/classes/fpdf/fpdf.php 在第 271 行

你可以看到PDFMerger.php here和第85行是这样的:

$fpdi->AddPage($fileorientation, array($size['w'], $size['h']));

我的意思是,我认为拥有所有这些依赖项来合并 pdf 有点夸张。这真的需要吗?如果是这样,我的安装有什么问题?

【问题讨论】:

  • 开始听起来好像只是使用作曲家?将其添加到现有项目中并不难
  • @Clive 但是我真的需要所有这些库来合并 pdf 文件吗?我错过了什么吗?我最好不要使用作曲家。我不习惯在服务器上安装东西,而且,如果我无法访问所有目录,这个站点位于共享主机上。我只想.. 喜欢.. 在没有作曲家的情况下这样做......
  • PDF 处理很麻烦。可以说,历史上积累的 PHP 实现并没有多大帮助。但也有用于该任务的命令行工具。 // 你确实意识到真正的问题是缺少介于两者之间的大小参数?
  • Composer 在本地单独的目录中完全可以正常工作。不,也许这些依赖项是假的或不必要的,例如以前开发的剩余部分,或者只需要您不需要的功能。通常,欢迎您提供减少这些依赖关系的拉取请求。

标签: php pdf


【解决方案1】:

您不需要 composer 来使用 PDFMerger。

只需从https://github.com/myokyawhtun/PDFMerger 克隆原始存储库并将PDFMerge.phptcpdf 目录移动到您的项目中。

然后您可以执行以下操作:

include 'PDFMerger.php';

$pdf = new \PDFMerger\PDFMerger;

【讨论】:

  • 现在我得到Fatal error: Uncaught Error: Class 'PDFMerger\exception' not found in ...
  • @PeterWesterlund 在哪个班?
  • 好的,我现在开始工作了。只需将\(反斜杠)添加到TCPDI,使其在PDFMerger.php 的第87 行变为\TCPDI。现在将尝试使用多个 pdf 文件,然后我会接受您的正确答案。
  • @PeterWesterlund 当然。 :)
【解决方案2】:

提到的合并类已经过时并且依赖于旧版本。只需使用最新的本地 FPDI 代码,您可以找到 here。该演示向您展示了如何使用 FPDI 连接多个 PDF 文档。

您还应该注意安装说明信息文本中的

别忘了在之前安装 FPDF、TCPDF tFPDF!

当然,您只需要安装其中一个类。如果你想连接 PDF 页面,你应该使用 FPDF。

【讨论】:

  • 啊,真的!没注意到!
猜你喜欢
  • 2014-12-10
  • 1970-01-01
  • 2018-06-16
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多