Определить количество страниц в файле PDF
Мне нужно определить количество страниц в указанном файле PDF с помощью кода C# (.NET 2.0). Файл PDF будет читаться из файловой системы, а не из URL. У кого-нибудь есть указания на то, как это можно сделать? Примечание. Adobe Acrobat Reader установлен на ПК, где будет выполняться эта проверка.
8 ответов
Вам понадобится PDF API для C#. iTextSharp - один из возможных API, хотя могут существовать и лучшие.
Пример iTextSharp
Вы должны установить iTextSharp.dll в качестве ссылки. Загрузите iTextsharp с SourceForge.net Это полная рабочая программа с использованием консольного приложения.
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();
}
}
}
Это должно сделать трюк:
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;
}
}
От ответа Рэйчел и этого тоже.
Нашел способ на http://www.dotnetspider.com/resources/21866-Count-pages-PDF-file.aspx это не требует покупки библиотеки PDF
Одна линия:
int pdfPageCount = System.IO.File.ReadAllText("example.pdf").Split(new string[] { "/Type /Page" }, StringSplitOptions.None).Count()-2;
Рекомендуется: ITEXTSHARP
Я использовал pdflib для этого.
p = new pdflib();
/* Open the input PDF */
indoc = p.open_pdi_document("myTestFile.pdf", "");
pageCount = (int) p.pcos_get_number(indoc, "length:pages");
Библиотека Docotic.Pdf может быть использована для выполнения этой задачи.
Вот пример кода:
PdfDocument document = new PdfDocument();
document.Open("file.pdf");
int pageCount = document.PageCount;
Библиотека будет анализировать как можно меньше, поэтому производительность должна быть в порядке.
Отказ от ответственности: я работаю на Bit Miracle.
Я использовал приведенный выше код, который решает проблему с помощью регулярных выражений, и это работает, но это довольно медленно. Он читает весь файл, чтобы определить количество страниц.
Я использовал его в веб-приложении, и страницы иногда отображали 20 или 30 PDF-файлов за раз, и в этом случае время загрузки страницы уменьшилось с пары секунд до почти минуты из-за метода подсчета страниц.
Я не знаю, намного ли лучше сторонние библиотеки, надеюсь, что они есть, и я успешно использовал pdflib в других сценариях.
Я пользуюсь успехом, используя продукты CeTe Dynamic PDF. Они не бесплатны, но хорошо документированы. Они сделали эту работу за меня.