2011-07-13 10 views
7

非常に複雑な状況に陥りました。 私はGreeting cardのPHP Webアプリケーションを開発中です。インポートされたPDFテンプレートのサイズに問題があります。

このために、いくつかのLinuxツールとTCPDFとFPDIを使用しています。 どうすればいいか教えてください:

4ページのグリーティングカードテンプレートPDFファイルがあります。これはカスタムサイズの5x7インチ300dpi PDFファイルです。

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

寺の各ページを分離するために:私は何をするかにも

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

TCPDFでカスタムサイズを追加した は、私が使用する、です。

は、今私が使用します。

$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

$ card詳細にカードのサイズと向きが含まれています 'code' $ cardDetails ['ORIENTATION'] = 'L'; $ cardDetails ['SIZE'] = 'STANDARD_CARD'; STANDARD_CARDの 'code' サイズは' code' ケース 'STANDARD_CARD' としてTCPDFクラスで汚されている:{$ PF =配列(360.00,504.00);破る;}よく 'code' 、私は私を持っています問題を解決しました(ある程度、100%ではない) 私はpdfのサイズをpdfのサイズに設定したいと思いました。それに応じてサイズを設定します。しかし、その中で運がない、実行可能なソリューションは100%ではないが、私のために働いているようだ... – Ravish

答えて

18

こんにちはうっとりさせる、

また、私はこの問題に遭遇しました。実際は私のシナリオはこれです。私は元のファイルのリーガルサイズ(8.5mm x 14mmmm)です。 FPDI出力を使用して表示すると、文字サイズ(8.5mm x 11mm)のしか表示されません。その結果はCROPPED PDFファイルです。

私はいくつかのグーグルを作り、いくつかの回答を別の投稿からも見つけました。ここに私が見つけた最も関連性の高い解決策があります。

まず以下の機能コードのこの部分である: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ミリメートルです。

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

または単に::私のような機能にgetTemplateSizeuseTemplateを使用して、私のPDFのサイズを設定すると今

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

結果は、私の新しいPDFファイルがCROPPED ですが底にあり、なぜか分からない。

このように、理由を調べるためにいくつかのテストを行いました。そして、FPDIを使用してPDFファイルを生成するときにの制限があります。上のコードでわかるように、ファイルの実際の長さは使用しませんでした。 $size[h']から派生する350.9mmを使用するのではなく、切り取ったファイルを与えるので使用しませんでした。私はちょうどそれに近い数値と実際の幅を渡して、望ましい結果を得ました。ところで

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

、310ミリメートル(長さ)は、私がをCROPPEDされていない新しいPDFファイルを生成するために使用している最大の数値です。

私はFPDIを使用しているすべての開発者に、CROPPED PDF結果の問題に遭遇するいくつかのインプットを与えて欲しい。すべての

おかげで...

レヴィ・パーマー

+0

ページが切り取られる理由は、ページの向きやサイズが変更されない限り、FPDI/FPDFの 'PageSizes'配列のエントリが作成されないためです([ソースコード](https://github.com/hanneskod/)参照) fpdi/blob/c4fa110b8a8a6940616ec1a1ef323eafd8601664/src/FPDI.php#L137))。 '$ size'配列は浮動小数点値を含んでいるので、浮動小数点と整数の間の差は変更されたページサイズとして認識され、したがってエントリとして認識されるので、単にuseTemplate()に幅または高さの整数を渡すだけです'PageSizes'に追加されます。 – Mennny

8

代わりの

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

使用

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

最後の引数$adjustPageSizeは、デフォルトでは '偽' に設定されています。

+1

ありがとう!私は同じ問題を抱えていた。あなたはヌルを持っていますが、私は0を持っていました。それらをヌルに置き換えることがトリックでした! – Chemdream

関連する問題