【发布时间】:2019-12-26 14:19:36
【问题描述】:
我正在尝试使用 PHP 的 FPDI 库将大文件拆分为单独的页面。
由于某种原因,拆分文件并不能减少文件大小。例如,将以下脚本应用于 30 页 1MB 文件会产生 30 个大约 0.9MB 的文件,即总共大约 26MB!
这表明我保留了大部分原始文件,即使它不是必需的。
问题:
- 这可以避免吗?
- 这是 FPDI 中的错误吗?
- 是否有其他 PHP 库可以更有效地拆分?
更多细节
我已经在各种配置中重现了这个问题:
- FPDI 版本 1(不再支持)和 FPDI 版本 2
- 使用 FPDF 和 TCPDF
- PHP 5.4 和 PHP 5.6
- 各种 PDF 文件,包括使用 FPDF 和 TCPDF 生成的文件
这里有一些 PHP 代码来说明这个问题:
<?php
testPdfSplit();
function testPdfSplit()
{
echo phpversion();
//Load a file
$contentPath = "/path/to/local/files/original_file.pdf";
copy("https://file-examples.com/wp-content/uploads/2017/10/file-example_PDF_1MB.pdf", $contentPath);
$numpages = 30;
//Get the original file size
$fileSize = round(filesize($contentPath) / (1024 * 1024), 3);
echo "<p>Original file is $fileSize MB</p>";
for($i=1; $i<=$numpages; $i++)
{
echo "<p>Creating file with $i pages</p>";
$filePath = "/path/to/local/files/test.$i.pdf";
try
{
selectOnePage($content, $i, $filePath);
}
catch (Exception $e)
{
die ("<pre>ERROR: $e</pre>");
}
$fileSize = round(filesize($filePath) / (1024 * 1024),3);
echo "<p>$filePath is $fileSize MB</p>";
}
}
function selectOnePage($filePathIn, $pageNo, $filePathOut)
{
require_once('fpdf/fpdf.php');
require_once('fpdi/src/autoload.php');
// initiate FPDI
$pdf = new \setasign\Fpdi\Fpdi();
// get the page count
$pageCount = $pdf->setSourceFile($filePathIn);
echo "<p>Selecting page $pageNo / $pageCount</p>";
// import a page
$pdf->AddPage();
$templateId = $pdf->importPage($pageNo);
$pdf->useImportedPage($templateId);
//output the file
$pdf->Output($filePathOut, 'F');
}
【问题讨论】: