限制浏览器中显示的 PDF 的页数


Restrict number of pages on a PDF shown in browser

我希望能够在浏览器中输出pdf(这很好,很花哨),但限制显示的页数。即。读者可以看到他想买的东西的内容是准确的,但同时我不会免费提供文件。我可以批量编辑文件以创建新的 3-5 页 pdf 以达到我的目的,但这很麻烦,我还必须将"登录页面"pdf 上传到服务器,同时牢记产品的类别等等。

我所问的简化版本,

用户 -> 下载链接 -> pdf 打开前 5 页 ->在第 6 个 PDF 页面上添加"立即购买";

我很高兴通过第三方脚本来做到这一点。唯一需要的是用户无法访问整个pdf文档(例如,如果触发链接将被<a href="link.tld/name" id="trigger">则用户不应该能够获取完整文档的URL。

您实际上可以通过在Web服务器上添加pdf文件的另一个副本并使用php类来做到这一点tcpdf实际上,您可以通过删除剩余页面来限制页面。

require_once('tcpdf_include.php');
$pdf->deletePage(6,100);//Deletes pages from 6-100

您可以在此处阅读有关完整tcpdf

这是我对我网站上任何 pdf 处理程序的选择。

我认为

唯一可能的方法是创建另一个PDF副本,它只有前五页......然后从第 6 页开始,消息将在那里购买这本书以及如何购买以及金额等......

所以,只需创建另一个预览,如版本

再次感谢@user2768665为我的烦恼提供了最好的答案。这是我的游戏计划:

由于我在链接中命名了文件,因此我首先使用 GET 抓取产品的 WP 链接,然后将其存储在变量中,preg_replace它以擦除链接的其余部分(使用 regex),存储导致一个新的变量,假设$link2p

然后我添加对产品的调用(下载)以打开处理 php 脚本,使用 tcpdf(user2768665 的答案)删除第 5 页之后的任何内容,将带有公司徽标的页面添加为第 6 页,并在末尾添加

Click <a href="http://domain.ltd/saleProcessPage/<?php echo $link2p;?>"here</a> to download <?php echo $link2p;?> FULL PDF

或者,就我而言(因为我有一个第三方支付平台 - 你可能有相同的 - 我们首先对产品运行数据库检查(基于其名称)以在我们的付费平台中检索指向我们产品的链接,然后我们做同样的事情如上所述。

然后,我们修改原始的 pdf 名称并以不同的方式输出它;

$pdf->Output($link2p.'.pdf', 'Insert w/e random string generator.pdf');

这是一个很好的解决方案,因为它将原始pdf文件排除在任何"检查元素"用户之外,它在后端运行,嘿,随机名称si给出。

我正在考虑的其他事情:

由于我没有阅读 tcpdf 的完整文档,因此无法确定这一点,但我还没有看到任何页数统计能力(这是为文件完全自动执行此操作所必需的:即 $pdf->deletePage(6,100); becomes $pdf->deletePage(6,endofpdf); 为此,我在提出问题之前添加了我所阅读的内容:仅在 PHP 中计算 PDF 中的页数。因此,我们将其存储到$count变量中(以查看pdf有多少个文件),以便我们可以使用该$pdf->deletePage(6,$count); 同样,没有阅读 tcpdf 的完整文档,所以这可能没用。

在我睡了一会儿之后,我将对此进行完整的代码检查,并以最终形式发布示例。希望这将帮助被困在同一个地方的其他人。

再次非常感谢@user2768665和@Monts_mind_hacker对该主题的兴趣。很棒的家伙。

可以使用 FPDI 创建前 5 页的预览:

$pdf = new FPDI();
$pageCount = $pdf->setSoruceFile('your.pdf');
$pageCount = min($pageCount, 5);
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
     $tplIdx = $pdf->importPage($pageNo);
     $s = $this->getTemplatesize($tplIdx);
     $this->AddPage($s['w'] > $s['h'] ? 'L' : 'P', array($s['w'], $s['h']));
     $this->useTemplate($tplIdx);
}
$pdf->AddPage();
// add the link to the shopping cart on the last page...
$pdf->Output('5-pages.pdf', 'D');