2013-03-05 2 views
2

FPDF() 메서드 (FPDI_Protection.php)를 사용하여 기존 PDF를 가져오고 암호 보호를 적용합니다.FPDF - 혼합 된 방향 (세로/가로)으로 원본 PDF를 처리 할 수 ​​있습니까?

내가 가진 문제는 원본 PDF에 세로 및 가로 페이지 (8.5 "X11"& 11 "X8.5")가 혼합되어있는 반면 가져 오기 방법을 사용하면 한 번 정의 할 수 있다는 것입니다. 새로 만든 PDF를 11 "X11"로 정의 할 수 있습니다.이 오리엔테이션은 자르기 방향 중 하나의 문제를 수정하지만, PDF는 크기가 조정되고 왼쪽 정렬되므로 가독성/인쇄물이 나빠지므로 인쇄용으로 적합하지 않습니다.

원래 문서를 반복 할 때 사용할 수있는 루틴이 있습니까? 원래 크기를 감지하고 새 페이지 방향을 즉시 설정하려면 어떻게해야합니까?

function pdfEncrypt ($origFile, $password, $destFile) // RESPONSIBLE FOR ADDING PASSWORD PROTECTION TO PDF FILES 
{ 
    require_once('fpdi/FPDI_Protection.php'); 

    $pdf = new FPDI_Protection(); 
    // set the format of the destinaton file, in our case 6×9 inch 
    $pdf->FPDF('P', 'in', array('11','11')); 

    //calculate the number of pages from the original document 
    $pagecount = $pdf->setSourceFile($origFile); 

    // copy all pages from the old unprotected pdf in the new one 
    for ($loop = 1; $loop <= $pagecount; $loop++) 
    { 
     $tplidx = $pdf->importPage($loop); 
     $pdf->addPage(); 
     $pdf->useTemplate($tplidx); 
    } 

    // protect the new pdf file, and allow no printing, copy etc and leave only reading allowed 
    $pdf->SetProtection(array('print'), $password, ''); 
    $pdf->Output($destFile, 'F'); 

    return $destFile; 
} 

아니면, PHP를 사용하여 기존 PDF에 암호를 추가하는 간단한 방법이 있습니까?

+0

내가 시도하려는 한 가지는 TCPDF에 대해 약간 수정 된 코드를 실행하는 것입니다. 그것은 같은 사람이 썼지 만 정기적으로 업데이트됩니다. – mkaatman

+0

@mkaatman - 나는이 제안으로 꽤 길을 잃었다. TCPDF는 같은 방법으로 생성시 단일 크기를 정의해야한다고 생각합니다. –

+0

나는 수입이 더 우아 해지기를 바랬다. – mkaatman

답변

3

좋아, 나는이 일에 내 머리카락을 꺼냈다. 지칠 줄 모르는 어지간한 검색 후 내 문제와 관련된 모든 반복은 실제로 효과가있는 솔루션의 한 인스턴스를 찾을 수있었습니다 (필자는 치수를 측정하기 위해 pdflib lite, phpinfo, ghostscript, xpdf 등을 설치하려고했습니다). 어떤 일을하는 것은이 있었다 (당신이 필요로하는 FPDI_Protection package [무료]) :

$specs = $pdf->getTemplateSize($tplidx); 
    $pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L'); 

전체 기능은 다음과 같다 :

function pdfEncrypt ($origFile, $password, $destFile) // RESPONSIBLE FOR ADDING PASSWORD PROTECTION TO PDF FILES 
{ 
    require_once('fpdi/FPDI_Protection.php'); 

    $pdf = new FPDI_Protection(); 
    // set the format of the destinaton file 
    $pdf->FPDF('P', 'in', array('8.5','11')); 

    //calculate the number of pages from the original document 
    $pagecount = $pdf->setSourceFile($origFile); 

    // copy all pages from the old unprotected pdf in the new one 
    for ($loop = 1; $loop <= $pagecount; $loop++) 
    { 

     $tplidx = $pdf->importPage($loop); 

     $specs = $pdf->getTemplateSize($tplidx); 
     $pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L'); 
     $pdf->useTemplate($tplidx); 
    } 

    // protect the new pdf file 

    $pdf->SetProtection(array('print'), $password, ''); 
    $pdf->Output($destFile, 'F'); 

    return $destFile; 
} 

이 두 줄의 코드를 추가하면 원래 여부를 감지 할 수 있었다 페이지는 가로 방향이었고 같은 방법으로 출력 파일에 페이지를 다시 만듭니다. 할렐루야.

+0

페이지 레이아웃을 가로에서 세로로 변경할 수 있다고 생각하십니까? – Bor

+1

원본 문서는 수백 페이지 길이로 혼합 된 방향이 포함되어 있습니다. FPDF가 원본을로드하고 안전한 버전을 뱉어 낼 때 FPDF가 제대로 처리 할 수 ​​있는지 알고 싶었습니다. 위에서 찾은 대답을 사용하면됩니다. –

0

게시 주셔서 감사합니다. 1 분 이내에 내 방향 문제를 해결할 수있었습니다!

어쨌든 오리 엔테이션 변경만으로 특별한 FPDI_ "보호"패키지가 필요하지는 않습니다. 실제 해결책은 "FPDI"패키지 (getTemplatesize 함수 용) 만 필요합니다. 같이 AddPage하지의 addPage라고 내 fpdf_tpl.php (1.6.1) 페이지를 추가하는 방법에있어서 FPDF/FPDI addPage() Orientation

0

: 는 여기 년 8 월 2012 솔루션에 대한 링크입니다. addPage를 호출하면 메서드가 실행되지 않고 방향을 변경할 수 없습니다.

관련 문제