![](/img/trans.png)
[英]Why does my perl script behave differently if I run it from the icon vs running it from the command line?
[英]Why would PDF::FromHTML behave differently when called from my web app?
我正在使用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應用程序代碼是相同的,只是將該塊放入方法中。
我在十六進制編輯器中查看了兩個生成的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應用程序運行該環境時,環境之間存在某種差異。 但是,我不知道從哪里開始調試。
通常,CGI環境與您的交互式登錄環境不同,就像其他人的登錄環境與您的登錄環境不同一樣。 訣竅是弄清楚您在命令行上設置或取消設置的哪些內容可以使程序正常工作。
您可能需要查看我的Perl CGI疑難解答腳本 ,以逐步了解這些問題。
要調查的一些事情:
一種有用的技術是使您的登錄Shell臨時具有與CGI環境相同的設置。 一旦這樣做,即使這些結果是錯誤的,您也應該在命令行上獲得相同的結果。 但是,一旦得到錯誤的結果,就可以從命令行開始對其進行跟蹤。
祝好運。
幾個建議:
輸出文本的順序是不同的還是僅位置不同? 如果位置合適,請嘗試設置PageWidth等,因為正在使用的庫(PDFLib或其他)在兩種環境之間可能會選擇不同的默認值。 如果訂購錯了,那我就不知道了。
您發布的兩個PDF塊實際上並沒有顯示太多-只是表明壓縮部分的大小不同。 這兩個示例在語法上實際上都沒有錯。
也許有一些編碼問題? 看看標題。
我將很好地了解運行Web服務器的用戶以及用戶環境變量的外觀。 還請注意該用戶對目錄的權限。 還有其他限制Web服務器用戶的東西,例如Linux機器上的SElinux?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.