我正在使用 PDF::FromHTML 从 HTML 生成 PDF(正如模块名称所暗示的那样):)
我可以从命令行很好地运行它并接收我的预期输出 - 但是当我在我的网络应用程序中使用完全相同的代码时,输出看起来根本不正确 - 文本出现在错误的位置而不是这一切都在出现。
我在 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 应用程序代码是相同的,只是将该块放入方法中。
我在十六进制编辑器中查看了两个生成的 PDF 文件并发现了差异。在我无法理解其意图的块之前,它们是相同的......
该块的良好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 应用程序运行它时,环境中的某种差异。但是,我不知道应该从哪里开始调试。