我已做到 能 通过 REPORTLAB 结合 SIMSUN.TTF 字体 生成
简单的 中文文档..
现在的问题是 通过 ZOPE 添加 一个 外部方法 如何
返回 这个 中文PDF 文档.
请有经验的 先生 赐教!!!
不胜感谢!!!
是否 要用到 cStringIO.StringIO ,请给一点指教!
我也是 模仿 RLZOPE.PY 已经实现了返回 中文 及
表格的问题.
现在 我要 把 ZSQL 的 结果 返回给 外部 方法的 DATA
变量 , 以便通过 表格 显示.
测试了一下 如下外部方法代码:
#coding=utf-8
#/usr/bin/python
import cStringIO
def getdata(self):
data=cStringIO.StringIO(self.test_sql())
return data.getvalue()
得到如下错误:
Site error
This site encountered an error trying to fulfill your request. The
errors were:
Error Type
TypeError
Error Value
expected read buffer, instance found
作不下去了!!!
遍查PYTHON LIB 也没有头绪!
谢谢指点!!!
祝五一快乐!!!
二维数组 如何 构建.? 从 ZSQL 返回的 结果 构造成
一个二维数组.
STYLE 如下:
self.t=Table(self.data,style=[
('TEXTCOLOR',(0,0),(-1,-1),colors.blue),
('FONTNAME',(0,0),(-1,-1),'song'),
('FONTSIZE',(0,0),(-1,-1),20),
('GRID',(0,0),(-1,-1),1,colors.red),
])
如何处理?
我的 数据 有中文 英文 和 数字 字数并不多.
不设字体大小时 网格 是 恰好 包围 了 文字. 一设
FONTSIZE 就不行了.
谢谢你的回答?能不能 看看 截图? 请检查 邮箱!!!
我还没有作到 中文换行的时候.
非常感谢你的指点!!!
该在那儿 设置 ROTATE(90)
环境EBIAN TESTING
lee@debian:~/pythonu$ locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
中文输入法: FCITX
编辑文件 ,其中要输入中文,但是 文件 UTF-8 编码. 一旦
输入中文保存时 VI 提示 :
编码转换错误只有强制保存.此时文件 的汉字
就是错误的. 无论在 程序中加入
UNICODE(SELF.VAR,'GBK').ENCODE('UTF-8') 都 不行 . 提示 GBK
不认识 POSITION 2-3 . 字符.
from reportlab.platypus import PageTemplate, BaseDocTemplate,
Paragraph, Spacer,Table,Frame,PageBreak
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.pdfgen.canvas import Canvas
import reportlab.rl_config
class MyPageTemplate(PageTemplate) :
"""Our own page template."""
def __init__(self) :
content = Frame(1*inch, 4*inch, 5* inch, 4*inch,showBoundary=1)
PageTemplate.__init__(self, "MyTemplate", [content])
def beforeDrawPage(self, canvas, doc) :
"""Draws a page message on each page."""
canvas.saveState()
canvas.setPageRotation(90)
canvas.rotate(90)
canvas.drawString(4*inch, -7 * inch, "page %d"%doc.page)
canvas.restoreState()
def go():
doc = BaseDocTemplate("hello.pdf",showBoundary=1)
doc.addPageTemplates(MyPageTemplate())
Story = []
styles=getSampleStyleSheet()
normalStyle=styles['Normal']
bogustext=("here is paragraph show %s")*60
p = Paragraph(bogustext, normalStyle)
Story.append(p)
doc.build(Story)
if __name__=="__main__":
go()
谢谢你的指点.
另外一个代码就可以实现 横向 排版. 不过没有调用
BaseDocTemplate, 调用 BaseDocTemplate 可以实现更好的功能.
我还是想 实现 BaseDocTemplate 的横向 排版功能.
#!/usr/bin/python
from reportlab.pdfgen.canvas import Canvas
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
from reportlab.platypus import Paragraph,Frame,Table
from reportlab.lib import colors
styles=getSampleStyleSheet()
styleN=styles['Normal']
styleH=styles['Heading1']
story=[]
story.append(Paragraph("this is a Heading",styleH))
story.append(Paragraph("this is paragraph",styleN))
data= [['BBBBB','','','',''],
['00', '01', '02', '03', '04'],
['10', '11', '12', '13', '14'],
['20', '21', '22', '23', '24'],
['30', '31', '32', '33', '34'],
['A', 'BBBBB', '', '', ''],
['00', '01', '02', '03', '04'],
['10', '11', '12', '13', '14'],
['20', '21', '22', '23', '24'],
['30', '31', '32', '33', '34'],
['BBBBB','','','',''],
['00', '01', '02', '03', '04'],
['10', '11', '12', '13', '14'],
['20', '21', '22', '23', '24'],
['30', '31', '32', '33', '34']
]
sty = [
('ALIGN',(0,0),(-1,-1),'CENTER'),
('VALIGN',(0,0),(-1,-1),'TOP'),
('GRID',(0,0),(-1,-1),1,colors.green),
('BOX',(0,0),(-1,-1),2,colors.red),
('SPAN',(0,0),(-1,0)),
('ALIGN',(0,0),(-1,0),'RIGHT'),
('BACKGROUND',(1,0),(1,0),colors.khaki),
('SPAN',(0,2),(-1,2)),
('SPAN',(-2,-2),(-1,-1)),
('VALIGN',(-2,-2),(-1,-1),'MIDDLE'),
('BACKGROUND',(0,0),(0,0),colors.cyan),
('LINEBELOW', (0,'splitlast'), (-1,'splitlast'), 1,
colors.white,'butt'),
]
rows=len(data)
t=Table(data,style=sty, colWidths = [50] * 5, rowHeights = [20]*rows)
story.append(t)
c=Canvas("mydoc.pdf")
c.setPageRotation(90)
c.rotate(90)
f=Frame(1.5*inch,-7.5*inch,7*inch,6.5*inch,showBoundary=1)
f.addFromList(story,c)
c.drawString(1*inch,-1*inch,"hello world")
c.save()
FRAME 的 纵 坐标 是负数, PAGE 的 纵坐标 也是 负数.
canvas.saveState()
canvas.setPageRotation(90)
canvas.rotate(90)
不要canvas.restoreState()
效果就出来了!!!!!
谢谢各位帮忙.
在 Foxit Reader 中 倒是 符合要求。但是没认设置的格式
比如:表格的宽度,页面的宽度。都没有按照设定打印。