python - programas - que es un lenguaje de programacion web
¿Hay un mejor lenguaje de diseño que HTML para imprimir? (10)
¿Por impresión quiere decir una impresora? Si es así, verifique las herramientas PDF de ReportLab .
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
c = canvas.Canvas("hello.pdf")
c.drawString(9*cm, 22*cm, "Hello World!")
c.showPage()
c.save()
Estoy usando Python y Qt 4.4 y tengo que imprimir algunas páginas. Inicialmente pensé que usaría HTML con CSS para producir esas páginas. Pero HTML tiene algunas limitaciones.
Ahora la pregunta es: ¿hay algo que sea mejor que HTML, pero solo (o casi) tan fácil de usar? Además, debe ser compatible con GPL.
Editar:
kdgregory & Mark G: La limitación más obvia es que no puedo especificar los márgenes de la impresora. Hay otro problema: ¿cómo agrego los números de página?
Jeremy French: Una cosa que tengo que imprimir es una lista de todos los productos que alguien pidió que pueden extenderse en algunas páginas.
¿Qué pasa con solo usar la impresión nativa de Qt ?
Hay LaTeX. No estoy seguro si eso cae en la categoría "tan fácil de usar como html", pero no es difícil.
O si está en un mac, puede consultar enlaces de cuarzo para Python , pero obviamente no es GPL.
Objetos de formato XSL (parte de la familia de idiomas de hojas de estilo extensible (XSL) ) si necesita control total sobre los documentos impresos.
Luego, necesitará un procesador de formato de objetos, como FOP o Antenna House , para transformar el documento XSL-FO en PDF o PostScript.
Puede considerar Sphinx , un paquete que traduce los archivos reStructuredText en varios formatos de salida, incluidos HTML y LaTeX, para PDF imprimible. Está licenciado bajo BSD y ahora es la herramienta oficial de documentación de Python.
¿Has visto http://www.w3.org/TR/css3-page/ ? Los medios impresos son altamente personalizables. En mi nuevo proyecto, voy a reemplazar el generador de PDF por este.
He estado peleando con resultados impresos (o PDF) de Python durante 8 años y hasta ahora encontré los siguientes enfoques (en orden de preferencia personal):
- Usando JasperReports a través de pyJasper (escrito por mí) o JasperServer . Puede usar la herramienta de diseño WYSIWYG iReport para definir su diseño. Su código Python se pondrá en contacto con el motor Jasper basado en Java a través de HTTP y lo convertirá en un PDF (pyJasper maneja eso). Usamos eso por unos pocos miles de páginas por día.
- Use salida de texto sin formato. No puedes obtener más rápido. Usamos eso por unos cientos de páginas por día.
- Use XSLT-FO. También debe llamar a un motor de representación basado en Java como FOB. Puede dar lugar a problemas de rendimiento, pero puede mitigarse mediante un proceso de servidor Java de larga duración, el mismo enfoque que con Jasper. Usamos eso por unos cientos de páginas por día, pero escribir documentos XSLT-FO me hizo doler la cabeza. No se usa para el nuevo código.
- Genere una fuente de LaTeX y use un paquete de software de látex para procesar en PDF. Hacer que LaTeX se vea como a ti te gusta es bastante difícil. Pero mientras use los estilos LaTeX provistos, estará bien. No se usa en producción en mi tienda.
- Generación de PDF con ReportLab Toolkit . Un poco bajo nivel. Aún más bajo nivel: FPDF . Usamos FPDF-Ruby por unos cientos de páginas por día. Tomó mucho de fiddeling para obtener el diseño que queríamos.
- Genera directamente Postscript. Extraño pero casi no se puede obtener más en términos de velocidad y control. Usamos eso para generar hojas de contactos con algunos cientos de miles de jpegs por día. Toma el violín pero es divertido.
- use troff / groff para generar Postscript / PDF. Nivel muy bajo, agradable para hacer cosas simples de alto volumen. Nunca lo usé así en producción.
Para pedidos, facturas y similares, recomiendo JasperReports. La capacidad de usar un editor visual para definir el diseño es un gran ahorro de tiempo.
A mí me gustó Asciidoc . Básicamente, usted produce texto sin formato. Esto se puede mejorar mucho mediante el uso de un sistema de plantillas como plantillas de Django , o Jinja2 . Esto se parece mucho a la cosa XSLT-FO descrita por mdorseif (utiliza una cadena de herramientas para producir docbook y luego cualquier cosa que quiera), pero no tanto dolor de cabeza. Ya hay una bonita envoltura de cadena de herramientas que facilita la mayoría de las cosas.
JasperReports ya ha sido mencionado, pero lo usamos en nuestras aplicaciones Python-Qt SIN un servidor o servlet (es decir, sin necesidad de JasperServer o pyJasper).
Entonces, básicamente, en lugar del servidor / servlet, instala la Biblioteca de Informes Jasper . Luego debe crear un pequeño programa Java que use la Biblioteca de Informes Jasper para generar un informe PDF a partir de una entrada serializada, como XML. Debería haber muchos ejemplos de esto si realiza una búsqueda web, y solo necesita escribir esto una vez. Luego compila este programa Java, con todas las bibliotecas requeridas, en un archivo JAR.
En este punto, puede instalar JasperSoft Studio y crear una plantilla de informe Jasper. Luego, en Python puede usar JPype (o cualquier otra biblioteca de Python a Java) para iniciar una JVM, cargar su archivo JAR, llamar a su función Java, pasarle sus datos serializados y especificar qué plantilla de informe desea.
Todo esto no es trivial, pero es bastante sencillo. Nos gusta esta solución porque proporciona un editor de formulario de arrastrar y soltar en el Qt Designer / Creator, un diseñador de informes JasperReports de arrastrar y soltar, y la capacidad de generar un informe en PDF directamente a partir de los datos recopilados en Python. Todo esto utiliza herramientas y bibliotecas bien respaldadas, por lo que es poco probable que esta solución se desmorone en un futuro previsible.