2008-09-16 28 views

Respuesta

6

El .NET Framework no contiene la capacidad de modificar/crear archivos PDF. Necesita un componente de terceros para lograr lo que está buscando.

22

No creo que puedas. Opensource componente PDFsharp tiene esa funcionalidad, y una bonita source code sample on file combining

+5

muestras en su nuevo sitio: http://www.pdfsharp.net/wiki/PDFsharpSamples.ashx –

+0

sé que esto es viejo, pero siguieron esta respuesta y descubrieron que PDFsharp todavía no ha implementado soporte para las versiones más modernas de PDF ... es posible que deba pasar por aros para que funcione en todos los PDF. Vea esto antes de entrar: http://forum.pdfsharp.net/viewtopic.php?f=2&t=693 –

5

Como otros han dicho, no hay nada construido para realizar esa tarea. Utilice iTextSharp con este example code.

+3

Creo que alguien siempre debe notar que iTextSharp usa la licencia AGPL, que requiere que libere su código fuente junto con con la documentación del uso de iTextSharps de forma adecuada. Sin embargo, tienen licencias comerciales disponibles. ¡Ten cuidado de cómo lo usas! – Encryption

0

A pesar de que ya se ha dicho, no se puede manipular archivos PDF con el incorporado en las bibliotecas de .NET Framework. Sin embargo, puedo recomendar iTextSharp, que es un puerto .NET de Java iText. He jugado con eso, y me pareció una herramienta muy fácil de usar.

3

No creo .NET Framework contiene tales como bibliotecas. Usé iTextsharp con C# para combinar archivos pdf. Creo que iTextsharp es la manera más fácil de hacer esto. Aquí está el código que utilicé.

string[] lstFiles=new string[3]; 
    lstFiles[0][email protected]"C:/pdf/1.pdf"; 
    lstFiles[1][email protected]"C:/pdf/2.pdf"; 
    lstFiles[2][email protected]"C:/pdf/3.pdf"; 

    PdfReader reader = null; 
    Document sourceDocument = null; 
    PdfCopy pdfCopyProvider = null; 
    PdfImportedPage importedPage; 
    string [email protected]"C:/pdf/new.pdf"; 


    sourceDocument = new Document(); 
    pdfCopyProvider = new PdfCopy(sourceDocument, new System.IO.FileStream(outputPdfPath, System.IO.FileMode.Create)); 

    //Open the output file 
    sourceDocument.Open(); 

    try 
    { 
     //Loop through the files list 
     for (int f = 0; f < lstFiles.Length-1; f++) 
     { 
      int pages =get_pageCcount(lstFiles[f]); 

      reader = new PdfReader(lstFiles[f]); 
      //Add pages of current file 
      for (int i = 1; i <= pages; i++) 
      { 
       importedPage = pdfCopyProvider.GetImportedPage(reader, i); 
       pdfCopyProvider.AddPage(importedPage); 
      } 

      reader.Close(); 
     } 
     //At the end save the output file 
     sourceDocument.Close(); 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 


private int get_pageCcount(string file) 
{ 
    using (StreamReader sr = new StreamReader(File.OpenRead(file))) 
    { 
     Regex regex = new Regex(@"/Type\s*/Page[^s]"); 
     MatchCollection matches = regex.Matches(sr.ReadToEnd()); 

     return matches.Count; 
    } 
} 
+0

¿Es correcto o útil? Acepte la respuesta –

+0

¡Gracias! Último minuto cuando lo necesité. ¡es rápido también! –