我编写了一个将 PPTX 转换为 PNG 的程序。所有的转换都很好,唯一的问题是 PPTX 文件中有 UNICODE 字符 - 它会将其转换为垃圾字符。这是代码。我尝试添加字体,但没有帮助。这就是 PPTX 包含的内容——“ /ˌinəˈvāSHən/ ”。它可以很好地转换字母 i、n、v、a、S、H、n,但不能转换其他字母。
    FileInputStream is = new FileInputStream(strTempPath);
    XMLSlideShow pptx = new XMLSlideShow(is);
    is.close();
    double zoom = 2; // magnify it by 2
    AffineTransform at = new AffineTransform();
    at.setToScale(zoom, zoom);
    Dimension pgsize = pptx.getPageSize();             
    XSLFSlide[] slide = pptx.getSlides();
    }              
    // BufferedImage img = new BufferedImage((int)Math.ceil(pgsize.width*zoom), (int)Math.ceil(pgsize.height*zoom), BufferedImage.TYPE_INT_RGB);
    BufferedImage img = new BufferedImage(pgsize.width, pgsize.height, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = img.createGraphics();
    //graphics.setTransform(at);                
    graphics.setPaint(Color.white);
    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
    slide[iPageNo].draw(graphics);             
    // FileOutputStream output = new ByteArrayOutputStream("C:/Temp/aspose/word/slide-" + (10 + 1) + ".png");        
    output = new ByteArrayOutputStream();
    javax.imageio.ImageIO.write(img, "png", output);
这就是我尝试添加字体但仍未转换的方式。
        Font customFont = Font.createFont(Font.TRUETYPE_FONT, new File("/usr/share/fonts/GEInspRg.ttf")).deriveFont(12f);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        //register the font
        ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File("/usr/share/fonts/GEInspRg.ttf")));
        graphics.setFont(customFont);
这是我的代码:也在原始问题中给出:并且我的测试PPTX除了其他英文字母单词之外还包含这个单词 - /ˌinəˈvāSHən/。
package foo;
import java.awt.Dimension; 
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
public class PPTXToPNG {
public static void main(String[] args) throws Exception {
    FileInputStream is = new FileInputStream("C:/Temp/PPTXToImage/unicode_test.pptx");      
    XMLSlideShow ppt = new XMLSlideShow(is);
    is.close();
    double zoom = 2;
    AffineTransform at = new AffineTransform();
    at.setToScale(zoom, zoom);
    Dimension pgsize = ppt.getPageSize();
    XSLFSlide[] slide = ppt.getSlides();
    BufferedImage img = new BufferedImage((int)Math.ceil(pgsize.width*zoom),
            (int)Math.ceil(pgsize.height*zoom), BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = img.createGraphics();
    graphics.setTransform(at);
    graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
    // Draw first page in the PPTX. First page starts at 0 position
    slide[0].draw(graphics);
    FileOutputStream out = new FileOutputStream("C:/Temp/PPTXToImage/ConvertedSlide.png");  
    javax.imageio.ImageIO.write(img, "png", out);
    out.close();
    System.out.println("DONE");
   }
}