用Python打印图形

时间:2011-01-14 15:00:36

标签: python printing postscript

我需要从python中打印“Wheel Tags”。车轮标签将包含图像,线条和文字。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

请参阅http://effbot.org/imagingbook/psdraw.htm

请注意:

  1. 自2005年以来,PSDraw模块似乎没有得到积极维护;我猜大多数努力都被重定向到支持PDF格式。你可能会更乐意使用pypdf;

  2. 它在源中有“#FIXME:不完整”和“未实现”之类的评论

  3. 它似乎没有任何设置页面大小的方法 - 我记得这意味着它默认为A4(8.26 x 11.69英寸)

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

  5. 您需要执行以下操作:

    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模块本身看起来很小 - 他正在写很多原始后记 - 但它应该让你更好地了解幕后发生的事情。

答案 1 :(得分: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)

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

documentation中还有很多例子。