在我的一个处理PDF文档的.net项目中,需要获取特定文件的页数。由于不需要对PDF本身进行任何操作,所以购买一个.net组件来完成这一工作显然很不值得。

经过几个小时的研究,我发现了一个简单的解决方法,利用正则表达是可以解决这个问题。 

在记事本中打开PDF文件,我发现文件中的每一页都有一个特定的标记:"/Type /Page" (根据PDF版本的不同,在两个词之间可能带有空格)。所以,我们只需要计算这个标记在文件里出现了多少次。 

首先,我们需要使用FileStream 打开pdf文件,然后使用StreamReader将文档内容作为字符串读取。

FileStream fs = new FileStream(@"c:\a.pdf", FileMode.Open, FileAccess.Read);
StreamReader r = new StreamReader(fs);
string pdfText = r.ReadToEnd();
一旦获取了pdf文本,我们需要做的就是使用正则表达式计算:"/Type /Page" 标记出现的次数。

Regex rx1 = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = rx1.Matches(pdfText);
MessageBox.Show("The PDF file has " + matches.Count.ToString() + " page(s).";