利用golang实现pdf中自动换行的表格.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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

文档评论(0)

158****0778 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档