当前位置: 首页 > news >正文

华东网站建设免费发布信息大全

华东网站建设,免费发布信息大全,做电影收费网站,做国外购物的网站怎么发货前文介绍如何使用图片生成pdf,这里介绍如何使用文本生成pdf 使用mupdf生成 mupdf生成的pdf略大,字体可以自定义. 生成的代码不复杂,也有好几种,以story的方式生成为例 fun createPdfFromText(sourcePath: String, destPath: String): Boolean {val text EncodingDetect.rea…

前文介绍如何使用图片生成pdf,这里介绍如何使用文本生成pdf

使用mupdf生成

mupdf生成的pdf略大,字体可以自定义.

生成的代码不复杂,也有好几种,以story的方式生成为例

fun createPdfFromText(sourcePath: String, destPath: String): Boolean {val text = EncodingDetect.readFile(sourcePath)val mediabox = Rect(0f, 0f, 500f, 707f) //A2val margin = 10fvar writer = DocumentWriter(destPath, "PDF", "")var snark = "<!DOCTYPE html>" +"<style>" +"#body { font-family: \"Droid Sans\", sans-serif; }" +"</style>" +"<body>" +text +"</body></html>"val story = Story(snark, "", 12f)var more: Booleando {val filled = Rect()val where = Rect(mediabox.x0 + margin,mediabox.y0 + margin,mediabox.x1 - margin,mediabox.y1 - margin)val dev: Device = writer.beginPage(mediabox)more = story.place(where, filled)story.draw(dev, Matrix.Identity())writer.endPage()} while (more)writer.close()writer.destroy()story.destroy()return true}

文档的读取,对于中文,可能会涉及到编码的处理.

先定义mediabox,就是纸张大小,这里是a2

然后用html生成story,最后写入就完成了

如果要自定义样式,颜色这些,api要去查如何使用.并不那么方便.

使用系统sdk生成

系统sdk是基于福昕的代码.但生成时可以使用view来设置样式,然后生成页面.样式比较容易控制,毕竟view长什么样是容易修改的.

读取文本是一样的.

val pdfDocument = PdfDocument()val pageWidth = PDF_PAGE_WIDTH.toInt()val pageHeight = PDF_PAGE_HEIGHT.toInt()val contentView =LayoutInflater.from(context).inflate(R.layout.pdf_content, parent, false) as TextViewcontentView.text = contentval measureWidth = View.MeasureSpec.makeMeasureSpec(pageWidth, View.MeasureSpec.EXACTLY)val measuredHeight = View.MeasureSpec.makeMeasureSpec(pageHeight, View.MeasureSpec.EXACTLY)contentView.measure(measureWidth, measuredHeight)contentView.layout(0, 0, pageWidth, pageHeight)

建立文档对象,然后加载布局

val lineCount = contentView.lineCountvar lineHeight = contentView.lineHeightif (contentView.lineSpacingMultiplier > 0) {lineHeight = (lineHeight * contentView.lineSpacingMultiplier).toInt()}val layout = contentView.layoutvar start = 0var end: Intvar pageH = 0val paddingTopAndBottom: Int = Utils.dipToPixel(context, 40f)

设置边距40dp,读取行间距与行数.

因为设置了内容后,由textview自己就能计算出这些,然后根据这些信息,计算我们一页的高宽可以分成几页,然后每一页再用一个布局去生成就行了.

while (i < lineCount) {end = layout.getLineEnd(i)val line = content.substring(start, end) //指定行的内容start = endsb.append(line)pageH += lineHeightif (pageH >= pageHeight - paddingTopAndBottom) {Log.d("TextView",String.format("============page line:%s,lh:%s,ph:%s==========",i,lineHeight,pageHeight))createTxtPage(context,parent,pdfDocument,pageWidth,pageHeight,i + 1,sb.toString())pageH = 0sb.setLength(0)}i++}if (sb.length > 0) {Log.d("TextView", "last line ===")createTxtPage(context, parent, pdfDocument, pageWidth, pageHeight, i, sb.toString())}

这就是计算的过程,最后要再处理剩下的部分.

对于每一页的显示字符数处理完,接着就是对这些生成页面

private fun createTxtPage(context: Context?,parent: ViewGroup?,pdfDocument: PdfDocument,pageWidth: Int,pageHeight: Int,pageNo: Int,content: String?) {val contentView =LayoutInflater.from(context).inflate(R.layout.pdf_content, parent, false) as TextViewcontentView.text = contentval pageInfo: PdfDocument.PageInfo =PdfDocument.PageInfo.Builder(pageWidth, pageHeight, pageNo).create()val page: PdfDocument.Page = pdfDocument.startPage(pageInfo)val pageCanvas: Canvas = page.getCanvas()val measureWidth = View.MeasureSpec.makeMeasureSpec(pageWidth, View.MeasureSpec.EXACTLY)val measuredHeight = View.MeasureSpec.makeMeasureSpec(pageHeight, View.MeasureSpec.EXACTLY)contentView.measure(measureWidth, measuredHeight)contentView.layout(0, 0, pageWidth, pageHeight)contentView.draw(pageCanvas)// finish the pagepdfDocument.finishPage(page)}

页面同样用之前的布局,这样保持是一致的,否则高宽计算就不对了.这里因为不需要显示,所以我们要调用measure与layout再draw画出来 

保存就简单了

private fun savePdf(path: String?, document: PdfDocument): Boolean {val outputStream = FileOutputStream(path)try {document.writeTo(outputStream)return true} catch (e: IOException) {e.printStackTrace()} finally {document.close()}return false}

http://www.yayakq.cn/news/634284/

相关文章:

  • 网站制作与网页制作wordpress应用的主题修改教程
  • 营销型企业网站的功能有哪些php做网站主要怎么布局
  • 织梦能不能做门户网站ppt下载网站哪个好
  • 遵化市城乡建设规划局网站引流推广怎么做
  • 怎么做淘宝客的跳转网站长沙制作公园仿竹护栏实体厂家
  • 鞍山云网站wordpress空间多大合适
  • 如何建一个免费的网站wordpress 8080端口
  • 网站建设怎样布局信誉好的龙岗网站设计
  • 网站上添加百度地图优化门户网站建设
  • 好享管家安卓下载北京seo代理公司
  • 民治做网站公司苏州信息网
  • 黑龙江省建设厅网站高级网站开发工程师
  • 网站建设音乐插件怎么弄网站和discuz同步登录
  • 海南网站建设哪里好wordpress无法上传exe
  • 沧州网站建设cztj合肥网站建设方案案例
  • wordpress采集网站上海住房城乡建设网站
  • 郑州市多商家网站制作公司微网站设置
  • 网站开发数据库设计html5 jsp做网站可以么
  • 网站建设投资风险分析业务推广方式有哪些
  • 北京网站优化技术创意网站建设排行榜
  • wordpress可以建网站吗聊城有什么网站制作公司
  • 网站建设中出现的错误代码网站维护公司
  • 杭州品格网站设计wordpress主题php详解
  • 门户网站建设投入diy科技制作网站
  • 电子商务成功的网站上海市政建设有限公司网站
  • 网站模板安装出现预先建设数据库会议展厅设计装修公司
  • 河南省住房和城乡建设厅网站确认书深圳建网站 (报价)
  • php做网站视频播放下载功能社区网站设计
  • aspx网站架设教程贵阳哪家网站做优化排名最好
  • html5 微网站 源码二手建筑铝模板哪里有卖