web-dev-qa-db-fra.com

Déterminer le nombre de pages dans un fichier PDF

J'ai besoin de déterminer le nombre de pages d'un fichier PDF PDF en utilisant le code C # (.NET 2.0). Le fichier PDF sera lu à partir du système de fichiers) , et non à partir d'une URL. Quelqu'un a-t-il des conseils sur la façon de procéder? Remarque: Adobe Acrobat Reader est installé sur le PC sur lequel cette vérification sera effectuée.

50
MagicAndi

Vous aurez besoin d'une API PDF pour C #. ITextSharp est une API possible, bien qu'il puisse en exister de meilleures.

Exemple iTextSharp

Vous devez installer iTextSharp.dll comme référence. Télécharger iTextsharp depuis SourceForge.net Il s'agit d'un programme de travail complet utilisant une application console.

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();
      }
   }
}
67
darkdog

Cela devrait faire l'affaire:

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

De réponse de Rachael et celui-ci aussi.

37
Barrett

trouvé un moyen à http://www.dotnetspider.com/resources/21866-Count-pages-PDF-file.aspx cela ne nécessite pas l'achat d'une bibliothèque pdf

7
Rachael

J'ai utilisé pdflib pour cela.

    p = new pdflib();

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

Une ligne:

int pdfPageCount = System.IO.File.ReadAllText("example.pdf").Split(new string[] { "/Type /Page" }, StringSplitOptions.None).Count()-2;

Recommandé: ITEXTSHARP

3
Medo Medo

bibliothèque Docotic.Pdf peut être utilisé pour accomplir la tâche.

Voici un exemple de code:

PdfDocument document = new PdfDocument();
document.Open("file.pdf");
int pageCount = document.PageCount;

La bibliothèque analysera le moins possible, donc les performances devraient être correctes.

Avertissement: je travaille pour Bit Miracle.

2
Bobrovsky

J'ai utilisé le code ci-dessus qui résout le problème en utilisant l'expression régulière et cela fonctionne, mais c'est assez lent. Il lit le fichier entier pour déterminer le nombre de pages.

Je l'ai utilisé dans une application Web et les pages listaient parfois 20 ou 30 PDF à la fois et dans ce cas, le temps de chargement de la page passait de quelques secondes à presque une minute en raison de la méthode de comptage des pages.

Je ne sais pas si les bibliothèques tierces sont bien meilleures, j'espère qu'elles le sont et j'ai utilisé pdflib dans d'autres scénarios avec succès.

0
user264631

J'ai beaucoup de succès avec les produits CeTe Dynamic PDF. Ils ne sont pas gratuits, mais sont bien documentés. Ils ont fait le travail pour moi.

http://www.dynamicpdf.com/

0
Paul Lefebvre