2016-06-29 43 views
0

監査人の処理が必要なユーザーがアップロードしたPDF文書があります。 PDF内のスキャンされたページが横向きまたは逆さまになることがあります。 PHPを使ってページをどのように回転させるのですか?PHPを使用してPDF内のすべてのページまたは特定のページをローテーションするにはどうすればよいですか?

私はTCPDFを使用していると私はFPDF/FPDI

私のコードと同じであると信じてTCPDIは、下記、うまくすべてのページを回転しますが、私はちょうど1ページを指定する場合、の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 
+0

PDFは、あるページから別のページに移るものがたくさんあります。回転は明らかにその1つです。次のページを回転させたくないときは、元に戻す必要があります。 –

答えて

1

多くの試行錯誤の後、私はそれを理解しました。コードは次のとおりです。

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 
+0

ありがとう!私は自分のコードに "Rotate '=> $ degrees"を追加しなければなりませんでした。それは今、完璧に動作します。 –

関連する問題