使用aspose.slides时将ppt逐页转换为图像时产生乱码

@byp0322,
感谢您联系免费支持。请注意,应在加载演示文稿之前加载外部字体。

slides.FontsLoader.load_external_fonts([font_folder])
presentation = slides.Presentation(input_path)

Customize PowerPoint Fonts in Python|Aspose.Slides for Python Documentation

希望这能帮助到您。

按照您提供的修改方法修改了

import os
import aspose.slides as slides

输入PPT文件路径

input_path = "/home/code/test.pptx"
output_dir = "/home/code/output_images"
font_folder = "/home/code/Fonts/"
os.makedirs(output_dir, exist_ok=True)
slides.FontsLoader.load_external_fonts([font_folder])
presentation = slides.Presentation(input_path)

for i, slide in enumerate(presentation.slides):
    output_path = os.path.join(output_dir, f"slide_{i+1}.jpeg")
    try:
        slide_image = slide.get_image(1, 1)
        slide_image.save(output_path, slides.ImageFormat.JPEG)
        print(f"PPT {i+1} 已保存为图像:{output_path}")
    except Exception as e:
        print(f"转换第 {i+1} 页时出错: {str(e)}")

slides.FontsLoader.clear_cache()

依然出现报错

转换第 1 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 2 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 3 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 4 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 5 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.

我的Fonts文件夹结构如下
image.png (10.5 KB)

@byp0322,
很抱歉您遇到此问题。请提供以下附加文件和信息:

  • PowerPoint 演示文稿示例文件
  • 执行代码时所用操作系统版本
  • 您正在使用的 Python 版本
  • 您正在使用的 Aspose.Slides 版本

貌似不支持上传pptx格式的文件,我先上传pdf,麻烦您下载转换一下格式,
6.5组会.pdf (634.2 KB)

操作系统版本Description: Ubuntu 24.04.2 LTS,python版本Python 3.11.13,slides版本25.5.0,

@byp0322,
感谢您提供的额外信息。

请把 PPTX 文件压缩成 ZIP 并上传该压缩包可以吗?

6.5组会.zip (600.8 KB)

@byp0322,
您发送了已压缩的 PDF 文件。能否请您压缩并分享原始的 PPTX 文件?

zuhui.zip (806.6 KB)

非常抱歉,给您提供了pptx文件,希望您能尽快解决

@byp0322,
我需要一些时间来检查此问题。我会尽快回复您。

@byp0322,

感谢您的耐心等待。我仍无法重现您描述的错误。能否请您将 “Fonts” 文件夹中的字体压缩并分享?

好的,我使用

sudo mkfontscale
sudo mkfontdir
fc-cache -fv /home/code/Fonts/

以下命令导入的Fonts文件夹太大,我试试分批提供
但是aspose的函数还会不会同时访问系统中的默认字体,默认字体库是这个:
dejavu.zip (4.9 MB)

您那边无法复现错误是指可以正确转换吗

我Fonts文件夹里的字体文件无法上传,显示文件太大,可能是中文字体?它显示的上限为48M,但我的单个zip在我的电脑上看也就只有20M,如何解决,能否提供其他上传途径?

或者您能否提供一份样例代码并且提供一下导入的方法呢

@byp0322,

目前我了解到的问题在于,您提供的代码引发了以下错误:

转换第 1 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 2 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 3 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 4 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.
转换第 5 页时出错: Proxy error(ArgumentException): Font ‘?’ cannot be found.

您能确认这一点吗? 您能否也将问题隔离,并提供精确的逐步说明以复现该问题?

您可以将包含文件的归档上传到文件存储服务(例如 Google Drive 或 Dropbox),然后分享链接。

我的执行步骤就是首先安装了aspose.sildes库,然后由于缺少依赖安装了sudo apt-get install -y libgdiplus,首先先不导入字体解析,不产生报错但解析效果如下,其中一张转换图片,中文字符全是乱码:
slide_1.jpeg (50.0 KB)
然后加入设置字体的部分后产生上述报错
这个是字体库的googledrive连接,看是否能打开

@byp0322,
感谢您提供的问题详情。我需要一些时间来检查此问题。我会尽快回复您。

font_folder = "/home/myuserpath/Fonts/"
fonts=slides.FontsLoader.get_font_folders()
print(fonts)

想通过这样的方式看导入了哪些字体,输出显示为

<aspose.slides._wrpgen._generic._ArrayWrapper_CBE911FC object at 0x733f4091b850>

这是什么意思,是否是我导入字体的过程有问题?

sudo mkfontscale
sudo mkfontdir
fc-cache -fv /home/myuserpath/Fonts/

字体文件夹必须要保存在usr/share/fonts文件夹中吗,保存在自己的个人账号路径可以吗,至少aspose.words是可以的

另外您无法复现我的问题是指您可以正确运行我提供的代码并正确转换ppt内容为图片且字体没有问题吗

@byp0322,

不,我无法正确地将演示文稿幻灯片转换为图像。

我们已在内部问题跟踪系统中创建了以下新工单,并将根据 Free Support Policies 中提到的条款对该案例进行调查。

Issue ID(s): SLIDESPYNET-281

如果您需要优先级支持,您可以获取 Paid Support Services,同时可直接联系我们的付费支持管理团队。

get_font_folders 方法返回加载字体的文件夹列表。请尝试使用以下代码示例。

font_folders = slides.FontsLoader.get_font_folders()
for folder in font_folders:
    print(folder)

是的,您可以使用自己的字体文件夹。请注意,不应对系统文件夹使用 load_external_fonts 方法。