2017-12-21 16 views
0

Ich bin in der Lage, Schriftarten, die Standard in Apache POI ppt, aber nicht in der Lage, benutzerdefinierte Schriftarten hinzufügen hinzuzufügen. Was ich bisher gemacht habe, ist:Wie füge ich benutzerdefinierte Schriftarten in Apache POI ppt

XSLFTextBox categoryTitleShape = indexslide.createTextBox(); categoryTitleShape.setAnchor (new java.awt.Rectangle (25, 40, 120, 30)); XSLFTextRun categoryTitle = KategorieTitelForm.addNewTextParagraph(). AddNewTextRun(); categoryTitle.setText ("KATEGORIEN"); // sichtbarer Text categoryTitle.setFontSize (20.); categoryTitle.setFontColor (Farbe.BLACK); categoryTitle.setBold (wahr); categoryTitle.setFontFamily (HSSFFont.FONT_ARIAL, FontGroup.EAST_ASIAN);

Der obige Code fügt Schriften hinzu, die in Apache POI ppt verfügbar sind. Aber ich muss benutzerdefinierte Schriftarten hinzufügen. Bitte helfen Sie.

Antwort

2

Es scheint eine Schriftarteneinbettung in Microsoft Office-Dokumenten möglich. Zumindest in PowerPoint und Word. Siehe How to embed fonts in PowerPoint und How to embed a TrueType font in a document. Aber leider unterstützt apache poi nicht das Speichern dieser Schriftart-Dateien in /fonts/ Teil der Office Open XML-Dokumentdateien.

So mit apache poi bis jetzt die verwendeten Schriftarten müssen im Betriebssystem installiert werden. Wir können nur eine Zeichenfolge als typeface in XSLFTextRun.setFontFamily geben. Wenn diese Schriftart im Betriebssystem installiert ist, wird sie verwendet, andernfalls wird eine ähnliche Schriftart erraten, wenn die Datei gerendert wird.

Beispiel:

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(); 
} 
} 

Ergebnis in Powerpoint Windows-10:

enter image description here

Ergebnis in Libreoffice Impress Ubuntu Linux:

enter image description here

+0

... aber für XSLF [ Schriftarten können eingebettet werden] (https://mail-archives.apache.org/mod_mbox/po-i-user/2013.mbox/ <[email protected]>) ... aber es gibt auch Grenzen (Erlaubnis, die Schriftart zu installieren) – kiwiwings

+0

@kiwiwings : Danke dafür. Ich hatte es nicht gewusst. Es gibt https://blogs.office.com/en-us/2015/07/06/document-font-embedding-demystified/?eu=true, was weitere Einblicke zu geben scheint. Aber das SSL-Zertifikat ist veraltet. 'grmbl' Microsoft! Werde es trotzdem versuchen und lesen. –

+0

@kiwiings: Naja die Einsichten sind ja nicht so viel wie der sensationelle Titel "Document Font Embedding Demystified" versprochen hat ;-). Wissen Sie, ob 'apache poi' in Zukunft Font-Einbettungsfunktionen in' XWPF' und/oder 'XSLF' plant? –

Verwandte Themen