Android PDF生成:PrintedPdfDocument与PdfDocument的差异及选型建议
PrintedPdfDocument 与 PdfDocument 的区别及适用场景
核心差异
- 定位与设计初衷
PrintedPdfDocument:专为Android打印框架打造,与打印系统深度绑定,页面参数完全遵循打印作业配置(如打印机支持的纸张尺寸、方向),是连接应用内容与打印输出的中间载体。PdfDocument:通用型PDF生成工具,不依赖打印框架,页面尺寸、布局完全由开发者自定义,专注于独立生成个性化PDF文件。
- 页面配置逻辑
PrintedPdfDocument:必须通过PrintAttributes指定页面参数,比如MediaSize(纸张规格)、Resolution(分辨率),这些参数通常来自打印请求的预设配置,无法随意定义非标准尺寸。PdfDocument:通过PdfDocument.PageInfo.Builder直接设置页面宽高(单位为像素),可创建任意尺寸的页面,自由度拉满。
- API使用复杂度
PrintedPdfDocument:API轻量化,很多参数由打印系统自动处理,适合快速适配打印场景的PDF生成需求。PdfDocument:需要开发者手动管控所有页面细节(边距、排版、元素位置等),API灵活但需要更多自定义代码。
适用场景选择
- 优先选 PrintedPdfDocument
- 需求是将应用内容适配Android打印功能,比如把页面、文档通过打印系统输出为PDF,或需要结合打印预览功能时。
- 希望直接复用打印框架的纸张配置,无需自定义特殊尺寸PDF。
- 优先选 PdfDocument
- 需要生成自定义尺寸、自定义布局的PDF文件,比如名片、海报这类非标准尺寸内容,或需要精确控制PDF细节(如添加水印、多栏排版)。
- 生成的PDF仅用于保存、分享,不需要关联打印系统(如导出报告、电子书)。
快速代码示例
PrintedPdfDocument 实现
// 基于打印属性初始化文档 PrintAttributes printAttrs = new PrintAttributes.Builder() .setMediaSize(PrintAttributes.MediaSize.ISO_A4) .build(); PrintedPdfDocument pdfDoc = new PrintedPdfDocument(context, printAttrs); // 创建页面并绘制内容 PrintedPdfDocument.Page page = pdfDoc.startPage(0); Canvas canvas = page.getCanvas(); canvas.drawText("适配打印的PDF内容", 100, 100, new Paint()); pdfDoc.finishPage(page); // 保存并关闭文档 pdfDoc.writeTo(new FileOutputStream(new File(getFilesDir(), "print-ready.pdf"))); pdfDoc.close();
PdfDocument 实现
PdfDocument pdfDoc = new PdfDocument(); // 自定义A4尺寸页面(595x842像素) PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create(); PdfDocument.Page page = pdfDoc.startPage(pageInfo); Canvas canvas = page.getCanvas(); canvas.drawText("自定义PDF内容", 50, 50, new Paint()); pdfDoc.finishPage(page); // 保存并关闭文档 pdfDoc.writeTo(new FileOutputStream(new File(getFilesDir(), "custom.pdf"))); pdfDoc.close();
内容的提问来源于stack exchange,提问作者Hitesh Verma
相关产品推荐
相关产品推荐

