接着上一篇博客继续实现PDF中表格的绘制:https://blog.csdn.net/m0_37690102/article/details/107051058
Then on a blog to continue to implement drawing in PDF form: https://blog.csdn.net/m0_37690102/article/details/107051058直接上代码:在上一篇博客中,您已经能够简单的能在PDF中生成相应的表格了,但是还是存在一点点小问题,对于表格内部的文字信息没办法直接写入,已经表格不属于连通区域的。
Code directly: In the last blog post, you were able to easily generate tables in PDF, but there is still a small problem. The text information inside the table cannot be written directly, and the table does not belong to the connected area.完整的代码您可以参考下面我给出的,如果存在相应的问题,请您及时和我联系,非常感谢您的反馈。
You can refer to the complete code below. If there is any problem, please contact me in time. Thank you very much for your feedback. # encoding:utf-8 # -*- coding: utf-8 -*- #字体库 import reportlab.lib.fonts #canvas画图的类库 from reportlab.pdfgen.canvas import Canvas #用于定位的inch库,inch将作为我们的高度宽度的单位 from reportlab.lib.units import inch def create_imaginarylinetable(canvas,row,col,start_y1,start_x1,data):#虚线表格 for i in range(row): canvas.line((start_x1) * inch, (start_y1-0.5*i) * inch, 7 * inch, (start_y1-0.5*i) * inch) for j in range(col): #1 2.2 3.4 4.6 5.8 7 canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1) * inch)#5.9 canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2)* inch)#5.65 canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2-0.05) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2-0.05-0.1) * inch)#5.5 canvas.line((start_x1) * inch, (start_y1 - 0.5 * row) * inch, 7 * inch, (start_y1 - 0.5 * row) * inch) #写入数据 for i in range(row): for j in range(col-1): # print(str(data[i][j])) canvas.drawString((start_x1+j*1.2+0.45) * inch, (start_y1-0.5*i-0.3) * inch, str(data[i][j])) return (start_y1 - 0.5 * row) def create_Dislocationtable(canvas,row,col,start_y1,start_x1,offset,data):#错位表格 for i in range(row): canvas.line((start_x1) * inch, (start_y1-0.5*i) * inch, 7 * inch, (start_y1-0.5*i) * inch) for j in range(col): #1 2.2 3.4 4.6 5.8 7 if j==0: canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1) * inch)#5.9 canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2)* inch)#5.65 canvas.line((start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2-0.05) * inch, (start_x1+j*1.2) * inch, (start_y1-0.5*i-0.1-0.05-0.2-0.05-0.1) * inch)#5.5 else: canvas.line((start_x1 + j * 1.2) * inch, (start_y1 - 0.5 * i) * inch, (start_x1 + j * 1.2) * inch, (start_y1 - 0.5 * i - 0.1) * inch) # 5.9 canvas.line((start_x1 + j * 1.2-offset) * inch, (start_y1 - 0.5 * i - 0.1 - 0.05) * inch, (start_x1 + j * 1.2-offset) * inch, (start_y1 - 0.5 * i - 0.1 - 0.05 - 0.2) * inch) # 5.65 canvas.line((start_x1 + j * 1.2) * inch, (start_y1 - 0.5 * i - 0.1 - 0.05 - 0.2 - 0.05) * inch, (start_x1 + j * 1.2) * inch, (start_y1 - 0.5 * i - 0.1 - 0.05 - 0.2 - 0.05 - 0.1) * inch) # 5.5 canvas.line((start_x1) * inch, (start_y1 - 0.5 * row) * inch, 7 * inch, (start_y1 - 0.5 * row) * inch) #写入数据 for i in range(row): for j in range(col-1): # print(str(data[i][j])) canvas.drawString((start_x1+j*1.2+0.45) * inch, (start_y1-0.5*i-0.3) * inch, str(data[i][j])) return (start_y1 - 0.5 * row) def pdf_head(canvas, data): #setFont是字体设置的函数,第一个参数是类型,第二个是大小 canvas.setFont("Helvetica-Bold", 11.5) #--------------------------------------------------------------- # draw a line segment from (x1,y1) to (x2,y2) # --------------------------------------------------------------- # create_table(canvas,row,col,start_y1,start_x1): data = [("@@E1", "##E2", "%