【发布时间】:2010-09-24 03:10:41
【问题描述】:
我需要使用 C# 代码 (.NET 2.0) 确定指定 PDF 文件中的页数。 PDF 文件将从文件系统中读取,而不是从 URL 中读取。有谁知道如何做到这一点?注意:执行此检查的 PC 上已安装 Adobe Acrobat Reader。
【问题讨论】:
我需要使用 C# 代码 (.NET 2.0) 确定指定 PDF 文件中的页数。 PDF 文件将从文件系统中读取,而不是从 URL 中读取。有谁知道如何做到这一点?注意:执行此检查的 PC 上已安装 Adobe Acrobat Reader。
【问题讨论】:
您需要用于 C# 的 PDF API。 iTextSharp 是一种可能的 API,尽管可能存在更好的 API。
iTextSharp 示例
您必须安装 iTextSharp.dll 作为参考。从 SourceForge.net 下载 iTextsharp 这是一个使用控制台应用程序的完整工作程序。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using iTextSharp.text.pdf;
using iTextSharp.text.xml;
namespace GetPages_PDF
{
class Program
{
static void Main(string[] args)
{
// Right side of equation is location of YOUR pdf file
string ppath = "C:\\aworking\\Hawkins.pdf";
PdfReader pdfReader = new PdfReader(ppath);
int numberOfPages = pdfReader.NumberOfPages;
Console.WriteLine(numberOfPages);
Console.ReadLine();
}
}
}
【讨论】:
我为此使用了pdflib。
p = new pdflib();
/* Open the input PDF */
indoc = p.open_pdi_document("myTestFile.pdf", "");
pageCount = (int) p.pcos_get_number(indoc, "length:pages");
【讨论】:
我在使用 CeTe Dynamic PDF 产品方面取得了巨大成功。它们不是免费的,但有据可查。他们为我完成了这项工作。
【讨论】:
在http://www.dotnetspider.com/resources/21866-Count-pages-PDF-file.aspx 找到了一条路 这不需要购买 pdf 库
【讨论】:
这应该可以解决问题:
public int getNumberOfPdfPages(string fileName)
{
using (StreamReader sr = new StreamReader(File.OpenRead(fileName)))
{
Regex regex = new Regex(@"/Type\s*/Page[^s]");
MatchCollection matches = regex.Matches(sr.ReadToEnd());
return matches.Count;
}
}
【讨论】:
我使用了上面的代码,它使用正则表达式解决了这个问题,它可以工作,但是速度很慢。它读取整个文件以确定页数。
我在一个网络应用程序中使用它,页面有时会一次列出 20 或 30 个 PDF,在这种情况下,由于页面计数方法,页面的加载时间从几秒钟变为近一分钟。
我不知道 3rd 方库是否更好,我希望他们是,并且我在其他场景中成功使用了 pdflib。
【讨论】:
Docotic.Pdf library 可用于完成任务。
这里是示例代码:
PdfDocument document = new PdfDocument();
document.Open("file.pdf");
int pageCount = document.PageCount;
该库将尽可能少地解析,因此性能应该没问题。
免责声明:我为 Bit Miracle 工作。
【讨论】:
一行:
int pdfPageCount = System.IO.File.ReadAllText("example.pdf").Split(new string[] { "/Type /Page" }, StringSplitOptions.None).Count()-2;
推荐: ITEXTSHARP
【讨论】: