【问题标题】:FPDI Output File SizeFPDI 输出文件大小
【发布时间】:2017-02-15 12:38:48
【问题描述】:

我正在使用FPDFFPDI 从通常大约 28 页长的 pdf 文档中提取 2 页。 pdf文件基本上是一个页面,每个页面都充满了一个图像,大约35-40mb。

使用 FPDI 从完整文档中提取最后 2 页并创建新文件时,新 2 页文件的文件大小几乎保持不变。任何想法为什么会这样?

这是用于提取的基本代码:

public function extractPagesFromFile($file, $outputFileName, $numPages = 2) {
  $pageCount = $this->_fpdf->setSourceFile($file);
  if ($numPages < 0 || $numPages > $pageCount) {
    return false;
  }
  for ($pageNo = $pageCount - $numPages + 1; $pageNo < $pageCount + 1; $pageNo++) {
    $tplIdx = $this->_fpdf->ImportPage($pageNo);
    if (!isset($s)) {
      $s = $this->_fpdf->getTemplatesize($tplIdx);
    }
    $this->_fpdf->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
    $this->_fpdf->useTemplate($tplIdx);
  }

  $this->_fpdf->Output('F', $outputFileName);
  $this->_fpdf->cleanUp();
}

【问题讨论】:

    标签: php pdf pdf-generation fpdf fpdi


    【解决方案1】:

    FPDI 复制页面的所有资源。我猜您文件中的所有图像都位于一个资源字典中。因此,所有这些都将被复制。这是从现有 PDF 文档中提取页面时的常见问题。如果不解析和解释页面内容流,就不可能知道应该复制哪些资源。 FPDI atm 没有解决方案。

    无论如何,我们 (Setasign) 提供了其他非免费 PHP 组件,例如 SetaPDF-Merger,它们在较低级别上工作,我们将为此构建一个 demo 来修复此行为。

    【讨论】:

    • 感谢您的信息。我正在创建原始 pdf,我也正在使用 FPDI 提取页面。有没有办法在这样做时强制图像不存储在单个字典中,以便能够单独提取页面?
    • 否,因为 FPDF 使用单一的全局资源字典。
    猜你喜欢
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-06
    • 2021-06-12
    相关资源
    最近更新 更多