为有中文需求的客户提供多渠道中文技术支持.

Tue Jan 17, 2023 2:32 am

String inputFile ="字体导出测试.pptx";
String outputFile="output";
File file =new File(outputFile);
if(!file.exists()){
file.mkdirs();
}
Presentation ppt = new Presentation();
ppt.loadFromFile(inputFile);

//设置自定义字体,您可以将字体文件放入font文件夹下
ppt.setCustomFontsFolder("font\\");
ISlide iSlide = ppt.getSlides().get(0);
IShape iShape = iSlide.getShapes().get(0);
if (iShape instanceof IAutoShape){
ITextFrameProperties textFrame = ((IAutoShape) iShape).getTextFrame();
TextRangeCollection textRanges = textFrame.getParagraphs().get(0).getTextRanges();
for (int i = 0; i < textRanges.size(); i++) {
PortionEx portionEx = textRanges.get(i);
portionEx.setEastAsianFont(new TextFont("迷你简粗倩"));
portionEx.setLatinFont(new TextFont("迷你简粗倩"));
}
}

//将ppt转为图片
for (int i = 0; i < ppt.getSlides().getCount(); i++) {
BufferedImage image = ppt.getSlides().get(i).saveAsImage();
String fileName = outputFile + "/" + String.format("ToImage-%1$s.png", i);
ImageIO.write(image, "PNG",new File(fileName));
}
ppt.saveToFile("b.pptx",FileFormat.PPTX_2016);
ppt.dispose();
// 我使用上述代码 将字体文件内嵌 再设置ppt中的文本字体为 我自己下载的字体文件 但是不生效 无论是图片还是ppt, 而且图片和ppt的显示还不一样
// 测试文件在附件
// spire for java version 7.12.4

911538126
 
Posts: 22
Joined: Thu Sep 29, 2022 6:50 am

Tue Jan 17, 2023 6:32 am

您好,

感谢您的留言。
抱歉,目前我们暂不支持通过代码来设置未安装的字体(如您代码中的迷你简粗倩),目前ppt.setCustomFontsFolder("font\\");代码的主要是在ppt的转换中发挥作用,保证转换后的的文档中的字体不发生改变。不过,我已将ppt中嵌入未安装字体后对文本设置为改字体作为一个新功能记录到我们的产品更新系统中了,其编号为:SPIREPPT-792。
另外,我安装迷你简粗倩.ttf后,并将ppt中文本字体设为迷你简粗倩,再使用下面的代码将ppt转为图片后,确实验证了你所说的字体不一致的问题,如下截图。我已将此问题记录到我们的问题跟踪系统,问题编号是SPIREPPT-2150。
非常抱歉给您造成不便,一旦问题解决了,我将会第一时间通知您。
Code: Select all
    String inputFile ="data/字体导出测试.pptx";
        String outputFile="output";
        File file =new File(outputFile);
        if(!file.exists()){
            file.mkdirs();
        }
        Presentation ppt = new Presentation();
        ppt.loadFromFile(inputFile);

//设置自定义字体,您可以将字体文件放入font文件夹下
        ppt.setCustomFontsFolder("font\\");
   
//将ppt转为图片
        for (int i = 0; i < ppt.getSlides().getCount(); i++) {
            BufferedImage image = ppt.getSlides().get(i).saveAsImage();
            String fileName = outputFile + "/" + String.format("ToImage-%1$s.png", i);
            ImageIO.write(image, "PNG",new File(fileName));
        }
        ppt.saveToFile("output/b.pptx",FileFormat.PPTX_2016);
        ppt.dispose();


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 979
Joined: Tue Mar 08, 2022 2:02 am

Thu Nov 30, 2023 6:42 am

您好,

感谢您的耐心等待。
很高兴通知您我们最新版本的Spire.Presentation 8.11.1 for Java,解决了您编号为SPIREPPT-2150的问题。欢迎下载测试。
网站下载链接: https://www.e-iceblue.cn/Downloads/Spir ... -JAVA.html

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 979
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持