Necesito determinar el número de páginas en un archivo PDF especificado usando el código C# (.NET 2.0). El archivo PDF se leerá desde el sistema de archivos, y no desde una URL. ¿Alguien tiene alguna sugerencia sobre cómo se podría hacer esto? Nota: Adobe Acrobat Reader está instalado en la PC donde se realizará esta verificación.Determine el número de páginas en un archivo PDF
Respuesta
Necesitará una API en PDF para C#. iTextSharp es una API posible, aunque pueden existir mejores.
iTextSharp Ejemplo
Debe instalar iTextSharp.dll como referencia. Descargue iTextsharp de SourceForge.net Este es un programa de trabajo completo que utiliza una aplicación de consola.
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();
}
}
}
éste debería ser mejor =)
Hice una pequeña prueba con PDFSharf, ITextSharp, Docotis.PDF y EO.PDF, y solo para obtener el conteo de páginas, PDF Sharp fue el más rápido. – Guillaume
Pero PDF-Sharp no puede leer [iRefStream] (http://www.pdfsharp.net/wiki/IRef_Streams.ashx) – Guillaume
Para ampliar el comentario de Guillaume, algunos documentos PDF creados con Acrobat 6 y posteriores no se pueden leer con PDFSharp . Tenía la esperanza de utilizar PDFSharp, ya que lo estamos usando en otra parte de nuestra aplicación, pero descubrí que no lee de manera confiable todos los documentos en PDF. Terminé usando la respuesta aceptada y parece manejar todos los documentos muy bien. – SkipHarris
he utilizado para este pdflib.
p = new pdflib();
/* Open the input PDF */
indoc = p.open_pdi_document("myTestFile.pdf", "");
pageCount = (int) p.pcos_get_number(indoc, "length:pages");
Tengo mucho éxito con los productos CeTe Dynamic PDF. No son gratis, pero están bien documentados. Hicieron el trabajo por mí.
encontraron la manera en http://www.dotnetspider.com/resources/21866-Count-pages-PDF-file.aspx esto no requiere la compra de una biblioteca pdf
Rachael, finalmente revisó esta pregunta y revisó su enlace. ¡Gracias, uno para probar la próxima vez que surja este problema! +1 – MagicAndi
Esto debería hacer el truco:
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 Rachael's answer y this one también.
He utilizado el código anterior que resuelve el problema usando regex y funciona, pero es bastante lento. Lee el archivo completo para determinar el número de páginas.
Lo usé en una aplicación web y las páginas a veces enumeran 20 o 30 PDF a la vez y en esa circunstancia el tiempo de carga de la página pasó de unos segundos a casi un minuto debido al método de recuento de páginas.
No sé si las bibliotecas de terceros son mucho mejores, espero que lo sean y he utilizado pdflib en otros escenarios con éxito.
Ryan, he utilizado la biblioteca iTextSharp para resolver este problema, y encontré que proporciona un rendimiento decente. También puede consultar PDFSharp. En cuanto a los problemas con la solución de expresiones regulares, es otro ejemplo de expresiones regulares que causan más problemas de los que resuelven: http://www.codinghorror.com/blog/archives/001016.html – MagicAndi
De acuerdo. No vi su nota hasta después, pero reemplacé la función RegEx por una con iTextSharp como recomienda y hubo una gran mejora en el rendimiento. Según mis pruebas, el método iTextSharp es al menos 5 veces más rápido que el método RegEx y generalmente mucho más que eso, al menos cuando estoy calculando varios archivos PDF al mismo tiempo (es decir, cargando una página con múltiples Archivos PDF listados). –
Si el rendimiento es un problema, es posible que desee probar una utilidad de línea de comandos como PDFLeo (http://www.rockpdf.com). Un comando como "pdfleo -i myfile.pdf | grep" Número de páginas "toma menos de 1 segundo en el archivo de 300 páginas. – cuteCAT
Docotic.Pdf library se pueden utilizar para realizar la tarea.
Aquí es código de ejemplo:
PdfDocument document = new PdfDocument();
document.Open("file.pdf");
int pageCount = document.PageCount;
La biblioteca se analiza lo menos posible lo que el rendimiento debe ser aceptable.
Descargo de responsabilidad: trabajo para Bit Miracle.
No quiero ser sarcástico, pero debe verificar su reclamo de rendimiento. Probé en un PDF de 250 páginas, 216Mo, y fue casi 20 veces más lento que PDF-Sharp, solo para obtener el recuento de páginas, usando su ejemplo – Guillaume
una línea:
int pdfPageCount = System.IO.File.ReadAllText("example.pdf").Split(new string[] { "/Type /Page" }, StringSplitOptions.None).Count()-2;
Recomendado: ITEXTSHARP
- 1. número de páginas en un archivo pdf
- 2. Determinar el número de páginas en un archivo PDF
- 3. Número de páginas de Pdf con Java
- 4. ¿Cómo puedo obtener el número de páginas en un archivo PDF en Perl?
- 5. Recortar páginas de un archivo .pdf
- 6. Determine si un byte [] es un archivo pdf
- 7. ¿Cómo crear un archivo PDF de varias páginas con Gnuplot?
- 8. ¿Cómo puedo dividir un archivo PDF en páginas (preferiblemente C#)
- 9. páginas de Split A4 en un archivo PDF a páginas A5
- 10. Ghostscript: PDF total de páginas
- 11. Determine el número de filas en un rango
- 12. Ruby: determine si un número es un número primo
- 13. ImageMagick o GhostScript: convierta un TIFF de varias páginas en un PDF de varias páginas
- 14. Limite el número de páginas en will_paginate
- 15. Determine si el primer carácter de NSString es un número
- 16. Determine el tipo de archivo en Ruby
- 17. Determine el número de líneas dentro de un archivo de texto
- 18. ¿Cómo obtener el número total de páginas del pdf existente en ruby on rails?
- 19. Cómo imprimir gráficos R en varias páginas de un PDF y varios PDF?
- 20. ¿Cómo obtener el número de páginas en un documento de Word en Linux?
- 21. ¿Busca programáticamente texto en un archivo PDF y dice el número de página?
- 22. Determine el tipo de archivo con C#
- 23. Número de páginas en un documento de Word en java
- 24. Determine la precisión decimal de un número de entrada
- 25. Determine el nombre de un archivo para descargar
- 26. Cómo agregar el número de página en el pie de página en PDF por Itextsharp
- 27. Estructura de un archivo PDF?
- 28. Mercurial: determine dónde se eliminó el archivo.
- 29. Convertir páginas de archivos PDF en imágenes con itextsharp
- 30. Determine el archivo que está utilizando FileHandler
por lo que están diciendo "esto es lo que recomiendo, pero en realidad hay betetr maneras de hacer esto"? –
Gracias, Darkdog, después de mirar PDFLib e iTextSharp, terminé usando iTextSharp: PdfReader pdfReader = new PdfReader (pdfFilePath); int numberOfPages = pdfReader.NumberOfPages; Espero que esto ayude a alguien a enfrentar el mismo problema. – MagicAndi
Gracias a MagicAndi por publicar el código. Muy útil – lidermin