FPDI易于使用和安装(只需提取文件并调用PHP脚本即可),但FPDI不支持许多压缩技术。然后返回一个错误:
FPDF错误:此文档(test_1.pdf)可能使用了FPDI附带的免费解析器不支持的压缩技术。
这将在流中打开PDF文件,并搜索某种类型的字符串,包含pagecount或类似的内容。
$f = "test1.pdf";
$stream = fopen($f, "r");
$content = fread ($stream, filesize($f));
if(!$stream || !$content)
return 0;
$count = 0;
// Regular Expressions found by Googling (all linked to SO answers):
$regex = "/\/Count\s+(\d+)/";
$regex2 = "/\/Page\W*(\d+)/";
$regex3 = "/\/N\s+(\d+)/";
if(preg_match_all($regex, $content, $matches))
$count = max($matches);
return $count;
/\/count\s+(\d+)/
(查找/count
)不起作用,因为只有少数文档内部有参数/count
,所以大多数情况下它不会返回任何内容。来源。/\/page\w*(\d+)/
(查找/page
)没有得到页数,主要包含一些其他数据。来源。/\/n\s+(\d+)/
(查找/n
)也不起作用,因为文档可以包含/n
的多个值;大多数(如果不是全部)不包含PageCount。来源。它可以在Linux和Windows下下载。您下载一个压缩文件,其中包含几个与PDF相关的小程序。在某个地方提取出来。
其中一个文件是pdfinfo(或用于Windows的pdfinfo.exe)。通过在PDF文档上运行数据返回的一个示例:
Title: test1.pdf
Author: John Smith
Creator: PScript5.dll Version 5.2.2
Producer: Acrobat Distiller 9.2.0 (Windows)
CreationDate: 01/09/13 19:46:57
ModDate: 01/09/13 19:46:57
Tagged: yes
Form: none
Pages: 13 <-- This is what we need
Encrypted: no
Page size: 2384 x 3370 pts (A0)
File size: 17569259 bytes
Optimized: yes
PDF version: 1.6
我还没有看到一个PDF文档,它返回了一个错误的pagecount(还没有)。它也非常快,即使是200+MB的大文档,响应时间也只有几秒钟或更少。
php prettyprint-override">// Make a function for convenience
function getPDFPages($document)
{
$cmd = "/path/to/pdfinfo"; // Linux
$cmd = "C:\\path\\to\\pdfinfo.exe"; // Windows
// Parse entire output
// Surround with double quotes if file name has spaces
exec("$cmd \"$document\"", $output);
// Iterate through lines
$pagecount = 0;
foreach($output as $op)
{
// Extract the number
if(preg_match("/Pages:\s*(\d+)/i", $op, $matches) === 1)
{
$pagecount = intval($matches[1]);
break;
}
}
return $pagecount;
}
// Use the function
echo getPDFPages("test 1.pdf"); // Output: 13
当然,这个命令行工具可以用在其他语言中,这些语言可以解析外部程序的输出,但我在PHP中使用它。
我知道它不是纯PHP,但外部程序在PDF处理方面要好得多(如问题所示)。
我希望这能帮助人们,因为我花了很多时间试图找到解决这个问题的方法,我看到了很多关于PDF pagecount的问题,但我没有找到我想要的答案。这就是为什么我提出这个问题,并自己回答。
我使用自动化对Word文档进行了大量更改,然后运行了一个VBA宏,其中包括检查文档是否超过一定的页数。 我使用获取页数,但此方法返回的结果不正确。我想这是因为Word还没有更新文档的分页以反映我所做的更改。 也存在同样的问题。
我在用iText7做游戏。净c#。我正在尝试在内存中创建一个多页PDF文档(n页数),其中源PDF文档只包含一页。 我可以用一页创建一个新文档,但无法根据需要创建额外的页面。我试过了 但我得到了一个ArgumentOutOfRange例外。。。索引超出范围。。。等 我试图关闭destPdfDoc,然后重新打开它,认为第二页直到我关闭它才被写入。但是当第二次打开destPdfDoc时,它没有页面。我
想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 我有一个PDF文档,有两页。我需要阅读此文档的第一页,并使用阅读内容创建一个新的PDF文档。我将如何使用iText执行此操作?到目前为止,我无法尝试任何事情,因为我真的不知道如何开始。最好的方法是什么?
我有一些文件,我已经用施乐扫描仪数字化成PDF文件。使用Java,我试图从中提取RGB像素数据,用于图像识别应用程序。从零开始开发这个功能有点超出我的水平,所以我依赖第三方库来进行PDF处理。 到目前为止,我已经尝试了两个不同的库;PdfBox和PdfClown。 使用PdfBox,我正在尝试使用方法来获得一个。使用PdfClown我正在尝试使用来自类的方法来获得一个。在这两种情况下返回的图像都是
我尝试了不同的方法,如iframe、object,在网页上作为预览查看/显示文档。iFrame和google文档仅适用于公共可用的文档。如何显示/预览本地主机文件夹中存储的文档。
问题内容: 如何使用PDFBox从PDF文档中读取特定页面(具有页码)? 问题答案: 这应该工作: 如本教程的“ 书签”部分中所示 更新2015年,版本2.0.0快照 似乎已将其删除并放回(?)。 getPage 在2.0.0 javadoc中。要使用它: 该 getAllPages 方法已更名 GETPAGES