2013-03-05 87 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 2013-03-05 23:19:48

+0

@mkaatman - 我對這個建議非常失望。在我看來,TCPDF要求你在構建時定義一個單一的大小,就像這樣。 – 2013-03-06 07:00:55

+0

我希望進口會更優雅。 – mkaatman 2013-03-06 15:12:26

回答

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 2013-11-19 16:05:02

+1

原始文件長達數百頁,包含混合的方向。我想知道,如果在原有的加載和吐出一個安全的版本,它可以使用的回答我上面的時候發現FPDF可以處理這個正確。 – 2013-11-19 23:02:49

0

感謝您的帖子,我可以在一分鐘內解決我的定位問題!

無論如何,你不需要特殊的FPDI_「保護」包單獨更改方向,一個有效的解決方案只需要「FPDI」包(用於getTemplatesize功能)。 下面是從2012年8月到解決方案的鏈接: FPDF/FPDI addPage() Orientation

0

在我fpdf_tpl.php(1.6.1)在網頁中加入的方法被稱爲AddPage沒有addPage。看看如果你調用addPage方法不執行,你不能改變方向。

相關問題