Java ApachePOI-PPTX到PNG倾斜文本和形状
我目前正在使用ApachePOI3.16制作PPTX幻灯片,并将其转换为一组.png缩略图。我的PPTX到PNG功能是根据我在网上找到的一些预先制作的解决方案来建模的 我遇到的主要问题是,在生成的PNG中,文本被渲染得大约大6-8磅。此外,复杂形状(如六边形)在渲染时极为倾斜。有人能提出解决办法吗?我最关心的是字体大小要大得多 以下是我的代码,为便于阅读而注释: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
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更大。我不确定,我是否对任务关键性有相同的理解,但你可能想看一看,然后决定,如果你知道你的文件来自哪里。。。