- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
利用golang实现pdf中自动换行的表格
stylestring//风格F仅填充D仅边框或者DF两个都要
alignStrstring//对其方式LCR为水平的左、中、右,TMBA为垂直的上、中、下、基准线
fontHfloat64//字体高度
cells[]pdfCell//
typepdfCellstruct{
wfloat64//宽度
hfloat64//行高
txtStrstring//文本
linesint//判断文本会占几行
func(s*pdfLine)addLine(stylestring,alignStrstring,cells...pdfCell){
s.style=style
s.alignStr=alignStr
_,s.fontH=s.pdf.GetFontSize()
//记录需要的最高行高
for_,cell:=rangecells{
lines:=s.pdf.SplitText(cell.txtStr,cell.w)
h:=float64(len(lines))*cell.h
ifs.hh{
s.h=h
cell.lines=len(lines)
s.cells=append(s.cells,cell)
_,_,_,mbottom:=s.pdf.GetMargins()//获取当前页面边距
_,pageh:=s.pdf.GetPageSize()//获取当前页面尺寸
x,y:=s.pdf.GetXY()//获取当前位置
//页面剩余行高不够时开启新一页
ifs.pdf.GetY()+s.hpageh-mbottom{
s.pdf.AddPage()
y=s.pdf.GetY()
s.x=x
s.y=y
s.write()
//写入
func(s*pdfLine)write(){
x:=s.x
y:=s.y
//手动记录并移动坐标
for_,c:=ranges.cells{
usedH:=float64(c.lines)*s.fontH
margin:=(s.h-usedH)/2.0
s.pdf.Rect(x,s.y,c.w,s.h,s.style)
s.pdf.SetXY(x,y+margin)//保持单元格内的文字有边距
s.pdf.MultiCell(c.w,s.fontH,c.txtStr,,s.alignStr,false)
x+=c.w
s.pdf.SetXY(x,y)
//坐标重置为下一行的当前位置
s.pdf.SetXY(s.x,s.y+s.h)
//重置变量
s.cells=nil
s.h=0
//使用生成一个每行4列的表格
funcmain(){
pdf:=gofpdf.New(P,mm,A4,)
pdf.AddPage()
pdf.AddUTF8Font(NotoSansSC-Regular,,src/font/NotoSansSC-Regular.ttf)
pdf.SetFont(NotoSansSC-Regular,,12)
myPdf:=pdfLine{pdf:pdf}
width,_:=pdf.GetPageSize()//页面宽度
left,_,right,_:=pdf.GetMargins()//左右边距
usable:=width-left-right//可用的页面宽度
_,h:=pdf.GetFontSize()//字体高度
tableH:=h+2//行高多出2mm的边距
tableWidth:=usable/4//每个单元个的宽度
pdf.SetFillColor(233,233,233)
//表头
myPdf.addLine(FD,CM,[]pdfCell{
{w:tableWidth,h:tableH,txtStr:表头1},
{w:tableWidth,h:tableH
您可能关注的文档
最近下载
- 行政编制事业编制参公管理企业编制.doc VIP
- 参公、行政编制与事业编制的区别(修正版).docx VIP
- 22D701-3电缆桥架安装(26.9MB)(26.85MB)5ce2e72e69780631(1).pdf VIP
- 学堂在线 日语与日本文化 章节测试答案.docx VIP
- 危险化学品企业工艺平稳性关键SOP、一般SOP示例.pdf VIP
- 精密与特种加工技术(第3版):热作用特种加工技术PPT教学课件.pptx
- 公、行政编制与事业5编制的区别(修正版).doc VIP
- 港珠澳大桥主体工程桥梁工程钢箱梁制造新工艺及关键技术.ppt VIP
- 社区矫正心理测试.docx VIP
- 西双版纳傣自治州“十三五”规划研究报告.doc VIP
文档评论(0)