Linux环境中,如何保证设备打印PDF,不会出现字符乱码情况?

在做PDF打印产品的客户里,使用工具打开PDF查看时外观无问题,但是通过打印驱动解析后,用户拿到实际打印的纸张反而出现乱码情况。此时,需要在打印前增加PDF预处理的能力,避免由打印驱动解析能力导致文件乱码的风险。

福昕SDK for Linux在10.0版本中推出新接口,对PDF进行预处理,实现PDF转“PDF”。其实现原理类似Windows环境中的PDF虚拟打印,实现效果保证布局、外观内容与原PDF完全一致;同时提供接口支持开发者指定PDF转“PDF”后的页面宽高,比如A4、A3、A5。

Java示例代码如下:

PostScriptDeviceSettingData ps = new PostScriptDeviceSettingData();
ps.setResolution(600);
ps.setDevice_width((int) ((21 / 2.54) * 600));
ps.setDevice_height((int) ((29.7 / 2.54) * 600));
Renderer renderer = new Renderer(ps, "path" + "result.pdf");
int pageCount = doc.getPageCount();
for (int i = 0; i < pageCount; ++i) {
    PDFPage page = doc.getPage(i);
    page.startParse(e_ParsePageNormal, null, false);
    int width = (int) page.getWidth();
    int height = (int) page.getHeight();
    Matrix2D matrix = page.getDisplayMatrix(0, 0, (int) ((21 / 2.54) * 600), (int) ((29.7 / 2.54) * 600), e_Rotation0);
    renderer.startRender(page, matrix, null);
    page.delete();
    matrix.delete();
}
renderer.delete();
ps.delete();
doc.delete();