文件与分享
文件与分享 · androidx.documentfile
Print:把位图交给打印系统DocumentFile 1.1.0-rc01
PrintHelper 的缩放模式、颜色模式与打印任务分发。
最后更新 2026-08-01
复制即用
PrintHelper helper = new PrintHelper(context);
helper.setScaleMode(PrintHelper.SCALE_MODE_FIT);
helper.setColorMode(PrintHelper.COLOR_MODE_COLOR);
helper.printBitmap("job-name", bitmap);
// 带完成回调
helper.printBitmap("job-name", bitmap, () -> {
// 打印界面关闭后回调
Log.d("Print", "done");
});PrintHelper 是整个 androidx.print 库的单一入口。它把 Bitmap 交给系统打印框架,用户选择打印机与页面设置,应用不接触打印流程细节。
两个关键模式
| 模式 | 值 | 效果 |
|---|---|---|
setScaleMode | SCALE_MODE_FIT | 整图缩放到页面内(不裁切) |
SCALE_MODE_FILL | 填满页面(可能裁切) | |
setColorMode | COLOR_MODE_MONOCHROME | 黑白 |
COLOR_MODE_COLOR | 彩色 |
helper.setScaleMode(PrintHelper.SCALE_MODE_FIT);
helper.setOrientation(PrintHelper.ORIENTATION_LANDSCAPE);
helper.setColorMode(PrintHelper.COLOR_MODE_COLOR);printBitmap 重载
// 简单版
helper.printBitmap(jobName, bitmap);
// 回调版(打印界面关闭后)
helper.printBitmap(jobName, bitmap, onFinishCallback);打印 View / 文本
PrintHelper 只收 Bitmap。打印其他内容先渲染成位图:
// View 转 Bitmap
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
helper.printBitmap("view", bitmap);更复杂的打印(多页、PDF)用平台 PrintManager + PrintDocumentAdapter——androidx.print 只处理位图。
常见陷阱
- 大图 OOM:超大 Bitmap 打印前缩放。
- FILL 裁切:不希望裁切用 FIT。
- 主线程打印:
printBitmap在主线程调用即可(内部异步),但别在回调里做重活。 - 忘回调:需要知道完成时机用带回调重载。
明确不解决什么
- 不打印 View、PDF 或文本排版:只接收 Bitmap,其他内容需先渲染成位图。
- 不管理打印机:设备发现、选择、进度都在系统打印对话框里。
- 不控制打印质量细节:DPI、纸张尺寸等由用户在系统 UI 中选择。
要点
PrintHelper单一入口;FIT/FILL 控制缩放,COLOR/MONO 控制颜色。- 只收 Bitmap;View/文本先渲染成位图。
- 打印机选择和 DPI 由系统 UI 决定。
- 完成时机用带回调重载。