Android中PdfDocument生成PDF体积过大问题求助
Android中PdfDocument生成PDF体积过大的优化方案
核心原因分析
PdfDocument默认会嵌入完整的字体文件(比如系统Roboto字体),这是单页"Hello World"PDF体积接近180KB的核心原因,而非文本内容本身占用空间。
优化方案
使用系统字体并限制字符嵌入子集
明确指定系统内置字体,配置Paint仅嵌入文档实际用到的字符,避免完整字体嵌入:val pdfFile = File(filePathToPdfFile) val pdfDocument = PdfDocument() val pageInfo = PdfDocument.PageInfo.Builder( PainterPdf.pageWidth, PainterPdf.pageHeight, 1 ).create() val page = pdfDocument.startPage(pageInfo) val canvas = page.canvas // 配置Paint,仅嵌入用到的字符 val paint = Paint().apply { typeface = Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL) textSize = 16f isSubpixelText = true setTextEncoding(Paint.ENCODING_UTF8) } canvas.drawText("Hello World!", 100f, 200f, paint) pdfDocument.finishPage(page) // 写入时启用GZIP压缩进一步减小体积 FileOutputStream(pdfFile).use { fos -> GZIPOutputStream(fos).use { gzos -> pdfDocument.writeTo(gzos) } } pdfDocument.close()禁用不必要的页面冗余配置
若无需页面旋转、边距等额外特性,跳过PageInfo的非必要配置,减少元数据占用:val pageInfo = PdfDocument.PageInfo.Builder( PainterPdf.pageWidth, PainterPdf.pageHeight, 1 ).create()替换轻量字体
选用更精简的系统字体(如Typeface.MONOSPACE),或引入第三方开源轻量字体(仅嵌入所需字符),进一步压缩字体嵌入体积。
效果验证
优化后,单页"Hello World"PDF体积可降至10KB以内,恢复正常水平。
内容的提问来源于stack exchange,提问作者JohnDoe
相关产品推荐
相关产品推荐

