2010-04-26 33 views
6

Estoy interesado en completar formularios PDF existentes programáticamente. Todo lo que necesito hacer es extraer información de la entrada del usuario y luego colocar el texto apropiado sobre un PDF existente en las ubicaciones apropiadas. Ya puedo hacer esto con ReportLab introduciendo la misma hoja de papel en una impresora, dos veces, pero esto realmente me molesta.Agregando texto sobre archivos PDF existentes usando reportlab

Tengo la tentación de realizar una ingeniería inversa de cada PDF existente y dibujar cada línea y carácter antes de agregar el texto introducido por el usuario, pero quería verificar si había una manera fácil de tomar un PDF existente y establecerlo como fondo para un texto adicional. Preferiría usar Python, ya que es el único idioma con el que me siento cómodo.

También me doy cuenta de que podría escanear el documento y utilizar la imagen ráster resultante como fondo, pero preferiría la precisión de los gráficos vectoriales.

Parece que ReportLab has a commercial product with this functionality, y la función específica que estoy buscando está en ella (copyPages) - pero parece demasiado caro pagar un producto de 4 cifras para una sola función simple para un uso sin fines de lucro.

Respuesta

5

Si los formularios en PDF son reales AcroForms puede usar iText para completarlos. No sé si hay otro puerto distinto de iText (java, original) y iTextSharp (C#), pero es fácil de usar y gratuito si no le importa abrir su solución de código abierto. Puede echar un vistazo a este sample code o (fragmento java):

String formFile = "/path/to/myform.pdf" 
String newFile = "/path/to/output.pdf" 
PdfReader reader = new PdfReader(formFile); 
FileOutputStream outStream = new FileOutputStream(newFile); 
PdfStamper stamper = new PdfStamper(reader, outStream); 
AcroFields fields = stamper.getAcroFields(); 

// fill the form 
fields.setField("name", "Shane"); 
fields.setField("url", "http://stackoverflow.com"); 

// PDF infos 
HashMap<String, String> infoDoc = new HashMap<String, String>(); 
infoDoc.put("Title", "your title here"); 
infoDoc.put("Author", "JRE ;)"); 
stamper.setMoreInfo(infoDoc); 

// Flatten the PDF & cleanup 
stamper.setFormFlattening(true); 
stamper.close(); 
reader.close(); 
outStream.close(); 
0

Parece que sólo tiene que colocar un PDF existente en el fondo de un PDF ReportLab que se está generando. La biblioteca PDFRW gratuita puede hacer esto fácilmente. Eche un vistazo a Example Tools page para algunos ejemplos específicos de esta técnica.

2

Si solo desea agregar algunos textos en un papel preimpreso. Puede escanearlo como un jpg, luego coloque este jpg como fondo. Consulte la página 15 en el manual del informe, simplemente llame a drawImage

Cuestiones relacionadas