栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

PPT生成PNG---解决中文乱码和字体大小、位置偏移等问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PPT生成PNG---解决中文乱码和字体大小、位置偏移等问题

}

public static void main(String[] args) throws Exception {

if (args.length == 0) {

usage(null);

return;

}

String slidenumStr = “-1”;

float scale = 1;

File file = null;

String format = “png”;

File outdir = null;

boolean quiet = false;

for (int i = 0; i < args.length; i++) {

if (args[i].startsWith("-")) {

if ("-scale".equals(args[i])) {

scale = Float.parseFloat(args[++i]);

} else if ("-slide".equals(args[i])) {

slidenumStr = args[++i];

} else if ("-format".equals(args[i])) {

format = args[++i];

} else if ("-outdir".equals(args[i])) {

System.err.println(args[++i]);

outdir = new File(args[++i]);

} else if ("-quiet".equals(args[i])) {

quiet = true;

}

} else {

file = new File(args[i]);

}

}

if (format == null || !format.matches("^(png|gif|jpg|null)$")) {

usage(“Invalid format given”);

return;

}

if (outdir == null) {

outdir = file.getParentFile();

}

if (!“null”.equals(format) && (outdir == null || !outdir.exists() || !outdir.isDirectory())) {

usage(“Output directory doesn’t exist”);

return;

}

if (scale < 0) {

usage(“Invalid scale given”);

return;

}

if (!quiet) {

System.out.println("Processing " + file);

}

FileInputStream is =new FileInputStream(file);

XMLSlideShow ppt = new XMLSlideShow(is);

try {

List slides = ppt.getSlides();

Set slidenum = slideIndexes(slides.size(), slidenumStr);

if (slidenum.isEmpty()) {

usage(“slidenum must be either -1 (for all) or within range: [1…” + slides.size() + "] for " + file);

return;

}

Dimension pgsize = ppt.getPageSize();

int width = (int) (pgsize.width * scale);

int height = (int) (pgsize.height * scale);

for (Integer slideNo : slidenum) {

XSLFSlide slide = slides.get(slideNo);

for (XSLFShape shape : ppt.getSlides().get(slideNo).getShapes()) {

if (shape instanceof XSLFTextShape) {

XSLFTextShape tsh = (XSLFTextShape) shape;

for (XSLFTextParagraph p : tsh) {

for (XSLFTextRun r : p) {

r.setFontFamily(“宋体”);

}

}

}

}

String title = slide.getTitle();

if (!quiet) {

System.out.println("Rendering slide " + slideNo + (title == null ? “” : ": " + title));

}

BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);

Graphics2D graphics = img.createGraphics();

DrawFactory.getInstance(graphics).fixFonts(graphics);

// default rendering options

graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);

graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);

graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,

RenderingHints.VALUE_FRACTIONALMETRICS_ON);

graphics.scale(scale, scale);

// draw stuff

slide.draw(graphics);

// save the result

if (!“null”.equals(format)) {

String outname = file.getName().replaceFirst(".pptx?", “”);

outname = String.format(Locale.ROOT, “%1$s-%2 04 d . 04d.%3 04d.s”, outname, slideNo, forma

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

t);

File outfile = new File(outdir, outname);

ImageIO.write(img, format, outfile);

}

graphics.dispose();

img.flush();

}

} finally {

ppt.close();

is.close();

}

if (!quiet) {

System.out.println(“Done”);

}

}

private static Set slideIndexes(final int slideCount, String range) {

Set slideIdx = new TreeSet();

if ("-1".equals(range)) {

for (int i = 0; i < slideCount; i++) {

slideIdx.add(i);

}

} else {

for (String subrange : range.split(",")) {

String idx[] = subrange.split("-");

switch (idx.length) {

default:

case 0:

break;

case 1: {

int subidx = Integer.parseInt(idx[0]);

if (subrange.contains("-")) {

int startIdx = subrange.startsWith("-") ? 0 : subidx;

int endIdx = subrange.endsWith("-") ? slideCount : Math.min(subidx, slideCount);

for (int i = Math.max(startIdx, 1); i < endIdx; i++) {

slideIdx.add(i - 1);

}

} else {

slideIdx.add(Math.max(subidx, 1) - 1);

}

break;

}

case 2: {

int startIdx = Math.min(Integer.parseInt(idx[0]), slideCount);

int endIdx = Math.min(Integer.parseInt(idx[1]), slideCount);

for (int i = Math.max(startIdx, 1); i < endIdx; i++) {

slideIdx.add(i - 1);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/658884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号