2011-01-14 14 views
5

Necesito imprimir "Etiquetas de ruedas" de python. Las etiquetas de rueda tendrán imágenes, líneas y texto.Impresión de gráficos en Python

El tutorial de Python tiene dos párrafos sobre la creación de archivos PostScript con la imagen lib. Después de leerlo, todavía no sé cómo presentar los datos. Esperaba que alguien pudiera tener muestras de cómo diseñar las imágenes, el texto y las líneas.

Gracias por cualquier ayuda.

Respuesta

3

Ver http://effbot.org/imagingbook/psdraw.htm

Tenga en cuenta que:

  1. el módulo PSDraw no parece haberse mantenido de forma activa desde el año 2005; Supongo que la mayor parte del esfuerzo se redirigió para apoyar el formato PDF en su lugar. Puede ser más feliz usando pypdf;

  2. Cuenta con comentarios como '# FIXME: incompleta' y 'aún no implementado' en la fuente

  3. no parece tener ningún método para configurar el tamaño de página - el cual por lo que recuerdo significa que por defecto a A4 (8,26 x 11,69 pulgadas)

  4. todas las medidas están en puntos, a 72 puntos por pulgada.

Usted tendrá que hacer algo como:

import Image 
import PSDraw 

# fns for measurement conversion  
PTS = lambda x: 1.00 * x # points 
INS = lambda x: 72.00 * x # inches-to-points 
CMS = lambda x: 28.35 * x # centimeters-to-points 

outputFile = 'myfilename.ps' 
outputFileTitle = 'Wheel Tag 36147' 

myf = open(outputFile,'w') 
ps = PSDraw.PSDraw(myf) 
ps.begin_document(outputFileTitle) 

ps es ahora un objeto PSDraw que escribir PostScript en el archivo especificado, y la cabecera del documento ha sido escrito - ya está listo para comenzar dibujo cosas.

Para añadir una imagen:

im = Image.open("myimage.jpg") 
box = (  # bounding-box for positioning on page 
    INS(1), # left 
    INS(1), # top 
    INS(3), # right 
    INS(3)  # bottom 
) 
dpi = 300  # desired on-page resolution 
ps.image(box, im, dpi) 

para añadir texto:

ps.setfont("Helvetica", PTS(12)) # PostScript fonts only - 
            # must be one which your printer has available 
loc = (  # where to put the text? 
    INS(1), # horizontal value - I do not know whether it is left- or middle-aligned 
    INS(3.25) # vertical value - I do not know whether it is top- or bottom-aligned 
) 
ps.text(loc, "Here is some text") 

Para añadir una línea:

lineFrom = (INS(4), INS(1)) 
lineTo = (INS(4), INS(9)) 
ps.line(lineFrom, lineTo) 

... y yo aún no hay opciones para cambiar el peso de la brazada

Cuando haya terminado, hay que cerrar el archivo fuera como:

ps.end_document() 
myf.close() 

Editar: que estaba haciendo un poco de lectura sobre la configuración de grosores de trazo, y me encontré con un módulo diferente, psfile : http://seehuhn.de/pages/psfile#sec:2.0.0 El módulo en sí parece bastante minimalista, está escribiendo una gran cantidad de postdata sin formato, pero debería darle una mejor idea de lo que está sucediendo detrás de escena.

1

Recomendaría la biblioteca de código abierto Reportlab para este tipo de tarea.

Es muy simple de utilizar y las salidas directamente al formato PDF.

Un ejemplo muy simple de la documentación oficial:

from reportlab.pdfgen import canvas 
def hello(c): 
    c.drawString(100,100,"Hello World") 
c = canvas.Canvas("hello.pdf") 
hello(c) 
c.showPage() 
c.save() 

Mientras se instala PIL, también es muy fácil de añadir imágenes a su página:

canvas.drawImage(self, image, x,y, width=None,height=None,mask=None) 

donde "imagen" es un objeto de imagen PIL o el nombre de archivo de la imagen que desea utilizar.

Un montón de ejemplos en el documentation también.

Cuestiones relacionadas