FPDI从PDF输出中删除页面

时间:2015-04-02 16:38:27

标签: php pdf fpdf fpdi

我正在使用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的第一页。

1 个答案:

答案 0 :(得分:1)

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

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

    这是一个简单的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循环的起点和终点即可。这个概念不是为了隐藏&#34;一个页面,而只是导入我们想要在最终结果中看到的页面。

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

    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文档中的某些页面。快乐的编码!