我在AIR应用中使用xpdf将PDF动态转换为PNG。在转换之前,我想获取页数并使用xdf的pdfinfo实用程序打印到stdout
,然后解析该字符串以获取页数。
我的第一个解决方案:按换行符拆分字符串,测试结果数组中的“Pages:”字符串等。
我的解决方案有效,但感觉笨重而脆弱。我想要替换所有的双空格,在“:”上进行拆分并构建一个哈希表 - 但是字符串中有冒号的时间戳会搞砸。
有更好或更聪明的方法吗?
protected function processPDFinfo(data:String):void
{
var pageCount:Number = 0;
var tmp:Array = data.split("\n");
for (var i:int = 0; i < tmp.length; i++){
var tmpStr:String = tmp[i];
if (tmpStr.indexOf("Pages:") != -1){
var tmpSub:Array = tmpStr.split(":");
if (tmpSub.length){
pageCount = Number(tmpSub[tmpSub.length - 1]);
}
break;
}
}
trace("pageCount", pageCount);
}
Title: Developing Native Extensions
Subject: Adobe Flash Platform
Author: Adobe Systems Incorporated
Creator: FrameMaker 8.0
Producer: Acrobat Distiller Server 8.1.0
CreationDate: Mon Dec 7 05:45:39 2015
ModDate: Mon Dec 7 05:45:39 2015
Tagged: yes
Form: none
Pages: 140
Encrypted: no
Page size: 612 x 783 pts (rotated 0 degrees)
File size: 2505564 bytes
Optimized: yes
PDF version: 1.4
答案 0 :(得分:1)
例如使用regular expressions,例如:
/Pages:\s*(\d+)/g
第一个(也是唯一一个)捕获组是您要查找的数字字符串。
var pattern:RegExp = /Pages:\s*(\d+)/g;
var pageCount:int = parseInt(patern.exec(data)[1]);
我理解大约2%(/ Pages:/ g)。它正在查找字符串文字
Pages:
,然后查找spaces wildcard
和escaping d+
的内容
我知道,正则表达式很难。如果您的IDE支持它们,那么真正有助于创建它们。还有像regexr这样的在线工具(我第一次在这里使用版本2,它甚至比版本1更好,非常好!)一般来说,你希望有一个工具可以提供即时视觉反馈< / strong>匹配的内容。
下面是您的文字和我的模式在regexr中的屏幕截图。
您可以将鼠标悬停在所有内容上并获取各种信息。 左侧的侧栏是关于正则表达式的完整文档。
可选的 explain 标签会逐步完成给定的模式。
\s*
是任意数量的空白字符,\d+
至少是一个数字字符。
并返回一个数组??
这是故事的As3部分。使用模式创建RegExp
对象后,您可以使用exec()
在某些String
上执行该对象。 (不确定为什么他们选择了方法名称的延迟缩写)
返回值有点时髦:
返回
对象 - 如果没有匹配,
null
;否则,具有以下属性的对象:
- 一个数组,其中元素0包含完整匹配的子字符串,数组的其他元素(1到n)包含与正则表达式中的括号组匹配的子字符串
- 中匹配子字符串的字符位置
index
- 字符串input
- 字符串(str)
您必须查看exec()
的文档才能真正理解这一点。它是一种JS风格,将一堆变量保存在一个通用对象中,该对象也充当数组。
这是我的示例代码中的[1]
来自。