2011-08-22 283 views
5

Vi un montón de soluciones aquí, pero ninguna es clara o buena respuesta.Cómo reemplazar texto en un PDF con C#?

Aquí está mi pregunta simple, esperando con una respuesta directa.

Tengo un archivo PDF (plantilla) que se crea texto que tenga algo como esto:

{NOMBRE} {lastname} {DIRECCIÓN} {PHONENUMBER}

¿Es posible tener un código C# que reemplace estas plantillas con un texto de mi elección?

Sin campos, sin otras cosas complejas.

¿Hay alguna biblioteca de código abierto que me ayude a lograr eso?

+0

¿Tiene algún código que pueda compartir con nosotros, podría hacerlo más fácil? – diceler

+0

Esta otra pregunta puede ser similar: [Editar pdf en C#] [1] [1]: http://stackoverflow.com/questions/1781208/is-there-any-api-in-c -or-net-to-edit-pdf-documents – malinois

+0

Puede usar http://sourceforge.net/projects/itextsharp/, hay tutoriales fáciles de seguir (pero un poco desactualizados): http: // asp- net-whidbey.blogspot.com/2006/04/generating-pdf-files-with-itextsharp.html – Andreas

Respuesta

2

Como se indica en similar thread esto no es realmente posible de una manera fácil. La forma más fácil es obtener un archivo DocX y usar la biblioteca DocX, que permite el intercambio de palabras fácil y luego convertir su DocX a PDF (utilizando la impresora PDF Creator, etc.).

O use pdf sharp/migradoc para crear documentos nuevos.

+0

¡Eso es interesante, porque mi plantilla está hecha con palabras y guardada en PDF! ¡así puedo guardarlo como docx y usarlo como plantilla! :-) –

+0

este funciona muy bien, pero si tengo un texto formateado, ¡entonces cambiará el formato al predeterminado! parece que hay un error y espero que lo arreglen, pero realmente gracias por publicarlo aquí :-) –

+0

Lea a través del foro, quizás ya haya una solución para esto. Recuerdo verlo allí – MadBoy

2

El 'problema' con los documentos PDF es que no son inherentemente adecuados para la edición. Especialmente aquellos sin campos. Lo mejor es dar un paso atrás y mirar su proceso y ver si hay una manera de reemplazar el texto antes de que se generara el PDF. Obviamente, es posible que no siempre tengas esta libertad.

Si puede reemplazar el texto, debe tener en cuenta que no habrá reflujo automático del texto después del texto reemplazado. Dado que estás de acuerdo con eso, hay muy pocas soluciones que te permitan reemplazar el texto.

Sé que está buscando una solución OpenSource, por lo que me siento reacio a ofrecerle una solución comercial. Ofrecemos uno llamado PDFKit.NET. Le permite extraer todo el contenido de una página como las denominadas formas (texto, imágenes, curvas, etc.). Vea el método Page.CreateShapes en la referencia de tipo. Luego puede navegar y editar programáticamente esta estructura de formas y luego volver a escribirla en un PDF.

Aquí está: http://www.tallcomponents.com/pdfkit3.aspx

Revelación: Yo soy el fundador de TallComponents, vendedor de este componente

+0

si no hay una solución de código abierto, entonces tendré que buscar una comercial :-) –

+0

De hecho, la gran mayoría de los PDF utilizan fuentes subconjunto. Eso significa que solo los glifos de fuente necesarios están incrustados. Por ejemplo, si su PDF existente no contiene la letra 'A', no puede agregarlo. A menos que, por supuesto, el archivo de fuente original aún exista en su computadora. De lo contrario, es posible que deba encontrar una fuente similar. –

3

Este hilo está muerto, sin embargo les dejo mi solución para otras almas perdidas que pueden plantearse este problema en el futuro Desafortunadamente, mi empresa no permite publicar código en línea, así que describiré la solución :).

Así que básicamente lo que tiene que hacer es utilizar PDFsharp y modificar este sample para sustituir el texto en la corriente, pero hay que tener en cuenta que el texto se puede dividir en muchas paréntesis (convertir la corriente de cadena para ver lo que el formato es) .

Luego, con un código similar al this sample, recorra páginas por página pdf por página y modifique la página actual buscando elementos PdfContent dentro de los artículos PdfReference y reemplazando texto en la transmisión de contenido.

2

Para texto simple, reemplace el uso de la biblioteca iTextSharp. El código que reemplaza una cadena por otra está debajo. Tenga en cuenta que esto reemplazará solo el texto simple y puede no funcionar en todos los casos.

//using iTextSharp.text.pdf; 
    void VerySimpleReplaceText(string OrigFile, string ResultFile, string origText, string replaceText) 
    { 
     using (PdfReader reader = new PdfReader(OrigFile)) 
     { 
      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       byte[] contentBytes = reader.GetPageContent(i); 
       string contentString = PdfEncodings.ConvertToString(contentBytes, PdfObject.TEXT_PDFDOCENCODING); 
       contentString = contentString.Replace(origText, replaceText); 
       reader.SetPageContent(i, PdfEncodings.ConvertToBytes(contentString, PdfObject.TEXT_PDFDOCENCODING)); 
      } 
      new PdfStamper(reader, new FileStream(ResultFile, FileMode.Create, FileAccess.Write)).Close(); 
     } 
    } 
+0

Lamentablemente, esta solución no funciona incluso para un PDF muy simple. Comprobé 'contentString' y no contiene ningún texto del PDF. ¿Puede ser que tenga una versión actualizada? Los archivos PDF con los que estoy trabajando son muy simples y también el texto buscado es único. –

Cuestiones relacionadas