12

PHPでFPDFを使用して、PDFに画像を追加しています。ただし、PDFの画質は、次のように元の画像よりもはるかに劣っています。

Webページから画面を印刷する PDFから画面を印刷

関連コード:

$image_height = 40;
$image_width = 40;
$pdf = new FPDF();
$pdf->AddPage();
$start_x = $pdf->GetX();
$start_y = $pdf->GetY();
$pdf->Image('./images/ds_pexeso_ros_0_17.jpg', $pdf->GetX(), $pdf->GetY(), $image_height, $image_width); 
$pdf->Output("pexeso".date("Y-m-d"),"I");

元の画像は150x150ピクセルです。

4

3 に答える 3

12

私は顧客向けのプロジェクトでも同じ問題に直面しました。採用画像があっても、生成されたpdfドキュメントのぼやけた画像。

数時間かかりましたが、これが私にとってはうまくいきました。

コードを見てみると、PDFドキュメントのコンストラクターにスケールファクターが設定されていることがわかりました。

//Scale factor
if($unit=='pt')
    $this->k=1;
elseif($unit=='mm')
    $this->k=72/25.4;
elseif($unit=='cm')
    $this->k=72/2.54;
elseif($unit=='in')
    $this->k=72;
else
    $this->Error('Incorrect unit: '.$unit);

scalefactorは、PDFドキュメントのコンストラクターで指定された値によって異なります。

function FPDF($orientation='P',$unit='mm',$format='A4')

デフォルトは「mm」です。ほとんどのドキュメントで、次のようなPDFドキュメントを作成します。

$pdf = new PDF('P');

これは、72 / 25.4=2.83のスケールファクターが使用されることを意味します。使用する前に画像を配置したとき:

$this->Image('path/to/file', 0, 0);

このようにして、ぼやけた画像を取得しました。コマンドで画像の幅を指定することもできます

$this->Image('path/to/file', 0, 0, 200); // for a image width 200

これは私に大きすぎる画像を与えました。しかし、-そしてここにトリックがあります-実際の幅をスケールファクター(私の場合は2.83)で割って、これをこのステートメントに入れると、完全に鮮明な画像が得られます:

$this->Image('path/to/file', 0, 0, 71); // for a image width 200 / 2.83 = app 71

これがあなたにも役立つことを願っています!

于 2014-07-22T21:07:46.700 に答える
1

問題は以下に関連している可能性があると思います。

 $image_height = 40;
 $image_width = 40;

これらの2つの手順を使用して、PDFで画像のサイズを設定します。

ただし、元の画像が40x40より大きい場合、画像の拡大縮小によって品質の問題が発生する可能性があります。

だから私が提案すること:

  • 画像のサイズを正しく変更します(phpはGDライブラリを提供します)。サイズを40x40に変更します。GD関数imagecopyresampledはあなたの友達です:画像のサイズを変更してリサンプリングしてください!完全なリファレンス:http ://www.php.net/manual/en/function.imagecopyresampled.php
  • 今すぐPDFに画像を挿入してください
于 2012-04-06T07:27:50.967 に答える
0

ユーザー単位をmmに設定するためのこのようなステートメントを含むFPDF$pdf = new FPDF('P'、'mm'、'Letter');

<?php 

    require_once('fpdf.php');
    $image_height = 40;
    $image_width = 40;
    $pdf = new FPDF('P','mm','Letter');
    $pdf->AddPage();
    $start_x = $pdf->GetX();
    $start_y = $pdf->GetY();
    $pdf->Image('./images/ds_pexeso_ros_0_17.jpg',$start_x+0,$start_y-2,40);
   $pdf->Output("pexeso".date("Y-m-d"),"I");
?>

FPDFは非常に見栄えの良い結果になりました。

于 2014-09-04T16:26:32.447 に答える