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

2022-08-30 07:07:21

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

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

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

以下是我从官方PHP文档中得到的内容:

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

还有我的谷歌搜索结果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

如果你在红宝石上做,请对我说。但我不确定我的服务器是否支持导轨。

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

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

编辑:我想显示纯PDF文件。我的主要目的:跟踪我的pdf文件并使用一些花哨的网址。

编辑:这是我的主要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);
?>

谢谢!:)


答案 1

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

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


答案 2
    $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

推荐