2009-04-09 43 views
1

我使用PDF :: FromHTML從HTML生成PDF(因爲模塊的名稱會暗示):)爲什麼PDF :: FromHTML在從我的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 vs 559之一)也不相同。

我不完全確定是什麼可能導致這種差異,我能想到的唯一的事情就是當我以用戶的身份在命令行上運行它時, web應用程序。但是,我不知道從哪裏開始調試。

+0

只是爲了澄清,當你說'網絡應用程序'你的意思是哪個web服務器,例如:Apache mod_perl或哪一個? – NickZoic 2009-04-19 04:02:35

回答

4

通常,CGI環境與您的交互式登錄環境不同,就像別人的登錄環境與您的登錄環境不同。訣竅是弄清楚你在你的命令行上設置或取消設置了哪些東西,以使你的程序能夠正常工作。

您可能想要查看我的Troubleshooting Perl CGI scripts以逐步跟蹤這些問題。

有些事情要調查:

  • 在同一平臺上運行的CGI腳本(即它是一個Windows的Unix相比八九不離十的事情)
  • 關於什麼的環境變量有什麼不同?
  • 您的CGI腳本是否使用相同版本的Perl?
  • 那個perl二進制文件有不同的編譯選項嗎?
  • 您是否使用相同版本的模塊?
  • 如果其中一些模塊使用外部庫,它們是否一樣?

一個有用的技術是使您的登錄shell暫時具有與您的CGI環境相同的設置。一旦你這樣做了,即使這些結果是錯誤的,你也應該在命令行上得到相同的結果。但是,一旦你得到錯誤的結果,你可以從命令行開始追蹤它。

祝你好運。

+0

謝謝,這是一般Perl調試的好建議。 我正在使用相同的perl二進制文件在同一個盒子上運行它們。我認爲這可能是一個包含模塊差異的問題。 – ashgromnies 2009-04-09 20:56:26

+0

幾乎可以肯定,是的。尺寸的差異暗示了您正在使用兩個不同版本的壓縮庫。嘗試在兩種環境中打印@INC並尋找差異。 – 2009-04-10 01:44:54

1

夫婦的建議:

  • PDF :: FromHTML使用PDF ::作家,這反過來使用PDF渲染庫作爲一個插件(認爲選項PDFLib來和其他一些)。與插件是否有相同版本的庫?
  • 您的HTML輸入文件是否包含尚未上傳的CSS文件?
  • 嘗試將其他的PDF :: FromHTML變量:頁寬,PageResolution,每頁等

是輸出文本的不同,或者僅僅是志願服務崗位排序?如果它是位置,那麼嘗試設置PageWidth等,因爲正在使用的庫(PDFLib或其他)可能會在這兩個環境之間選擇不同的默認值。如果訂購是錯誤的,那麼我不知道。

您發佈的兩個PDF塊沒有真正顯示太多 - 僅顯示壓縮的塊大小不同。任何一個例子都沒有任何語法錯誤。

0

也許有一些編碼問題?看看頭文件。

0

我會仔細看看Web服務器運行的用戶以及用戶環境變量的外觀。還要注意目錄上的用戶權限。還有其他一些限制網絡服務器用戶的東西,例如Linux機器上的SElinux?

相關問題