Java ApachePOI-PPTX到PNG倾斜文本和形状

Java ApachePOI-PPTX到PNG倾斜文本和形状,java,apache,apache-poi,powerpoint,Java,Apache,Apache Poi,Powerpoint,我目前正在使用ApachePOI3.16制作PPTX幻灯片,并将其转换为一组.png缩略图。我的PPTX到PNG功能是根据我在网上找到的一些预先制作的解决方案来建模的 我遇到的主要问题是,在生成的PNG中,文本被渲染得大约大6-8磅。此外,复杂形状(如六边形)在渲染时极为倾斜。有人能提出解决办法吗?我最关心的是字体大小要大得多 以下是我的代码,为便于阅读而注释: public List<String> generatePNGThumbnails(String inputFileP

我目前正在使用ApachePOI3.16制作PPTX幻灯片,并将其转换为一组.png缩略图。我的PPTX到PNG功能是根据我在网上找到的一些预先制作的解决方案来建模的

我遇到的主要问题是,在生成的PNG中,文本被渲染得大约大6-8磅。此外,复杂形状(如六边形)在渲染时极为倾斜。有人能提出解决办法吗?我最关心的是字体大小要大得多

以下是我的代码,为便于阅读而注释:

  public List<String> generatePNGThumbnails(String inputFilePath) {
    // List of the thumbnail paths that will be returned.
    ArrayList<String> thumbnailFilePaths = new ArrayList<>();

    // Open the file.
    File inputFile = new File(inputFilePath);

    try {
      // Open the PPTX as an XMLSlideShow.
      XMLSlideShow slideShow = new XMLSlideShow(OPCPackage.open(inputFile));

      // Output size for rendered images.
      Dimension pageSize = slideShow.getPageSize();
      int width = (int)(pageSize.width * TRANSFORMATION_SCALE);
      int height = (int)(pageSize.height * TRANSFORMATION_SCALE);

      // Get a list of the slides in the PPTX.
      List<XSLFSlide> slides = slideShow.getSlides();
      for (int i = 0; i < slides.size(); i++) {
        XSLFSlide slide = slides.get(i);

        // Create a new image object and prepare it for rendering.
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D graphics = img.createGraphics();

        // Set graphics rendering options and draw the PPTX slide to the image.
        graphics.setRenderingHint(
          RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON
        );
        graphics.setRenderingHint(
          RenderingHints.KEY_RENDERING, 
          RenderingHints.VALUE_RENDER_QUALITY
        );
        graphics.setRenderingHint(
          RenderingHints.KEY_COLOR_RENDERING, 
          RenderingHints.VALUE_COLOR_RENDER_QUALITY
        );
        graphics.setRenderingHint(
          RenderingHints.KEY_INTERPOLATION, 
          RenderingHints.VALUE_INTERPOLATION_BICUBIC
        );
        graphics.setRenderingHint(
          RenderingHints.KEY_FRACTIONALMETRICS, 
          RenderingHints.VALUE_FRACTIONALMETRICS_ON
        );
        graphics.setRenderingHint(
          RenderingHints.KEY_ALPHA_INTERPOLATION,
          RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY
        );
        graphics.setColor(Color.white);
        graphics.clearRect(0, 0, width, height);
        graphics.scale(TRANSFORMATION_SCALE, TRANSFORMATION_SCALE);

        // Draw the slide to the 2DGraphics.
        slide.draw(graphics);

        // Save the newly created image to the local disk.
        String slideFileName = "slide" + i + ".pptx";
        FileOutputStream fileOutputStream = new FileOutputStream(slideFileName);
        ImageIO.write(img, "png", fileOutputStream);

        // Add the output file path to the list of paths to be returned.
        thumbnailFilePaths.add(slideFileName);

        // Clean up before proceeding to the next slide.
        graphics.dispose();
        img.flush();
        fileOutputStream.close();
      }
    } catch (InvalidFormatException | IOException e) {
      // ...
    }
  }
public List generatePNGThumbnails(字符串输入文件路径){
//将返回的缩略图路径的列表。
ArrayList ThumbnailFilePath=新的ArrayList();
//打开文件。
File inputFile=新文件(inputFilePath);
试一试{
//以XMLSlideShow的形式打开PPTX。
xmlsideshow slideShow=新的xmlsideshow(OPCPackage.open(inputFile));
//渲染图像的输出大小。
维度pageSize=slideShow.getPageSize();
int-width=(int)(pageSize.width*转换比例);
int-height=(int)(pageSize.height*转换比例);
//获取PPTX中的幻灯片列表。
List slides=slideShow.getSlides();
对于(int i=0;i
还不确定文本部分,但我昨天为倾斜的预设形状提供了补丁-请参阅@kikiwings-感谢您的回复,我暂时恢复到3.9以解决形状问题。但是,文本的输出更大。你认为这和我使用的字体有关吗?货运公司等。。。谢谢如果你能分享这个PPTX,请打开一个bugzilla条目,我会看看的。在生产环境中使用3.9解析任意OOXML文件(如PPTX)简直是个坏主意……不幸的是,我无法共享我一直使用的任何测试数据。也许今天下午我可以做个试镜。谢谢你的提议。我们开发此功能的前提是,任何版本的POI都不适用于任务关键型功能,也不会生成与输入幻灯片相同的缩略图。话虽如此,我已经登陆了3.12版,并获得了相当好的结果。但当我跳到3.13时,形状开始分解,文本甚至比3.9更大。我不确定,我是否对任务关键性有相同的理解,但你可能想看看,然后决定,如果你知道你的文件来自哪里…还不确定文本部分,但是我昨天已经为歪斜的预设形状提供了一个补丁-请参阅@kikiwings-感谢您的回复,我现在已经恢复到3.9以解决形状问题。但是,文本的输出更大。你认为这和我使用的字体有关吗?货运公司等。。。谢谢如果你能分享这个PPTX,请打开一个bugzilla条目,我会看看的。在生产环境中使用3.9解析任意OOXML文件(如PPTX)简直是个坏主意……不幸的是,我无法共享我一直使用的任何测试数据。也许今天下午我可以做个试镜。谢谢你的提议。我们开发此功能的前提是,任何版本的POI都不适用于任务关键型功能,也不会生成与输入幻灯片相同的缩略图。话虽如此,我已经登陆了3.12版,并获得了相当好的结果。但当我跳转到3.13时,形状开始分解,文本甚至比3.9更大。我不确定,我是否对任务关键性有相同的理解,但你可能想看一看,然后决定,如果你知道你的文件来自哪里。。。