ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python Pdf 添加 文字 图片 线段 曲线 矩形 椭圆 例子

2021-11-28 19:31:35  阅读:205  来源: 互联网

标签:el draw 200 python 线段 PdfShape 50 stroke Pdf


from reportlab.pdfbase.pdfmetrics import registerFont
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen.canvas import Canvas

pt = 72 / 25.4


class PdfShape:
    list_curve = []

    @classmethod
    def create_pdf(cls, name='demo1.pdf', pagesize=[210, 297], bleed=0, color={'c': 0, 'm': 0, 'y': 0, 'k': 1},
                   line_width=0.2, blank=20):
        w, h = pagesize[0] + blank * 2, pagesize[1] + blank * 2
        c = Canvas(name, trimBox=[bleed * pt, bleed * pt, (w - bleed) * pt,
                                  (h - bleed) * pt], pagesize=[w * pt, h * pt])
        c.setStrokeColorCMYK(c=color['c'], m=color['m'], y=color['y'], k=color['k'])
        c.setLineWidth(line_width)
        for i in PdfShape.list_curve:
            eval(i)
        c.save()

    @classmethod
    def create_pdf2(cls, name='demo1.pdf', pagesize=[210, 297]):

        c = Canvas(name, pagesize=pagesize)
        for i in PdfShape.list_curve:
            eval(i)
        c.save()

    @classmethod
    def add_obj(cls, text_obj):
        cls.list_curve.append(text_obj)


def draw_text(c, x=0, y=0, content='', fontname='E:/fonts/FZTCGHJW.TTF', fontsize=40, center=True, cc=0, mm=0, yy=0,
              kk=1):
    """
        添加文字
        eval("draw_text(c,105,70,'12522','E:/fonts/FZTCGHJW.TTF')")
    :return:
    """

    # 注册字体
    registerFont(TTFont('song', fontname))
    c.setFont('song', fontsize, leading=None)
    c.setFillColorCMYK(cc, mm, yy, kk)
    if center:
        c.drawCentredString(x, y, content)
    else:
        c.drawString(x, y, content)
    c.saveState()
    c.restoreState()


def draw_rect(c, x=0, y=0, width=40, height=20, stroke=1, fill=0):
    """
        画矩形
        eval("draw_rect(c,200,200,50,50)")
    :return:
    """

    c.rect(x, y, width, height, stroke=stroke, fill=fill)


def draw_ellipse(c, x1, y1, x2, y2, stroke=1, fill=0):
    """
        画椭圆
        eval("draw_ellipse(c,200,200,50,50)")
    :return:
    """

    c.ellipse(x1, y1, x2, y2, stroke=stroke, fill=fill)


def draw_line(c, x1, y1, x2, y2):
    """
        话线段
        eval("draw_line(c,200,200,50,50)")
    :return:
    """
    c.line(x1, y1, x2, y2)


def draw_polygon(c, positions, close, stroke=1, fill=0):
    """
        画多边形
        eval("draw_polygon(c,[(10,10),(120,120),(150,160)],True)")
    :return:
    """

    path = c.beginPath()
    x, y = positions[0]
    path.moveTo(x, y)
    for i, el in enumerate(positions, 1):
        path.lineTo(el[0], el[1])
    if close:
        path.close()
    c.drawPath(path, stroke=stroke, fill=fill)


def draw_curve(c, positions, close, stroke=1, fill=0):
    """
        画曲线
        "draw_curve(c,[(10,10),(120,120),(150,160)],True)"
    :return:
    """
    path = c.beginPath()
    x, y = positions[0]
    path.moveTo(x, y)
    for i, el in enumerate(positions, 1):
        if len(el) == 2:
            path.lineTo(el[0], el[1])
        elif len(el) == 6:
            path.curveTo(el[0], el[1], el[2], el[3], el[4], el[5])

    if close:
        path.close()
    c.drawPath(path, stroke=stroke, fill=fill)


def draw_image(c, image, x, y, w=None, h=None):
    """
        画图片
        eval("draw_image(c,200,200,50,50)")
    :return:
    """
    c.drawImage(image, x, y, w, h)


if __name__ == '__main__':
    """
        PdfShape.py 测试
    """
    PdfShape.add_obj("draw_image(c,'bilibili.png',0,0)")
    PdfShape.add_obj("draw_text(c,700,800,'12522','E:/fonts/FZTCGHJW.TTF')")
    PdfShape.add_obj("draw_polygon(c,[(500,500),(220,220),(350,360)],False)")
    PdfShape.add_obj("draw_curve(c,[(10,10),(120,120),(150,160)],True)")
    PdfShape.add_obj("draw_rect(c,200,200,50,50)")
    PdfShape.add_obj("draw_ellipse(c,200,200,50,50)")
    PdfShape.add_obj("draw_line(c,50,50,200,500)")
    PdfShape.create_pdf2(name='测试.pdf', pagesize=[1600, 900])

输出结果

在这里插入图片描述

标签:el,draw,200,python,线段,PdfShape,50,stroke,Pdf
来源: https://blog.csdn.net/jialan75/article/details/121595980

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有