Foros del Web » Programando para Internet » ASPX (.net) »

iTextSharp: combinar dos PDF y desactivar formularios

Estas en el tema de iTextSharp: combinar dos PDF y desactivar formularios en el foro de ASPX (.net) en Foros del Web. Buenas. Estoy utilizando iTextSharp (vers. 5.0.2.0) para combinar dos PDF con formularios. Después de rellenar los campos de cada formulario pretendo desactivarlos mediante FormFlattening. Cuando ...
  #1 (permalink)  
Antiguo 15/02/2011, 02:45
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
iTextSharp: combinar dos PDF y desactivar formularios

Buenas. Estoy utilizando iTextSharp (vers. 5.0.2.0) para combinar dos PDF con formularios. Después de rellenar los campos de cada formulario pretendo desactivarlos mediante FormFlattening. Cuando lo hago de manera individual funciona pero si los combino no. Os dejo el código:

Código vb:
Ver original
  1. Dim ms As New System.IO.MemoryStream()
  2. Dim mod01 As New PdfReader(Server.MapPath("~/Mod01.pdf"))
  3. Dim stp01 As New PdfStamper(mod01, ms)
  4. With stp01.AcroFields
  5.      .SetField("txtCodSolicitud", String.Format("{0:yyyyMMdd}{1}", Now, Session.SessionID.ToUpper))
  6.      .......
  7. End With
  8.         stp01.FormFlattening = True
  9.  
  10. Dim mod02 As New PdfReader(Server.MapPath("~/Mod02.pdf"))
  11. Dim stp02 As New PdfStamper(mod02, ms)
  12. With stp02.AcroFields
  13.      .SetField("txtNum", Me.ddlNum.SelectedValue)
  14.      ........
  15. End With
  16. stp02.FormFlattening = True
  17.  
  18. Dim doc As New Document()
  19. Dim copia As New PdfCopy(doc, ms)
  20. doc.SetPageSize(PageSize.A4)
  21. doc.Open()
  22. copia.Open()
  23. Dim page As PdfImportedPage
  24. Dim n As Integer
  25. For n = 1 To mod01.NumberOfPages
  26.      page = copia.GetImportedPage(mod01, n)
  27.      copia.AddPage(page)
  28. Next
  29.  
  30. For n = 1 To mod02.NumberOfPages
  31.      page = copia.GetImportedPage(mod02, n)
  32.      copia.AddPage(page)
  33. Next
  34.  
  35. copia.Close()
  36. doc.Close()
  37.  
  38. 'Se envía al cliente
  39. Response.ClearContent()
  40. Response.ClearHeaders()
  41. Response.ContentType = "application/pdf"
  42. Response.AddHeader("Content-Disposition", "attachment;filename=Combinado.pdf")
  43. Response.BinaryWrite(ms.ToArray())
  44. Response.End()

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 15/02/2011, 05:46
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
[SOLUCIONADO]: iTextSharp: combinar dos PDF y desactivar formularios

Hola. Más o menos ya lo tengo solucionado. En lugar de almacenar los dos formularios en MemoryStream los guardo en dos archivos temporales. Con esto se consigue que se aplique FormFlattening correctamente. Lógicamente hay que tener permisos de escritura para almacenar los temporales.

Luego, combino los dos documentos en el definitivo ahora sí con MemoryStream, lo envío y, finalmente, elimino los temporales.

Código vb:
Ver original
  1. Dim stp01 As New PdfStamper(mod01, new FileStream(tempMod01))
  2. Dim stp02 As New PdfStamper(mod02, new FileStream(tempMod02))
  3.  
  4. ..........
  5.  
  6. stp01.FormFlattening = True
  7. stp01.Close()
  8. mod01.Close()
  9.  
  10. ..........
  11. stp02.FormFlattening = True
  12. stp02.Close()
  13. mod02.Close()
  14.  
  15. ......
  16. mod01 = New PdfReader(tempMod01)
  17. For n = 1 To mod01.NumberOfPages
  18.      page = copia.GetImportedPage(mod01, n)
  19.      copia.AddPage(page)
  20. Next
  21.  
  22. ....
  23.  
  24. File.Delete(tempMod01)
  25. File.Delete(tempMod02)

Un saludo
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!

Etiquetas: itextsharp, pdf+formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:08.