2011-01-14 85 views
5

我需要从python打印“车轮标签”。车轮标签将具有图像,线条和文字。在Python中打印图形

Python教程有两个关于使用图像库创建postscript文件的段落。读完之后,我仍然不知道如何布置数据。我希望有人可能有如何布置图像,文字和线条的样本?

感谢您的任何帮助。

回答

3

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

需要注意的是:

  1. 的PSDraw模块不会出现已自2005年以来一直积极维护;我猜想大部分的努力都被重定向到支持PDF格式。你可能会更高兴地使用pypdf来代替;

  2. 它像'#FIXME:不完整的意见和源“尚未实现”

  3. 它不会出现有设置页面大小的任何方法 - 这是我记得意味着它的默认值到A4(8.26 x 11.69英寸)

  4. 所有测量值均以点为单位,每英寸为72点。

你需要做的是这样的:现在

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是PSDraw对象,它会写的PostScript到指定的文件,该文件头已被写入 - 你准备好开始绘画的东西。

要添加图像:

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) 

要添加文本:

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") 

添加一行:

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

...我没有看到任何选项用于改变中风重量。

当你完成,你必须关闭文件关闭,如:

ps.end_document() 
myf.close() 

编辑:我在做一点阅读设置笔画粗细,和我碰到一个不同的模块跑,psfile中:http://seehuhn.de/pages/psfile#sec:2.0.0模块本身看起来非常小 - 他正在写很多原始的postscript - 但它应该让你更好地了解幕后发生的事情。

1

我会为这类任务推荐开源库Reportlab

使用和直接输出到PDF格式非常简单。从官方文档

一个很简单的例子:

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() 

只要安装PIL,它也很容易将图片添加到您的网页:

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

其中“图像”是PIL图像对象,或者您想要使用的图像的文件名。

documentation也有很多例子。