2010-01-06 15 views
24

Mam skrypt php, który generuje raport pdf. Kiedy przechodzimy do zapisywania dokumentu PDF, nazwa pliku, którą sugeruje Acrobat, to report_pdf, ponieważ skrypt php nazywa się report_pdf.php. Chciałbym dynamicznie nazwać plik pdf, więc nie muszę wpisywać odpowiedniej nazwy raportu za każdym razem, gdy go zapisuję.użycie nagłówka() do przepisania nazwy pliku w adresie URL dla dynamicznego pdf

wyjściowa na grupie prasowej, ktoś zasugerował to, gdzie filename="July Report.pdf" jest zamierzona nazwa raportu

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

Ale to nie działa. Czy robię to źle, czy to działa w ogóle? Czy to jest praca dla mod_rewrite?


Więc próbowałem zarówno

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

i

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

(nie w tym samym czasie) i ani pracować dla mnie. Czy to jest problem z moim hostingiem? Z tego url, oto mój kod:

<? 
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

Jeśli chcesz plik do pobrania (i nie openend w przeglądarce), dodać te: header ("Content-Transfer-Encoding: binary"); nagłówek ("Content-Type: application/force-download"); W przeciwnym razie powinieneś jeszcze dołączyć nagłówek linii ("Content-Type: application/pdf") , aby przeglądarka wiedziała, jak otworzyć plik. – eCaroth

+0

Może również zabraknąć długości pliku - niektóre przeglądarki poprawnie otwierają pliki, a niektóre nie. Aby to uzyskać, zrzuć wszystkie dane wyjściowe do bufora wyjściowego, a następnie wydrukuj nagłówki i określ je jako 'Content-Length:' ** strlen bufora wyjściowego *** – eCaroth

+0

Tymczasowo skomentuj te linie nagłówka php i zobacz wynik . NIE powinien zawierać żadnych błędów PHP. Zastosuj z powrotem nagłówki po naprawieniu jakichkolwiek błędów, jeśli tak. –

Odpowiedz

37

Spróbuj:

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

lub

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

Inną opcją byłoby użyć $_SERVER['PATH_INFO'] t O zdać „report.pdf lipiec” - przykład związek może być:

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

Plik powinien domyślnie zapisywanie jako „report.pdf lipca” - i powinna zachowywać się dokładnie tak, jak twój stary skrypt php nie, wystarczy zmienić kod, który tworzy link do pliku pdf.

+1

Próbowałem ich, bez powodzenia :(Czy to jest problem z moim hostingiem? – user151841

+0

Ta sztuczka zadziałała! Teraz, co z% 20 w nazwie pliku, kiedy idę, aby go zapisać?;) – user151841

4

Powinno być:

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

Czy próbowałeś usunąć spacje z nazwy pliku za pomocą łączników? Tak więc myślę, że jego nazwa musi być taka; Nazwa pliku = Lipiec-report.pdf

2

podstawie https://github.com/rospdf/pdf-php/raw/master/readme.pdf (strona 19) Strumień-metody przyjmuje tablicę jako parametru:

stream([array options]) używany do wyjścia, będzie ustawiony wymaganych nagłówków i wysyła kod pdf. Tablica opcji może być używany do ustawiania wielu rzeczy o wyjściu:

'Content-Disposition'=>'filename' określa nazwę pliku, ...

Ten kod działa dobrze dla mnie

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

W moim przypadku używam ezStream(), ale myślę, że stream() powinien dać taki sam wynik.

+1

Faktycznie akceptowane nie Pracuj dla mnie. Ten naprawdę działa !! Dlatego dziękuję! –

1

Dla nazwą pokazanej na karcie tytułowej w przeglądarce

miałem ten sam problem, a potem okazało się, że jest to metadane brakuje w moim .pdf. Użyłem narzędzi ("narzędzia graficzne debiutu") do edycji właściwości pdf, takich jak autor, tytuł, itd ... Po prostu zmieniam tytuł z pustego pola na tytuł, który chcę, prześlij nowy plik pdf, a teraz z tym samym kodem, ten sam skrypt przeglądarka wyświetla właściwą nazwę!

Na imię gdy u prosić, aby zapisać dokument

to co u podać w nagłówku pliku =

+0

Ustawienie tytułu PDF w metadanych również poprawia nazwę pliku wyświetlaną w lewym górnym rogu podczas przeglądania pliku PDF w przeglądarce Chrome. Dla osób używających FPDF do dynamicznego generowania plików PDF, użyj '$ pdf-> SetTitle (" Twój tytuł ");'. Dzięki! – jessica