FPDM合并错误extract_pdf_definition_value()不支持定义'/ Type'

时间:2016-10-18 04:14:11

标签: pdf merge fpdf

我正在尝试使用FPDM使用我在此处找到的脚本填写我的PDF文档:

http://www.fpdf.org/en/script/script93.php

首先,请记住,我不想在我正在使用的共享主机设置上安装任何其他库。我必须切换主机来执行此操作。

以下是我尝试过的内容:

  • 将我的PDF模板降级为Acrobat 5.x(v1.4)
  • 禁用压缩和快速网络模式
  • 使用付费版本PDFTK和高级输出参数“%PDFTK %% PDFIN%输出%PDFOUT%”来修改我正在使用的模板(这可以防止有关对象流的奇怪错误)
  • 使用不同方法的FDF文件的变体。
  • 成功写出了我的PDF的HTML版本,但它看起来并不像我的模板

我的代码:

require('/libs/fpdm/fpdm.php');

$fields = array(
    'dealer_name'    => 'My name',
    'dealer_address' => 'My address',
    'dealer_phone'    => 'My city',
);

$pdf = new FPDM('/some/pdf/filename.pdf');
$pdf->Load($fields, false);
$pdf->Merge();
$pdf->Output('someoutput.pdf', 'F');

错误

我无法在任何地方找到的错误如下:

<b>FPDF-Merge Error:</b> extract_pdf_definition_value() does not support definition '/Type'

问题

我可以对我的PDF或任何其他方法做些其他事情吗?

1 个答案:

答案 0 :(得分:5)

fpdm.php很老了,但可以修复。问题是无法从类FPDM中访问全局变量。

要解决此问题,需要将全局变量作为受保护的属性移动到类中。

第1步

删除以下行:

$FPDM_FILTERS=array(); //holds all supported filters
$FPDM_REGEXPS= array(
    "/Type"=>"/\/Type\s+\/(\w+)$/",
    "/Subtype" =>"/^\/Subtype\s+\/(\w+)$/"
);

第2步

在&#34;类FPDM {&#34;,第65行:

之后立即放入以下内容
protected $FPDM_FILTERS = array(); //holds all supported filters
protected $FPDM_REGEXPS = array(
        "/Type"=>"/\/Type\s+\/(\w+)$/",
        "/Subtype" =>"/^\/Subtype\s+\/(\w+)$/"
);

第3步

删除global $FPDM_FILTERS;global $FPDM_REGEXPS;的所有实例。

第4步

更新剩余的引用(属性声明除外)。

$FPDM_FILTERS更改为$this->FPDM_FILTERS

$FPDM_REGEXPS更改为$this->FPDM_REGEXPS

第5步

要正确包含filters/目录中的过滤器,我们需要将包括移到类中。从文件开头删除require_once(),然后在构造函数FPDM()

的开头添加以下内容
          $FPDM_FILTERS = array();
          //Major stream filters come from FPDI's stuff but I've added some :)
          require_once("filters/FilterASCIIHex.php");
          require_once("filters/FilterASCII85.php");
          require_once("filters/FilterFlate.php");
          require_once("filters/FilterLZW.php");
          require_once("filters/FilterStandard.php");                  
          $this->FPDM_FILTERS = $FPDM_FILTERS;