Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拆分的pdf文件与原始pdf文件一样大_Php_Fpdf_Fpdi - Fatal编程技术网

Php 拆分的pdf文件与原始pdf文件一样大

Php 拆分的pdf文件与原始pdf文件一样大,php,fpdf,fpdi,Php,Fpdf,Fpdi,我用FPDF生成了一个150Mb的pdf(55页,包含文本和图像) 我想将此PDF拆分为单页PDF 我使用FPDI,但我有一个主要问题,每个单页PDF是150Mb(就像原来的PDF一样) 这是我的密码: use setasign\Fpdi\Fpdi; require('fpdf181/fpdf.php'); require('fpdi/autoload.php'); function split_pdf($filename, $end_directory = false) { $en

我用FPDF生成了一个150Mb的pdf(55页,包含文本和图像)

我想将此PDF拆分为单页PDF

我使用FPDI,但我有一个主要问题,每个单页PDF是150Mb(就像原来的PDF一样)

这是我的密码:

use setasign\Fpdi\Fpdi;
require('fpdf181/fpdf.php');
require('fpdi/autoload.php');

function split_pdf($filename, $end_directory = false)
{

    $end_directory = $end_directory ? $end_directory : './';
    $new_path = preg_replace('/[\/]+/', '/', $end_directory.'/'.substr($filename, 0, strrpos($filename, '/')));

    if (!is_dir($new_path))
    {
        // Will make directories under end directory that don't exist
        // Provided that end directory exists and has the right permissions
        mkdir($new_path, 0777, true);
    }

    $pdf = new FPDI();
    $pagecount = $pdf->setSourceFile($filename); // How many pages?

    // Split each page into a new PDF
    for ($i = 1; $i <= $pagecount; $i++) {
        $new_pdf = new FPDI();
        $new_pdf->AddPage();
        $new_pdf->setSourceFile($filename);
        $templateIndex = $new_pdf->importPage($i);
        $new_pdf->useTemplate($templateIndex, null, null, 0, 0, true);

        try {
            $new_filename = $end_directory.str_replace('.pdf', '', $filename).'_'.$i.".pdf";
            $new_pdf->Output($new_filename, "F");
            echo "Page ".$i." split into ".$new_filename."<br />\n";
        } catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
        }
    }
}
// Create and check permissions on end directory!
split_pdf("contract.pdf", 'split/');
使用setasign\Fpdi\Fpdi;
要求('fpdf181/fpdf.php');
要求('fpdi/autoload.php');
函数拆分\u pdf($filename,$end\u directory=false)
{
$end_目录=$end_目录?$end_目录:'./';
$new\u path=preg\u replace('/[\/]+/','/',$end\u directory'/')。substr($filename,0,strrpos($filename,'/'));
如果(!is_dir($new_path))
{
//将在结束目录下创建不存在的目录
//前提是结束目录存在并且具有正确的权限
mkdir($new_path,0777,true);
}
$pdf=新的FPDI();
$pagecount=$pdf->setSourceFile($filename);//有多少页?
//将每个页面拆分为新的PDF
对于($i=1;$i AddPage();
$new_pdf->setSourceFile($filename);
$templateIndex=$new\u pdf->importPage($i);
$new\u pdf->useTemplate($templateIndex,null,null,0,true);
试一试{
$new\u filename=$end\u directory.str\u replace('.pdf','.$filename)。'.$i.'.pdf》;
$new_pdf->Output($new_文件名,“F”);
回显“页面”.$i.。拆分为“$new\u文件名”。
\n; }捕获(例外$e){ 回显“捕获的异常:”,$e->getMessage(),“\n”; } } } //创建并检查结束目录的权限! split_pdf(“contract.pdf”,“split/”);
我的原始PDF仅嵌入PNG和Helvetica文本


提前感谢您的帮助:)

FPDF使用单一资源字典,这意味着所有资源,如图像、字体或其他导入页面(通过FPDI)都位于同一位置。无论资源是否用于特定页面,页面都将此词典称为其资源源

FPDI只是在导入页面时复制资源字典,包括所有已定义的资源。它不会分析页面内容来决定哪些资源可以忽略或不忽略

用FPDI解决这个问题是不可能的(只要有人为此编写扩展)

对于任何合并或拆分PDF文档的工具来说,此问题都是一个常见问题。我们(Setasign——也是FPDI的作者)在另一个合并/拆分工具中也有这个问题,但我们能够编写一个优化资源的脚本。也许这个解决方案可以帮助你。看看吧。这个解决方案不是免费的