渲染
PDF 渲染由福昕 Renderer 引擎完成,可将页面渲染到 Bitmap 或平台设备上下文。通过渲染标志和选项,可控制渲染内容(页面内容、注释)及质量(抗锯齿、颜色模式等)。
渲染内容标志
通过 setRenderContentFlags() 指定要渲染的内容:
| 常量 | 值 | 说明 |
|---|---|---|
Renderer.e_RenderPage | 0x01 | 渲染页面内容 |
Renderer.e_RenderAnnot | 0x02 | 渲染注释 |
标志可通过 | 组合:
java
renderer.setRenderContentFlags(Renderer.e_RenderPage | Renderer.e_RenderAnnot);
渲染页面到 Bitmap
java
PDFPage page = doc.getPage(0);
if (!page.isParsed()) {
Progressive parse = page.startParse(PDFPage.e_ParsePageNormal, null, false);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = parse.resume();
}
}
Matrix2D matrix = page.getDisplayMatrix(0, 0, width, height, Constants.e_Rotation0);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
bitmap.eraseColor(Color.WHITE);
Renderer renderer = new Renderer(bitmap, true);
renderer.setRenderContentFlags(Renderer.e_RenderPage | Renderer.e_RenderAnnot);
Progressive progressive = renderer.startRender(page, matrix, null);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = progressive.resume();
}
快速渲染(缩略图)
startQuickRender() 使用简化的渲染流程,适合生成缩略图等对精度要求较低的场景:
java
Renderer renderer = new Renderer(bitmap, true);
renderer.setRenderContentFlags(Renderer.e_RenderPage);
Progressive progressive = renderer.startQuickRender(page, matrix, null);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = progressive.resume();
}
渲染单个注释
java
Renderer renderer = new Renderer(bitmap, true);
renderer.renderAnnot(annot, matrix);
备注
Widget 注释与表单字段关联。如果使用 pdf.interform.Filler 进行表单填写,渲染聚焦控件时建议使用 Filler.render() 而非 Renderer.renderAnnot()。
渲染选项
颜色模式
| 常量 | 值 | 说明 |
|---|---|---|
e_ColorModeNormal | 0 | 正常模式 |
e_ColorModeMappingGray | 1 | 灰度映射 |
e_ColorModeMapping | 2 | 自定义颜色映射(夜间模式等) |
java
renderer.setColorMode(Renderer.e_ColorModeMapping);
renderer.setMappingModeColors(0xFF000000, 0xFFFFFFFF);
抗锯齿
通过 setRenderTextAntiAliasing()、setRenderPathAntiAliasing()、setRenderImageAntiAliasing() 分别控制文本、路径和图片的抗锯齿:
java
renderer.setRenderTextAntiAliasing(true);
renderer.setRenderPathAntiAliasing(true);
renderer.setRenderImageAntiAliasing(true);
Renderer 还提供了裁切区域(setClipRect)、打印模式(enableForPrint)、半色调(setForceHalftone)、图像降采样等高级选项。
API 参考
Renderer 的完整接口说明请参阅 API 手册。