2011-07-13 59 views
7

我陷入了非常複雜的情況。 我正在爲賀卡PHP Web應用程序工作。帶FPDI + TCPDF的導入PDF模板的大小問題

爲此,我使用了一些Linux工具和TCPDF和FPDI。 讓我告訴你它是如何工作的:

有4頁賀卡模板PDF文件。這是自定義尺寸5x7英寸300dpi PDF文件。 我在TCPDF添加自定義尺寸以及

case 'STANDARD_CARD'  : {$pf = array(1500.00,2100.00);break;} 

我做什麼,我使用:

pdftk templateX.pdf burst output page_%2d.pdf 

到寺廟的每一頁分開。

現在我用:其他

$pdf = new FPDI($cardDetails['ORIENTATION'],"mm",$cardDetails['SIZE']);  


    //set source file for 
    $pdf->setSourceFile($pdfFile); 
    $templateIndex = $pdf->importPage(1); 
    $pdf->AddPage($cardDetails['ORIENTATION'],$cardDetails['SIZE']); 
    $pdf->useTemplate($templateIndex,0,0); 

之類的東西,寫郵件打印圖像。並在最後用保存文件:

$pdf->output("file_name.pdf","F"); 

原始的PDF文件(僅第1頁):(5×7英寸) Original pdf file 修改PDF和某些PDF操作:(29x20英寸) modified PDF

現在我得到的輸出不是5x7 pdf,它是一個29 x 20英寸的文件,也破壞了我的計算和PDF。

請告訴我,我做錯了......

+0

什麼是'$ cardDetails'的內容是什麼? – Orbling

+0

$ cardDetails含有卡大小和方向 'code' $ cardDetails [ '方向'] = 'L'; $ cardDetails ['SIZE'] ='STANDARD_CARD'; 'code' STANDARD_CARD的 大小在TCPDF類玷污作爲 'code' 情況下 'STANDARD_CARD':{$ = PF陣列(360.00,504.00);斷裂;} 'code' 好,我有問題解決了(在一定程度上,不是100%) 我想PDF的大小設置爲導入PDF的大小,說導入PDF是5.27 X 7.1。然後相應地設置大小。但是,沒有運氣,只是一些可行的解決方案,而不是100%,但是,似乎正在爲我工​​作...... – Ravish

回答

18

姦污嗨,

我也遇到了這個問題。其實我的情況是這樣的。我有一個原始文件是Legal size(8.5mm x 14mmmm)。當我像使用FPDI輸出一樣顯示它時,它只顯示字母大小(8.5mm x 11mm)。所以結果是:收入 PDF文件。

我做了幾個Google搜索,並從不同的職位找到了幾個答案。這是我找到的最相關的解決方案。

首先是這片的下面功能的代碼:useTemplate

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

通常,某些開發人員設置此作爲TRUE的最後一個參數。是的,如果你不設置寬度和長度,這是正確的。但是,我想強調第4個和第5個參數指定導入PDF的寬度和長度。所以,如果你將採用或獲取導入文檔的實際大小,最後一個參數設置爲FALSE,因爲這會告訴它會帶你設置的實際或具體尺寸。

請把我這樣做示例代碼:

$pdf = new FPDI(); 
$pdf -> setSourceFile('birform2316.pdf'); 
$tplIdx = $pdf -> importPage(1); 
$size = $pdf->getTemplateSize($tplIdx); 
$pdf -> AddPage(); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], 310, FALSE); 
$pdf -> SetFont('Arial'); 
$pdf -> SetTextColor(0, 0, 0); 
$pdf -> SetXY(18, 174); 
$pdf -> Write(0, $employer_address); 
$pdf -> Output('myOwn.pdf', 'D'); 

有了這個代碼,我已經產生了新的PDF 不裁剪導入的文件,我設置。意思是,模板的所有細節(原始文件)已被顯示。

請注意也是我看到的東西,而我設置PDF的大小:

首先,我的文件有215.6毫米的原始寬度和長度是350.9毫米。現在,當我使用功能getTemplateSizeuseTemplate設置我的PDF的大小如:

$size = $pdf->getTemplateSize($tplIdx); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE); 

或者乾脆:

$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE); 

的結果是,我的新的PDF文件是裁剪在底部,我不知道爲什麼。

與此觀察,我做了一些測試,以找出原因。並且出現的結果是,在使用FPDI生成PDF文件時存在長度限制。正如你在上面的代碼中看到的,我沒有使用我的文件的實際長度。我沒有使用350.9mm,而是使用$size[h'],我沒有使用它,因爲它會給裁剪文件。我只是傳遞了一個數字值和實際寬度來產生所需的結果。

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false); 

順便說310毫米(長度)是我用來產生被不會被裁剪一個新的PDF文件中的最大數值。

我希望我已經給一些投入使用FPDI其中遇到的裁剪PDF結果的問題,所有的開發人員。

感謝所有...

列維 - 帕爾默

+0

頁面被裁剪的原因是,只要頁面的方向和大小都沒有變化,FPDI/FPDF中的頁面就不會創建[PageSizes]數組(參見[源代碼](https://github.com/hanneskod/) FPDI/BLOB/c4fa110b8a8a6940616ec1a1ef323eafd8601664/src目錄/ FPDI.php#L137))。由於'$ size'數組包含浮點值,因此只需手動將寬度或高度的整數傳遞給'useTemplate()',因爲float和int之間的差異被識別爲已更改的頁面大小,被添加到'PageSizes'。 – Mennny

8

而不是

$pdf->useTemplate($templateIndex,0,0); 

使用

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

最後一個參數$adjustPageSize被默認設置爲 '假'。

+1

感謝您的支持!我遇到了同樣的問題。你有空位,我有0。取而代之的是空值技巧! – Chemdream