Cómo: crear archivos .doc usando plantillas con django / python

Estoy escribiendo una aplicación django y hay algo que no sé cómo hacer. Supongamos que tiene una base de datos con usuarios y varios archivos .doc que le gustaría enviar a esos usuarios (cartas postales, no electrónicamente). Me pregunto si hay una manera de crear automáticamente esas letras a partir de plantillas utilizando mi base de datos de usuarios para completar algunos marcadores. (es decir, nombre, dirección, etc.)

He escuchado hablar de la biblioteca de pitones “pod“, pero nunca la he usado. La documentación parece indicar el uso de plantillas de openoffice, pero las mías están en formato MS Word. Dado que a menudo son actualizadas por personas que solo usan MS Office, estoy atascado.

Cualquier ayuda sería apreciada.

J.

Hay muchas maneras diferentes de hacer esto, dependiendo del contexto. Aquí hay algunas ideas, clasificadas en orden decreciente de dificultad.

  • Microsoft Word incluye una instalación para esto, llamada Combinar correspondencia . Puede controlar Word desde Python usando ganchos COM, instalando pywin32 . Esto haría exactamente lo mismo que invocar a Combinar correspondencia al abrir Microsoft Word. Esto debería hacerse en una computadora con Windows con Office instalado, probablemente no en su servidor. Consulte http://bytes.com/topic/python/answers/165364-ms-word-mail-merge-automation , o Google “python mail merge”.

  • OpenOffice usa Python como un lenguaje de macros (creo) y expone una API usando Python-UNO . Podría hacer que OpenOffice convierta los archivos a su formato y luego use el pod para realizar la combinación de correspondencia.

  • Podría decirle a sus usuarios que le den datos en un formato mejor, como las plantillas de OpenOffice.

  • Puede exportar los datos de los usuarios de Django, dárselos a las personas que escriben las plantillas y pedirles que realicen su propia combinación de correspondencia.

Lo que elijas, esto no será fácil.

Usar mailmerge es fácil y puede modificar la plantilla desde un documento de Word.

http://pbpython.com/python-word-template.html

También puede incorporar la combinación de correspondencia con una vista. Aquí hay un ejemplo donde my_template1 es mi plantilla de documento de Word y hay campos llamados nombre y título en ella.

 def TestDocument2(request): template = os.path.join(os.path.dirname(__file__), 'templates/my_template1.docx') document = MailMerge(template) document.merge(name='testcoy', title = 'My title', ) f = io.BytesIO() document.write(f) length = f.tell() f.seek(0) response = HttpResponse( f.getvalue(), content_type='application/vnd.openxmlformats- officedocument.wordprocessingml.document' ) response['Content-Disposition'] = 'attachment; filename=example.docx' response['Content-Length'] = length return response