【问题标题】:FPDI remove page from PDF outputFPDI 从 PDF 输出中删除页面
【发布时间】:2015-04-02 16:38:26
【问题描述】:

我正在使用FPDFFPDI 执行以下操作

require_once('pdfs/fpdf.php');
require_once('pdfs/fpdi.php');

// initiate FPDI 
$pdf = new FPDI(); 
// set the sourcefile 
$pdf->setSourceFile('pdfs/originals/document.pdf'); 

//for ($i = 1; $i < 43; $i++) { 
for ($i = 1; $i < 10; $i++) { 

$pdf->AddPage();
$tplidx = $pdf->ImportPage($i); 
$pdf->useTemplate($tplidx, 10, 0, 200); 

有什么方法可以根据 if 语句从最终输出中隐藏页面?比如$middlepages等于或大于2,我需要显示2个特定的页面,但如果$middlepages是1,我只需要显示2的第一页。

【问题讨论】:

    标签: php pdf fpdf fpdi


    【解决方案1】:

    看起来没有人回答这个问题......直到现在。以下是 FPDI 工作流程的基础知识,直接来自他们的documentation

    1. 定义要从中获取页面的文档
    2. 导入文档的现有页面
    3. 在使用 FPDF 创建的页面上使用导入的页面

    这是一个简单的 FPDI 示例:

    $pdf = new FPDI();
    $pageCount = $pdf->setSourceFile('file.pdf');
    
    //  Iterate through every page
    for( $pageNo=1; $pageNo<=$pageCount; $pageNo++ )
    {
        $templateId = $pdf->importPage($pageNo);
    
        //  Determine if page is portrait or landscape
        $size = $pdf->getTemplateSize($templateId);
    
        if( $size['w']>$size['h'] )
            $pageFormat = 'L';  //  landscape
        else
            $pageFormat = 'P';  //  portrait
    
        $pdf->addPage($pageFormat,array($size['w'],$size['h']));
        $pdf->useTemplate($templateId);
    }
    
    $pdf->Output();
    

    太棒了!现在让我们看看您的具体愿望,即只添加一定数量的页面。如您所见,我们使用 for 循环遍历文档的所有导入页面,从第 1 页开始到最后一页,包括在内。如果您想更改添加的页面,您所要做的就是更改for 循环的起点和终点。这个概念不是“隐藏”一个页面,而是只导入我们希望在最终结果中看到的页面。

    这是一个简单的例子。我将定义一些常量来表示不同的页面添加方案:

    const PDF_FIRSTPAGE     = 1;
    const PDF_MIDDLEPAGES   = 2;
    

    在我的页面导入循环之前,我将通过此开关来确定每个条件的开始页面和结束页面。这是在最初声明 PDF 之后。请注意我如何对照$pageCount 检查值以确保我不会尝试导入不存在的页面:

    switch( $loopCondition )
    {
        //  By default, include everything
        default:
            $pageStart  = 1;
            $pageEnd    = $pageCount;
            break;
        //  Include only the first page
        case PDF_FIRSTPAGE:
            $pageStart  = 1;
            $pageEnd    = 1;
            break;
        //  Include pages 2-4, but only if those pages exist
        case PDF_MIDDLEPAGES:
            if( $pageCount>=2 )
            {
                $pageStart = 2;
                if( $pageCount>=4 )
                {
                    $pageEnd = 4;
                }
                else
                {
                    $pageEnd = $pageCount;
                }
            }
            else
            {
                $pageStart  = 1;
                $pageEnd    = 1;
            }
            break;
    }
    

    最后,我修改了你在上面看到的for循环:

    for( $pageNo=$pageStart; $pageNo<=$pageEnd; $pageNo++ )
    

    现在,如果我将变量 $loopCondition 设置为等于 PDF_MIDDLEPAGES,如果文档最初有 4 页或更多页,我只会得到第 2-4 页作为输出。如果我使用 3 页的文档,我会得到 2-3 页。您应该更改条件以最适合您的需求,因为我不知道您计划导入的 PDF 文件的性质,但我认为通过这篇文章,您应该能够弄清楚如何使用 FPDI 需要了解的所有内容选择性地包括源 PDF 文档中的某些页面。编码愉快!

    【讨论】:

    • 这是一种比我最终完成的工作更自然的编码方式!
    猜你喜欢
    • 2011-11-10
    • 2023-01-24
    • 2016-01-07
    • 2010-12-09
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多