如何在Apache POI ppt中添加自定义字体

时间:2017-12-21 08:22:42

标签: java fonts apache-poi powerpoint

我能够添加Apache POI ppt默认但不能添加自定义字体的字体。这就是我目前所拥有的:

height:100%;width:auto

上面的代码添加了Apache POI ppt中可用的字体,但我需要添加自定义字体。请帮忙。

1 个答案:

答案 0 :(得分:2)

在Microsoft Office文档中似乎可以使用字体嵌入。至少在PowerPoint和Word中。请参阅How to embed fonts in PowerPointHow 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中的结果:

enter image description here

Libreoffice的结果打动了Ubuntu Linux:

enter image description here