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

我想显示我的用户 PDF 文件。我使用 CGI 显示 PDF 的原因是我想跟踪 PDF 的点击,并隐藏保存 PDF 的真实位置。

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

我想要的是向用户展示我的 PDF 文件,而不是创建或下载 PDF 文件。

下面是我从 PHP 官方文档中得到的信息:

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

还有我的 google 搜索结果 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 处理和如何实现这个问题。

假设用户有 AdobeReader 插件,那么,如何解决这个问题呢?

编辑 : 我想显示简单的 PDF 文件。我的主要目的: 跟踪我的 pdf 文件和使用一些奇特的网址。

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

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

编辑 : 现在代码正在工作。但是加载进度条(在 AdobeReaderX 插件上)没有显示出来。为什么?有人能帮我吗?这是我的主要代码:

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

谢谢! :)

235608 次浏览

我假设您希望 PDF 在浏览器中显示,而不是强制下载。如果是这种情况,请尝试将 Content-Disposition头的值设置为 inline

还要记住,这也会受到浏览器设置的影响-一些浏览器可能被配置为 一直都是下载 PDF 文件或在不同的应用程序中打开它们(例如 Adobe Reader)

您可以修改 PDF 呈现程序(比如 xpdf 或 evice) ,将其呈现为服务器上的图形图像,然后将图像传递给用户。这就是谷歌的 快速浏览 PDF 文件的工作原理,他们在本地渲染它,然后将图像传递给用户。没有下载的 PDF 文件,而且源代码非常模糊。:)

使用 PDF 显示器而不是下载的最安全的方法似乎是使用 objectiframe元素嵌入它。还有一些第三方解决方案,比如 Google 的 PDF 浏览器。

有关概述,请参见 HTML 中嵌入 PDF 的最佳方法

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

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

    $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);

经过测试,工作正常。如果您想要下载该文件,请替换

    Content-Disposition: inline

    Content-Disposition: attachment

有一个使用 嵌入标签的简单解决方案:

<span class="fileShow">
<a href="aa.pdf" onclick="event.stopPropagation();" target="_blank">
<embed style="width:450px; height:300px; max-width:450px; max-height:300px" src="aa.pdf">
</a>
</span>