Skip to content

渲染

PDF 渲染由福昕 Renderer 引擎完成,可将页面渲染到 Bitmap 或平台设备上下文。通过渲染标志和选项,可控制渲染内容(页面内容、注释)及质量(抗锯齿、颜色模式等)。

渲染内容标志

通过 setRenderContentFlags() 指定要渲染的内容:

常量说明
Renderer.e_RenderPage0x01渲染页面内容
Renderer.e_RenderAnnot0x02渲染注释

标志可通过 | 组合:

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_ColorModeNormal0正常模式
e_ColorModeMappingGray1灰度映射
e_ColorModeMapping2自定义颜色映射(夜间模式等)
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 手册