FPDI 输出文件大小

FPDI Output File Size

我正在使用 FPDF and FPDI 从一个通常长约 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();
}

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

无论如何,我们 (Setasign) 提供其他非自由 PHP 组件,例如修复此行为的 SetaPDF-Merger, that work on a lower level and for which we'd build a demo