weird characters when using FPDF PHP?

2020-04-20 07:15发布

问题:

I'm getting this output when using FPDF library to generate a pdf file.

%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream x�U��n�0��<�ˁ�7��8'�!Z���q(U~���!B�8��o�e����l���e�&��l�tʙ��:Cl�k||��p�|K����e�'�-9���B���Wj�$F�����V��t���q��3to��XrlQP�%���n-c�X��B_!Sl�����+�� ����B�)װ�I����(m�����HV endstream endobj 1 0 obj <> endobj 5 0 obj <> endobj 2 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F1 5 0 R >> /XObject << >> >> endobj 6 0 obj << /Producer (FPDF 1.7) /CreationDate (D:20151013130538) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 8 0000000000 65535 f 0000000354 00000 n 0000000542 00000 n 0000000009 00000 n 0000000087 00000 n 0000000441 00000 n 0000000646 00000 n 0000000721 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 770 %%EOF

My code:

header("Content-Type: application/pdf");

$pdf = new FPDF();

$pdf->AddPage();

$pdf->SetFont('Arial','B',16);

$pdf->Cell(40,10,'Hello World!');

$pdf->Output();


**when i check the header response this is what i get:**

Cache-Control:private, max-age=0, must-revalidate

Connection:Keep-Alive

Content-Disposition:inline; filename="doc.pdf"

Content-Encoding:gzip

Content-Length:708

Content-Type:text/html;charset=UTF-8

Date:Tue, 13 Oct 2015 17:17:47 GMT

Expires:Thu, 19 Nov 1981 08:52:00 GMT

Keep-Alive:timeout=5, max=100

Pragma:public

Server:Apache/2.4.10 (Ubuntu)

Set-Cookie:PHPSESSID=q20auj7ssdj2c1obhbfqu8ha85; path=/

Vary:Accept-Encoding

回答1:

The following headers and Output command is what I currently use with FPDF:

// Set a filename
$filename = "AppName_Day_".$day1."_gen_".date("Y-m-d_H-i").".pdf";

// Send headers
header("Content-Type: application/pdf");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition: attachment; filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary ");

// Blast out the PDF
$pdf->Output('php://output');

It's worth noting, my use case is a dynamic document that could change at the next download, so I never want a browser to cache it. It's also ALWAYS a download and never viewed in the browser, so the content-disposition: attachment may not apply to your use case.