显示PHP无法正确显示的pdf

时间:2014-04-02 07:27:41

标签: php pdf

我在存储服务器上有一些pdf文件,我想向用户显示它们而不向他们展示真正的文件路径,我想用PHP做这件事。

我试过这个:

$file = 'https://storage.server_test.com/agc/catalogs/catalog1.pdf';
$filename = 'catalog.pdf'; 

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');

@readfile($file);

但是pdf根本没有显示,我收到了这个错误:This PDF document might not be displayed correctly.

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您是否尝试使用html object代码嵌入它?

<object data="https://storage.server_test.com/agc/catalogs/catalog1.pdf" type="application/pdf">
    <embed src="https://storage.server_test.com/agc/catalogs/catalog1.pdf" type="application/pdf" />
</object>

或者在php中,试试这个标题:

header('Content-Disposition: attachment; filename="' . $filename . '"');

最后,如果@readfile($file)无效,请尝试:

echo @file_get_contents($file);

在本地尝试这个之后,我想我设法让它运转起来。试试这个:

<?php

$remote_pdf = 'http://www.saronicferries.gr/content/pdfFiles/sample.pdf';
$remote_file_name = end(explode('/', $remote_pdf));
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="'. $remote_file_name .'"');
header('Content-Transfer-Encoding: binary');
readfile($remote_pdf);

?>

输出:

enter image description here

我认为问题是filesize($file)失败了远程文件。删除它和header('Accept-Ranges: bytes');后,它可以正常工作。