PDF::FromHTML を使用して HTML から PDF を生成しています (モジュールの名前が示すように) :)
コマンドラインから問題なく実行でき、期待どおりの出力を受け取ることができます-ただし、Webアプリでまったく同じコードを使用すると、出力がまったく正しく見えません-テキストが間違った場所に表示され、表示されませんそのすべてが現れています。
Web アプリとコマンド ラインでまったく同じ入力ファイルを使用しています。何らかの理由で、Web アプリ内から呼び出されると、表示が異なります。
コードは次のとおりです。
use PDF::FromHTML;
my $filename = '/tmp/backup.html';
my $font = 'Helvetica';
my $encoding = 'utf-8';
my $size = 12;
my $landscape = 0;
my $pdf = PDF::FromHTML->new(
encoding => $encoding,
);
my $input_file = $filename;
my $output_file = "$input_file.pdf";
warn "$input_file\n$output_file\n";
$pdf->load_file($input_file);
$pdf->convert(
Font => $font,
LineHeight => $size,
Landscape => $landscape,
);
$pdf->write_file($output_file);
Web アプリのコードは同じですが、そのブロックがメソッドにスローされているだけです。
生成された 2 つの PDF ファイルを 16 進エディターで調べたところ、違いが見つかりました。意味が分からないブロックまでは同じです...
そのブロックの適切な PDF コンテンツ:
/Length 302 >> stream
**binary data
endstream endobj
10 0 obj << /Filter [ /FlateDecode ] /Length 966
不正な PDF コンテンツ:
/Length 306 >> stream
**binary data
endstream endobj
10 0 obj << /Filter [ /FlateDecode ] /Length 559
ご覧のとおり、ここに含まれるコンテンツの長さは異なり、そのストリーム (長さ 302 対 長さ 306) と次のストリーム (長さ 966 対 559) に含まれるバイナリ データも異なります。
この不一致の原因は完全にはわかりません。考えられる唯一のことは、これをコマンドラインでユーザーとして実行している場合と、Web アプリから実行している場合の環境の違いです。ただし、どこからデバッグを開始すればよいかわかりません。