我能够添加Apache POI ppt默认但不能添加自定义字体的字体。这就是我目前所拥有的:
height:100%;width:auto
上面的代码添加了Apache POI ppt中可用的字体,但我需要添加自定义字体。请帮忙。
答案 0 :(得分:2)
在Microsoft Office文档中似乎可以使用字体嵌入。至少在PowerPoint和Word中。请参阅How to embed fonts in PowerPoint和How to embed a TrueType font in a document。但遗憾的是,apache poi
不支持将此字体文件存储在Office Open XML文档文件的/fonts/
部分中。
因此,直到现在使用apache poi
必须在操作系统中安装使用的字体。我们只能在XSLFTextRun.setFontFamily中提供typeface
字符串。如果在操作系统中安装了此字体,则会使用它,否则在渲染文件时会猜到类似的字体。
示例:
import java.io.FileOutputStream;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.sl.usermodel.*;
import java.awt.Rectangle;
public class CreatePPTXTextBoxSpecialFont {
public static void main(String[] args) throws Exception {
XMLSlideShow slideShow = new XMLSlideShow();
XSLFSlide slide = slideShow.createSlide();
XSLFTextBox textbox = slide.createTextBox();
textbox.setAnchor(new Rectangle(50, 100, 570, 100));
XSLFTextParagraph paragraph = textbox.addNewTextParagraph();
XSLFTextRun run = paragraph.addNewTextRun();
run.setText("Arial ");
run.setFontFamily("Arial");
run.setFontSize(24d);
run = paragraph.addNewTextRun();
run.setText("Algerian ");
run.setFontFamily("Algerian");
run.setFontSize(24d);
run = paragraph.addNewTextRun();
run.setText("Courier ");
run.setFontFamily("Courier");
run.setFontSize(24d);
run = paragraph.addNewTextRun();
run.setText("Times New Roman ");
run.setFontFamily("Times New Roman");
run.setFontSize(24d);
FileOutputStream out = new FileOutputStream("CreatePPTXTextBoxSpecialFont.pptx");
slideShow.write(out);
out.close();
}
}
PowerPoint Windows 10中的结果:
Libreoffice的结果打动了Ubuntu Linux: