2009-01-16 31 views
5

Tengo un archivo PDF salvable y rellenable que tiene una contraseña de propietario (a la que no tengo acceso). Puedo completarlo en Adobe Reader, exportar el archivo FDF, modificar el archivo FDF y luego importarlo.¿Puedo completar un PDF encriptado con iTextSharp?

Luego traté de hacerlo con iText para .NET. No puedo crear un PdfStamper desde mi PdfReader porque no proporcioné la contraseña de propietario al lector. ¿Hay alguna manera de hacer esto programáticamente o debo recrear el documento?

Incluso el uso de FdfReader requiere un PdfStamper. ¿Me estoy perdiendo algo? Cualquier cosa legal que sea, estoy bastante seguro de que podría hackear el documento, pero no puedo. Irónicamente, volver a crearlo probablemente estaría bien.

+0

apoyo de la bandera de la seguridad iText es inexistente. Simplemente verificamos si tienes o no la contraseña de propietario, y tira si no lo tienes. Recientemente se han presentado suficientes quejas en este sentido que probablemente terminaremos agregando algún soporte de seguridad a nivel de bandera en el futuro. –

Respuesta

0

A menos que alguien interviene, voy a suponer que la respuesta es "No"

terminé regenerar el PDF en una forma no cifrada.

+1

¿Por qué tienes 2 inicios de sesión? –

+2

Publiqué la pregunta desde el sitio de un cliente usando mi iPhone y tenía demasiada prisa (o pereza) para autenticarme a través de OpenID, así que simplemente publiqué de forma anónima y olvidé configurarlo en la wiki de la comunidad. – CMPalmer

3

[He encontrado esta pregunta varios meses después de que fue publicada y Quiero poner esta solución ahora para cualquier persona que viene a través de esta pregunta en una búsqueda.]

yo estaba en la misma situación: mi cliente tenía un PDF con campos rellenables que necesitaba para acceder mediante programación. Lamentablemente, el PDF estaba protegido con contraseña y no tenían la contraseña, así que me pareció que no podía trabajar con su archivo.

Lo que descubrí fue que iTextSharp versión 4.0.4 (y posterior) impone restricciones de contraseña, las versiones anteriores no lo hicieron.

Así que descargué la versión 4.0.3 y efectivamente funcionó. En mi caso, ni siquiera tuve que cambiar mi código para usar esta versión anterior.

Puede download 4.0.3 (and all other versions) at SourceForge.

+0

Ya no puede descargar versiones inferiores a 5.0.0 porque tienen problemas técnicos y legales. Y en cualquier caso, iTextSharp se mudó de SourceForge a Github: http://github.com/itext/itextsharp –

5

Esta línea pasará por alto la comprobación de cambio de contraseñas en iTextSharp:

PdfReader.unethicalreading = true; 
0

Dos cosas importantes

  1. Establecer PdfReader.unethicalreading = true a impiden BadPasswordException.
  2. Establecer añaden modo en el constructor del PdfStamper, de lo contrario los Reader Extensions Adobe firma se quiebre y Adobe Reader mostrará el siguiente mensaje: "Este documento contenía ciertos derechos para habilitar las características especiales en Adobe Reader El documento ha sido. cambiado desde que se creó y estos derechos ya no son válidos. Póngase en contacto con el autor para obtener la versión original de este documento ".

Así que todo lo que necesita hacer es esto:

PdfReader.unethicalreading = true; 
using (var pdfReader = new PdfReader("form.pdf")) 
{ 
    using (var outputStream = new FileStream("filled.pdf", FileMode.Create, FileAccess.Write)) 
    { 
     using (var stamper = new iTextSharp.text.pdf.PdfStamper(pdfReader, outputStream, '\0', true)) 
     { 
      stamper.AcroFields.Xfa.FillXfaForm("data.xml"); 
     } 
    } 
} 

Ver How to fill XFA form using iText?

Cuestiones relacionadas