2016-06-29 2 views
0

감사인이 처리해야하는 사용자가 업로드 한 PDF 문서가 있습니다. 때로는 PDF의 스캔 페이지가 옆으로 또는 뒤집어 져 있습니다. PHP를 사용하여 페이지를 어떻게 회전합니까? 내가 생각 TCPDF 및 TCPDI을 사용하고PHP를 사용하여 PDF의 모든 페이지 또는 특정 페이지를 어떻게 회전합니까?

는 FPDF/FPDI와 동일 난 그냥 한 페이지를 지정할 때

내 코드, 아래의 3 페이지를 가정 해 봅시다, 잘 모든 페이지를 회전,하지만 것 5. 페이지 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

많은 시행 착오 끝에 나는 그것을 알아 냈다. 코드는 다음과 같습니다.

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 "를 코드에 추가해야했습니다. 이제 완벽하게 작동합니다. –

관련 문제