Определить количество страниц в файле PDF

Asked
Viewd102506

55

Мне нужно определить количество страниц в указанном PDF-файле с помощью кода C # (.NET 2.0). Файл PDF будет считываться из файловой системы, а не из URL-адреса. Есть ли у кого-нибудь указания, как это можно сделать? Примечание. Adobe Acrobat Reader установлен на компьютере, на котором будет выполняться эта проверка.

8 ответов

78

Вам понадобится 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();
      }
   }
}
 
  • Благодарим MagicAndi за размещение кода. Очень полезно

    lidermin23 июля 2010, 21:54
  • Так вы говорите: «Вот что я рекомендую, но на самом деле есть способы сделать это лучше»?

    Mitch Wheat26 ноября 2008, 11:09
  • Спасибо, Darkdog, после просмотра PDFLib и iTextSharp я остановился на iTextSharp:

                 PdfReader pdfReader = new PdfReader(pdfFilePath);
                int numberOfPages = pdfReader.NumberOfPages;
     

    Надеюсь, это поможет кому-то, кто сталкивается с той же проблемой.

    MagicAndi17 марта 2009, 14:03
40

Это должно помочь:

 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;
    }
}
 

Из Ответ Рэйчел и этот тоже.

8

нашел способ на http: //www.dotnetspider. ru / resources / 21866-Count-pages-PDF-file.aspx для этого не требуется покупка библиотеки pdf

  • Рэйчел, наконец, рассмотрела этот вопрос и проверила вашу ссылку.Спасибо, попробуйте в следующий раз, когда возникнет эта проблема!+1

    MagicAndi20 ноября 2009, 00:34
0

Я успешно использую продукты CeTe Dynamic PDF. Они не бесплатны, но хорошо задокументированы. Они сделали всю работу за меня.

http://www.dynamicpdf.com/

4

Я использовал для этого pdflib .

     p = new pdflib();

    /* Open the input PDF */
    indoc = p.open_pdi_document("myTestFile.pdf", "");
    pageCount = (int) p.pcos_get_number(indoc, "length:pages");
 
0

Я использовал приведенный выше код, который решает проблему с помощью регулярного выражения, и он работает, но довольно медленно. Он читает весь файл, чтобы определить количество страниц.

Я использовал его в веб-приложении, и страницы иногда отображали 20 или 30 PDF-файлов за раз, и в этом случае время загрузки страницы увеличилось с пары секунд до почти минуты из-за метода подсчета страниц.

Я не знаю, намного ли лучше сторонние библиотеки, я надеюсь, что да, и я успешно использовал pdflib в других сценариях.