我正在使用FPDF和FPDI从pdf文档中提取2页,通常大约28页。 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();
}
答案 0 :(得分:0)
FPDI复制页面的所有资源。我想你文件中的所有图像都位于一个资源字典中。因此,所有这些都将被复制。从现有PDF文档中提取页面时,这是一个常见问题。在不解析和解释页面内容流的情况下,不可能知道应该复制哪些资源。 FPDI atm没有解决方案。
无论如何,我们(Setasign)提供其他非免费的PHP组件,例如SetaPDF-Merger,它们在较低级别上工作,我们为此构建demo来修复此行为。< / p>