Php 是否可以高效地将PDF拆分为单独的页面(使用FPDI)?
我正在尝试使用PHP的FPDI库将大文件拆分为单独的页面 由于某些原因,拆分文件对减小文件大小没有多大作用。例如,应用于30页1MB文件的以下脚本将产生30个约0.9MB的文件,即总共约26MB 这对我来说意味着保留了原始文件的很大一部分,即使它不是必需的 问题:Php 是否可以高效地将PDF拆分为单独的页面(使用FPDI)?,php,pdf,tcpdf,fpdf,fpdi,Php,Pdf,Tcpdf,Fpdf,Fpdi,我正在尝试使用PHP的FPDI库将大文件拆分为单独的页面 由于某些原因,拆分文件对减小文件大小没有多大作用。例如,应用于30页1MB文件的以下脚本将产生30个约0.9MB的文件,即总共约26MB 这对我来说意味着保留了原始文件的很大一部分,即使它不是必需的 问题: 这是可以避免的吗 这是FPDI中的错误吗 是否有一个在拆分方面更有效的PHP库 更多细节 我以多种配置复制了此问题: FPDI版本1(不再支持)和FPDI版本2 使用FPDF和TCPDF PHP5.4和PHP5.6 各种PDF文件
更多细节 我以多种配置复制了此问题:
- FPDI版本1(不再支持)和FPDI版本2
- 使用FPDF和TCPDF
- PHP5.4和PHP5.6
- 各种PDF文件,包括使用FPDF和TCPDF生成的文件
<?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');
}
FPDI不分析导入页面的已用资源,而是复制所有引用的资源 如果文档(例如)只有一个资源字典(公共结构),则复制所有资源
我们还提供了一个用于合并和拆分PDF文档的商业(非免费)工具。组件。默认情况下,这个工具也有同样的问题,但我们已经准备了一个带有一些代码的演示,它在拆分过程之后删除了未使用的资源。您可以找到演示和代码。FPDI不分析导入页面的已用资源,而是复制所有引用的资源 如果文档(例如)只有一个资源字典(公共结构),则复制所有资源
我们还提供了一个用于合并和拆分PDF文档的商业(非免费)工具。组件。默认情况下,这个工具也有同样的问题,但我们已经准备了一个带有一些代码的演示,它在拆分过程之后删除了未使用的资源。您可以找到演示和代码。这似乎是大多数PDF工具的一个普遍问题-这也是
pdftk
和cpdf
的一个问题,如中所述
我遇到的大多数PDF都有一个单资源字典,因此不容易完成(感谢您的解释)。这似乎是大多数PDF工具的一个普遍问题-这也是
pdftk
和cpdf
的一个问题,如中所述
我遇到的大多数PDF都有一个单资源字典,所以很难做到(感谢您的解释)。谢谢@Jan-您知道没有单资源字典的PDF生成方法吗?(我使用TCPDF生成我的文件)如果TCPDF使用单一资源字典,那么更改就不那么容易了。生成一本词典非常简单,因为您可以重用任何页面上的任何资源,而无需在单独的词典中注册。谢谢@Jan-您知道没有一本词典可以生成PDF的方法吗?(我使用TCPDF生成我的文件)如果TCPDF使用单一资源字典,那么更改就不那么容易了。因为生成单个词典非常简单,您可以重用任何页面上的任何资源,而无需在单个词典中注册。