2010-01-06 53 views
24

我有一個生成PDF報告的PHP腳本。當我們去保存PDF文檔時,Acrobat建議的文件名是report_pdf,因爲php腳本名爲report_pdf.php。我想動態地命名PDF文件,所以我不必爲每次保存報告時輸入適當的報告名稱。使用header()重寫動態pdf的文件名URL

問一個新聞組,有人建議本,其中filename="July Report.pdf"是報告

<? 
header('Content-Type: application/pdf'); 
header('Content-disposition: filename="July Report.pdf"'); 

的預期的名稱,但它不工作。我做錯了,還是會這樣做?這是mod_rewrite的工作嗎?


所以我都試過

header('Content-disposition: inline; filename="July Report.pdf"'); 

header('Content-disposition: attachment; filename="July Report.pdf"'); 

(不是在同一時間),並沒有爲我工作。這是我的虛擬主機有問題嗎?對於這個url,這裏是我的代碼:

<? 
header('Content-disposition: inline; filename="July Report.pdf"'); 

// requires the R&OS pdf class 
require_once('class.ezpdf.php'); 
require_once('class.pdf.php'); 

// make a new pdf object 
$pdf = new Cpdf(); 
// select the font 
$pdf->selectFont('./fonts/Helvetica'); 
$pdf->addText(30,400,30,'Hello World'); 
$pdf->stream(); 

?> 
+1

如果你想要的文件被下載(而不是雙頭呆在瀏覽器中),添加這些: 頭('Content-Transfer-Encoding:二進制'); header('Content-Type:application/force-download'); 否則,你應該仍然包括行 標題('Content-Type:application/pdf') 因此你的瀏覽器知道如何打開文件。 – eCaroth 2010-01-06 22:07:24

+0

另外,您可能會錯過文件的內容長度 - 某些瀏覽器在沒有這個的情況下正確打開文件,有些則不會。爲了得到這個,將所有輸出轉儲到輸出緩衝區,然後打印出標題並指定一個爲'Content-Length:'**輸出緩衝區的strlen *** – eCaroth 2010-01-06 22:11:30

+0

暫時註釋這些php標題行並查看輸出。它不應該包含任何PHP錯誤。修復任何錯誤後應用返回標頭,如果是這樣的話。 – 2018-02-09 16:54:03

回答

37

嘗試:

header('Content-Disposition: attachment; filename="July Report.pdf"'); 

header('Content-Disposition: inline; filename="July Report.pdf"'); 

另一種選擇是使用$_SERVER['PATH_INFO'] Ť Ø通過您的「七月Report.pdf」 - 一個例子鏈接可能是:

<a href="report_pdf.php/July%20Report.pdf?month=07"> 

該文件應默認保存爲「七月Report.pdf」 - 而應該表現得完全像舊的PHP腳本一樣,只是改變生成鏈接到PDF的代碼。

+1

我試過它們,沒有運氣:(這是我的網絡主機的問題嗎 – user151841 2010-01-06 21:01:02

+0

這個href技巧奏效!現在,當我去保存它時,文件名中的%20怎麼樣?) – user151841 2010-01-07 15:21:44

4

應該是:

header('Content-disposition: attachment;filename="July Report.pdf"'); 
0

您是否嘗試使用連字符從文件名中刪除空格?所以,我認爲它的名字一定是這樣的;文件名=七月Report.pdf

2

基於https://github.com/rospdf/pdf-php/raw/master/readme.pdf(第19頁) 流-方法接受數組作爲參數:

stream([array options]) 用於輸出,這將設置所需的報頭,並輸出pdf代碼。 選項陣列可用於設置一些關於輸出的東西:

'Content-Disposition'=>'filename'設置文件名,...

此代碼的工作很適合我

$ezOutput = $pdf->ezStream(array("Content-Disposition"=>"YourFileName.pdf")); 

在我的情況下,我使用ezStream(),但我認爲stream()應該給出相同的結果。

+1

實際上接受的不是爲我工作。這一個實際上工作!因此謝謝你! – 2016-01-20 16:49:53

1

對於在瀏覽器

我有同樣的問題標題標籤上顯示的名字,然後我發現,這是我的.pdf內丟失的元數據。 我使用了一個工具(「debenu PDF工具」)來編輯pdf屬性,例如作者,標題等...... 我只是將標題從空字段更改爲我想要的標題,上傳新PDF並現在使用相同的代碼,相同的腳本瀏覽器顯示正確的名稱!

因爲當u向保存文檔

是什麼ü在頭文件名中指定的名稱=

+0

在元數據中設置PDF標題還修復了在Chrome中查看PDF時左上角顯示的文件名。對於那些使用FPDF動態生成PDF文件的人,請使用'$ pdf-> SetTitle('Your Title');'。謝謝! – jessica 2016-09-14 17:25:25