FPDI 从 PDF 输出中删除页面

FPDI remove page from PDF output

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

似乎没有人回答这个问题……直到现在。这是 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 循环的起点和终点。这个概念不是"hide"一个页面,而是只导入我们希望在最终结果中看到的页面。

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

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 文件的性质,但我认为有了这个 post 您应该能够弄清楚您需要知道的一切如何使用 FPDI 有选择地包含源 PDF 文档中的某些页面。编码愉快!