如何使用PHP旋转PDF中的所有或特定页面


How do I rotate all or specific pages in a PDF using PHP?

我有用户上传的PDF文档需要审计人员处理。有时,PDF中的扫描页面是横向或上下颠倒的。如何使用php旋转页面?

我使用TCPDF和TCPDI,我认为它们与fpdf/fpdi相同

下面的代码可以很好地旋转所有页面,但是当我只指定一个页面时,假设是5页中的第3页。它将保留第1页和第2页,旋转第3页,并将继续旋转第4页和第5页。为什么?

还有,这段代码有意义吗?这样做是正确的还是有更简单的方法?

function rotatePDF($file, $degrees, $page = 'all'){
    $pdf = new TCPDI(); // new object
    $pdf->setPrintHeader(false); // no headers
    $pdf->setPrintFooter(false); // no footers
    $pagecount = $pdf->setSourceFile($file); //the original file
    // rotate all - THIS WORKS FINE
    if($page=="all"){
        for ($i = 1; $i <= $pagecount; $i++) { 
            $pageformat = array('Rotate'=>$degrees);
            $tpage = $pdf->importPage($i);
            $size = $pdf->getTemplateSize($tpage);
            // get original page orientation        
            $orientation = $size['w'] > $size['h'] ? 'L' : 'P';
            $pdf->AddPage($orientation,$pageformat);
            $pdf->useTemplate($tpage);      
        }
    }else{
        for ($i = 1; $i <= $pagecount; $i++) {
            if($page == $i){
                $pageformat = array('Rotate'=>$degrees);
                $tpage = $pdf->importPage($i);
                $size = $pdf->getTemplateSize($tpage);
                // get original page orientation
                $orientation = $size['w'] > $size['h'] ? 'L' : 'P';
                $pdf->AddPage($orientation,$pageformat);
                $pdf->useTemplate($tpage);                      
            }else{      
                $tpage = $pdf->importPage($i);
                $pdf->AddPage();
                $pdf->useTemplate($tpage);                      
            }
        }
    }
    $out = realpath($file);
    if(rename($file,"files/1/file.bak")){
        $result = $pdf->Output($out, "F"); 
        if($result == "" ){
            echo "ok";
        }
    }else{
        echo "Failed to rename old PDF";
        die;
    }
}
$file = "files/1/1.pdf";
rotatePDF($file,90); // rotating all works fine
rotatePDF($file,90,3); // rotates page 3 AND all following

经过多次尝试和错误的旋转,我找到了它。下面是代码:

function rotatePDF($file, $degrees, $page = 'all'){
    $pdf = new TCPDI(); 
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pagecount = $pdf->setSourceFile($file);
    // rotate each page
    if($page=="all"){
        for ($i = 1; $i <= $pagecount; $i++) { 
            $pageformat = array('Rotate'=>$degrees);
            $tpage = $pdf->importPage($i);
            $size = $pdf->getTemplateSize($tpage);
            //$info = $pdf->getPageDimensions();
            $orientation = $size['w'] > $size['h'] ? 'L' : 'P';
            $pdf->AddPage($orientation,$pageformat);
            $pdf->useTemplate($tpage);      
        }
    }else{
        $rotateFlag = 0;
        for ($i = 1; $i <= $pagecount; $i++) { 
            if($page == $i){
                $pageformat = array('Rotate'=>$degrees);
                $tpage = $pdf->importPage($i);
                $size = $pdf->getTemplateSize($tpage);
                //$info = $pdf->getPageDimensions();
                $orientation = $size['w'] > $size['h'] ? 'L' : 'P';
                $pdf->AddPage($orientation,$pageformat);
                $pdf->useTemplate($tpage);
                $rotateFlag = 1;
            }else{
                if($rotateFlag==1){
                    // page after rotation; restore rotation
                    $rotateFlag = 0;
                    $pageformat = array('Rotate'=>0);
                    $tpage = $pdf->importPage($i);
                    $pdf->AddPage($orientation,$pageformat);
                    $pdf->useTemplate($tpage);
                }else{
                    // pages before rotation and after restoring rotation
                    $tpage = $pdf->importPage($i);
                    $pdf->AddPage();
                    $pdf->useTemplate($tpage);
                }
            }
        }
    }
    $out = realpath($file);
    if(rename($file,"files/1/file.bak")){
        $result = $pdf->Output($out, "F"); 
        if($result == "" ){
            echo "ok";
        }
    }else{
        echo "Failed to rename old PDF";
        die;
    }
}
$file = "files/1/1.pdf";
rotatePDF($file,90); // rotating all works fine
rotatePDF($file,180,3); // rotates only page 3