Android中Kotlin创建PDF

Posted Leonban

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中Kotlin创建PDF相关的知识,希望对你有一定的参考价值。

一、创建 PDF 流程

首先看官网的文档,下面介绍基于 SDK 怎么样来创建 PDF 文件的流程。

 //先创建一个 PdfDocument 对象 document
 PdfDocument document = new PdfDocument();

 //创建 PageInfo 对象,用于描述 PDF 中单个的页面
 PageInfo pageInfo = new PageInfo.Builder(new Rect(0, 0, 100, 100), 1).create();

 //开始启动内容填写
 Page page = document.startPage(pageInfo);

 //绘制文字。
 page.canvas.drawText("PDF绘制",70.0f,200.0f, mPaint)

 //停止对页面的填写
 document.finishPage(page);
 . . .

 //将文件写入流
 document.writeTo(getOutputStream());

 //关闭流
 document.close();

二、创建PDF实例

接下来参考创建流程进行代码的编写,创建Activity。

进行一个简单的例子,在一页PDF中绘制一个标题、内容及加载图片。

class PdfActivity 
    private val CODE_WRITE_EXTERNAL = 1
    var file : File? = null
    var mPaint : Paint? = null
    var matrix : Matrix? = null
    var screenWidth : Int = 210*28/10
    var screenHeight : Int = 297*28/10
    val document = PdfDocument()
    var str : String = ""

    public  fun creatPDF(file:String) 
        str = "pdfFile"
        mPaint = Paint()
        mPaint?.isAntiAlias = true
        mPaint?.strokeWidth = 10.0f
        mPaint?.isFakeBoldText = true
        mPaint?.color = Color.BLACK
        mPaint?.textSize = 35.0f

        matrix = Matrix()
        matrix?.setScale(0.5f, 0.5f)
        matrix?.postScale(0.15f,0.15f)

        val root = Environment.getExternalStorageDirectory()
        //val showBitmap : Bitmap = BitmapFactory.decodeResource(getResources(), 'banlei.png')
        val showBitmap = BitmapFactory.decodeFile("/sdcard/test.png") //放到设备中的一张图片路径
        var bitMapWidth : Int = showBitmap.getWidth()
        var bitMapHeight : Int = showBitmap.getHeight()
        val bm : Bitmap = Bitmap.createBitmap(
            showBitmap, 0, 0, showBitmap.width,
            showBitmap.height, matrix, true
        )

        val info1 = PdfDocument.PageInfo.Builder(
            screenWidth, screenHeight, 1
        ).create()
        val page1 = document.startPage(info1)

        mPaint?.let  page1.canvas.drawText("PDF文档报告",170.0f,130.0f, it) 
        mPaint?.textSize = 20.0f
        mPaint?.let  page1.canvas.drawText("PDF中的内容信息描述",70.0f,200.0f, it) 
        mPaint?.let  page1.canvas.drawBitmap(bm, 350.0f, 500.0f, it) 
        document.finishPage(page1)

        try 
            document.writeTo(outputStream)
         catch (e: IOException) 
            e.printStackTrace()
        
        //toast("生成pdf成功,路径:$file")
        document.close()
    

    private val outputStream: OutputStream?
        get() 
            val root = Environment.getExternalStorageDirectory()
            val filePath = Environment.getExternalStorageDirectory().absolutePath + "/PdfPath/" +str
            var file = File(filePath)
            if (!file.exists()) 
                //cleanDir(file)
                //file.delete()
                file.mkdirs()
            

            var filepdf = File(file, str+".pdf")

            try 
                val os = FileOutputStream(filepdf)
                os.flush()
                //强制文件系统刷新
                os.getFD().sync()
                return os
             catch (e: FileNotFoundException) 
                e.printStackTrace()
            
            return null
        

    fun cleanDir(f: File) 
        val listf = f.listFiles()
        for (index in 0 until listf.size) 
            listf[index].delete()
        
    

以上PDF中文字插入及图片加载功能基本实现

以上是关于Android中Kotlin创建PDF的主要内容,如果未能解决你的问题,请参考以下文章

使用 kotlin for android app 将 pdf 文件上传到 firebase 存储

如何在kotlin android中将pdf文件编码为base64字符串

尝试使用 Kotlin 创建 pdf 文件。获取“java.io.FileNotFoundException:20210922:打开失败:EROFS(只读文件系统)”错误/

Android编程权威指南的目录

Firebase Android -- 在 Kotlin 中使用电子邮件和密码创建用户

Android / Kotlin - 创建两个按钮并应用约束