在用户浏览器中通过PHP / Perl显示PDF文件

我想显示我的用户PDF文件。 我之所以用cgi来显示pdf,是因为我想跟踪pdf的点击次数,并隐藏了保存的pdf的真实位置。

我一直在互联网上search,只发现如何显示保存对话框的用户和创build一个pdf,而不是显示给用户的文件。

我想要的是用户显示我的PDF文件, 而不是创build或下载 PDF文件。 这是我从官方的PHP文档中得到的:

<?php header('Content-type: application/pdf'); readfile('the.pdf'); ?> 

另外我的谷歌search结果的Perl代码:

 open(PDF, "the.pdf") or die "could not open PDF [$!]"; binmode PDF; my $output = do { local $/; <PDF> }; close (PDF); print "Content-Type: application/pdf\n"; print "Content-Length: " .length($output) . "\n\n"; print $output 

如果你用ruby做的话,请对我说。 但是我不确定我的服务器是否支持rails。

对不起,如果我的代码离显示pdf的方法太远了,因为我对pdf处理以及如何实现这个问题一无所知。

让我们假设用户有Adobe Reader插件。 那么,如何解决我的问题?

编辑 :我想显示纯文本的PDF文件。 我的主要目的:跟踪我的PDF文件,并使用一些奇特的url。

编辑 :这是我的主要的PHP代码:

 <?php $file='/files/the.pdf'; header('Content-type: application/pdf'); header('Content-Disposition: inline; filename="the.pdf"'); @readfile($file); ?> 

编辑 :现在代码正在工作。 但加载进度条(在Adobe Reader X插件上)不显示。 为什么? 任何人都可以帮助我? 这是我的主要代码:

 <?php $file='./files/the.pdf'; header('Content-type: application/pdf'); header('Content-Disposition: inline; filename="the.pdf"'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($file)); @readfile($file); ?> 

编辑 :我所有的问题解决了。 这是最后的代码:

 <?php $file = './path/to/the.pdf'; $filename = 'Custom file name for the.pdf'; /* Note: Always use .pdf at the end. */ 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在浏览器中显示,而不是强制下载。 如果是这种情况,请尝试使用inline值设置Content-Disposition标题。

另外请记住,这也将受到浏览器设置的影响 – 一些浏览器可能被configuration为始终下载PDF文件或在不同的应用程序中打开它们(例如Adobe Reader)

  $url ="https://yourFile.pdf"; $content = file_get_contents($url); header('Content-Type: application/pdf'); header('Content-Length: ' . strlen($content)); header('Content-Disposition: inline; filename="YourFileName.pdf"'); header('Cache-Control: private, max-age=0, must-revalidate'); header('Pragma: public'); ini_set('zlib.output_compression','0'); die($content); 

testing和工作正常。 如果您想要下载文件,请replace

  Content-Disposition: inline 

  Content-Disposition: attachment 

您可以修改PDF呈现器(例如xpdf或evince)以将其呈现为服务器上的graphics图像,然后将图像传递给用户。 这就是Google 快速查看 PDF文件的方式,它们在本地渲染,然后将图像传送给用户。 没有下载的PDF文件,源代码相当好模糊。 🙂

有一个PDF显示而不是下载的最安全的方式似乎是embedded它使用一个objectiframe元素。 还有第三方解决scheme,如谷歌的PDF阅读器。

请参阅以HTML格式embeddedPDF的最佳方式以获得概述。

还有一个基于Java的浏览器内PDF阅读器DoPDF。 我不能说它的质量,但看起来很有趣。

您也可以使用http://www.fpdf.org上提供的fpdf类。; 它提供了输出到文件和在浏览器上显示的选项。