HarmonyOS鸿蒙Next中通过addTextObject方法设置PDF的文本是乱码

HarmonyOS鸿蒙Next中通过addTextObject方法设置PDF的文本是乱码

pdfDocument.createDocument(595.28, 841.89);
const page = pdfDocument.getPage(0);
let str = 'This is add text object!';
let fontInfo = new pdfService.FontInfo();
let textStyle = new pdfService.TextStyle();
let font: Font = new Font()
fontInfo.fontPath = font.getFontByName('HarmonyOS Sans')?.path;
fontInfo.fontName = 'HarmonyOS Sans';
textStyle.fontInfo = fontInfo;
textStyle.textSize = 16;
textStyle.textColor = 0x000000;
page.addTextObject(str, 0, 800, textStyle);
let outPdfPath = this.environments.workSpaceTmpPath + '/testAddText.pdf';
let result = pdfDocument.saveDocument(outPdfPath);

cke_971.jpeg


更多关于HarmonyOS鸿蒙Next中通过addTextObject方法设置PDF的文本是乱码的实战教程也可以访问 https://www.itying.com/category-93-b0.html

13 回复

开发者您好,版本会分批次推送给开发者,或者您可自行在HarmonyOS服务界面中申请版本推送,步骤如下:

  • 自购真机升级版本需要开发者自行在系统申请,HarmonyOS服务界面
  • 选择STEP 3>>开发与验收>>申请OTA升级。
  • 需要注意的是,开发者预览版主要供开发者进行应用开发调测使用,除部分系统应用外,其他所有应用将被清除。因此在进行HarmonyOS开发者预览版升级前,请务必通过PC备份、云端备份等功能做好手机数据备份。

更多关于HarmonyOS鸿蒙Next中通过addTextObject方法设置PDF的文本是乱码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者您好,问题已修复,请您升级PLR-AL00 206.0.0.130(SP31C00E131R4P10)版本验证。

这个版本在哪边获取呀,我这边的真机现在版本才是SP18

有要学HarmonyOS AI的同学吗,联系我:https://www.itying.com/goods-1206.html

开发者您好,请您参考3楼回复

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

尊敬的开发者,您好!感谢您的反馈,问题正在加速处理中,还请关注后续版本,感谢您的理解与支持

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

所以这个是什么原因啊,我一开始以为是不是字体文件没有用对,我后面试着把字体文件放到rawfile里面,运行的时候手动复制到沙箱路径下,但是设置文本还是有问题,

请问这个问题解决了吗?我是升级完6.0.0.130SP9后出现的这个问题,没升级前一切正常,

开发者您好,该问题的原因为:修改添加水印下划线长度不匹配问题时,修改了添加字体相关功能,导致添加文本对象受到影响。

在HarmonyOS鸿蒙Next中,使用addTextObject方法向PDF添加文本出现乱码,通常是由于字体编码或字体文件不匹配导致。请确保使用的字体文件支持所需字符集,并正确设置文本编码格式。检查字体路径和编码参数是否正确配置,避免使用系统默认字体可能不包含目标字符的情况。

在HarmonyOS Next中,使用addTextObject方法生成PDF文本出现乱码,通常是由于字体文件路径或字体编码问题导致的。从您提供的代码和截图来看,问题可能出在字体路径的获取方式上。

核心问题分析:

  1. 字体路径获取不准确:您使用了font.getFontByName('HarmonyOS Sans')?.path来获取字体路径。这种方式获取的路径可能不是系统预期的、可被PDF引擎正确识别的字体文件路径。在HarmonyOS Next中,直接使用字体名称字符串(如 'HarmonyOS Sans')通常是更可靠的方式。

  2. 字体未嵌入:PDF中的文本需要依赖嵌入的字体信息来正确显示。如果指定的字体路径无效或字体文件无法被访问,PDF引擎可能无法正确编码和渲染文本,从而导致乱码。

解决方案:

修改您的代码,在设置fontInfo时,直接使用字体名称字符串,而不是尝试获取其文件路径。这是HarmonyOS PDF服务推荐的做法。

修改后的关键代码段:

let fontInfo = new pdfService.FontInfo();
let textStyle = new pdfService.TextStyle();

// 关键修改:直接指定字体名称,无需获取路径
fontInfo.fontName = 'HarmonyOS Sans';
// 移除或注释掉 fontInfo.fontPath 的赋值
// fontInfo.fontPath = font.getFontByName('HarmonyOS Sans')?.path;

textStyle.fontInfo = fontInfo;
textStyle.textSize = 16;
textStyle.textColor = 0x000000;

修改说明:

  • 删除了通过Font对象获取字体路径的代码(font.getFontByName)。
  • 仅保留fontInfo.fontName = 'HarmonyOS Sans';。HarmonyOS的PDF服务引擎会根据这个字体名称在系统中查找并使用正确的字体文件。

验证步骤:

  1. 应用上述修改后,重新运行您的代码。
  2. 检查生成的PDF文件。文本“This is add text object!”应该能正常显示,不再出现乱码。

如果问题仍然存在,请确认HarmonyOS Sans字体在您的设备或模拟器上是否可用。您也可以尝试使用其他已知存在的系统字体(如Droid Sans)进行测试,以进一步隔离问题。

回到顶部