Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式的PDF页面计数_Regex_Pdf - Fatal编程技术网

Regex 使用正则表达式的PDF页面计数

Regex 使用正则表达式的PDF页面计数,regex,pdf,Regex,Pdf,我使用正则表达式计算pdf的页面数。下面是我使用的代码 Regex regex = new Regex(@"/Type\s*/Page[^s]"); MatchCollection matches = regex.Matches(sr.ReadToEnd()); return matches.Count; 它适用于1.6以下的版本,但不适用于1.6版本的pdf文件。如果pdf版本为1.6,则返回0页 在您的情况下,您很可能需要使用1.6文档,该文档利用了当时引入的压缩对象流的功能。因为在这样的

我使用正则表达式计算pdf的页面数。下面是我使用的代码

Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;

它适用于1.6以下的版本,但不适用于1.6版本的pdf文件。如果pdf版本为1.6,则返回0页

在您的情况下,您很可能需要使用1.6文档,该文档利用了当时引入的压缩对象流的功能。因为在这样的文档中,您搜索的信息是压缩的,所以正则表达式找不到它

Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
有一些工具允许您在搜索文件之前解压缩文件中的此类流。但是,在查找它们之前,请注意,您的代码的结果无论如何都不可信

Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
  • 匹配项可能多于页面,因为文件中可能存在旧的、未使用的页面对象或甚至其他错误的正片
  • 匹配项可能少于页面,因为PDF允许以其他方式写入这些类型条目

对于1.6以下的版本,它可以正常工作-有许多1.4之前的文档会得到错误的结果,还有许多1.6+之前的文档会得到非0的结果。永远不要这样做-使用正则表达式和PDF来计算任何东西都是非常危险的。感谢您提供的信息。是的,我会改变页面计数的方法。如果出现这种情况,则不可靠。pdf是一种复杂的格式,如果没有专门为pdf支持而设计的工具或库,则不应尝试使用。iTextSharp是唯一可用于pdf的Dll吗?或者是否有其他可用的Dll?也有其他Dll,它们具有不同的优缺点,可在不同的许可证下使用。但是,由于我的主要环境是java,我不知道具体有哪些。