2017-12-21 83 views
0

Apache POI pptではデフォルトであるがカスタムフォントを追加できないフォントを追加できます。 私がこれまで行ったことは次のとおりです。apache POIでカスタムフォントを追加する方法ppt

XSLFTextBox categoryTitleShape = indexslide.createTextBox(); categoryTitleShape.setAnchor(new java.awt.Rectangle(25、40、120、30)); XSLFTextRun categoryTitle = categoryTitleShape.addNewTextParagraph()。addNewTextRun(); categoryTitle.setText( "CATEGORIES"); //可視テキスト categoryTitle.setFontSize(20。); categoryTitle.setFontColor(Color.BLACK); categoryTitle.setBold(true); categoryTitle.setFontFamily(HSSFFont.FONT_ARIAL、FontGroup.EAST_ASIAN);

上記のコードは、apache POI pptで利用可能なフォントを追加します。しかし、私はカスタムフォントを追加する必要があります。助けてください。

答えて

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を使用すると、使用するフォントをオペレーティングシステムにインストールする必要があります。 typefaceという文字列をXSLFTextRun.setFontFamilyに入力するだけです。このフォントがオペレーティングシステムにインストールされている場合、それが使用されます。そうでない場合、ファイルがレンダリングされた場合、類似のフォントが推測されます。

例:パワーポイントのWindows 10で

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

結果:LibreOfficeのImpressのUbuntu Linuxの中

enter image description here

結果:

enter image description here

+0

...しかしXSLFのための[フォントを埋め込むことができます](https:/ /mail-archives.apache.org/mod_mbox/poi-user/201310.mbox/ <[email protected]>)...しかし、この方法には制限(フォントをインストールする権限)もあります。 – kiwiwings

+0

@kiwiwings : これありがとう。私は知らなかった。さらなる洞察を与えるようなhttps://blogs.office.com/en-us/2015/07/06/document-font-embedding-demystified/?eu=trueがあります。しかし、SSL証明書は古くなっています。 'grmbl' Microsoft!それにもかかわらず、試してこれを読んでください。 –

+0

@kiwiwings:洞察力は、幻想的なタイトル「ドキュメントフォント埋め込みdemystified」が約束したほどではありません;-)。 'apache poi'が将来、' XWPF'や 'XSLF'にフォント埋め込み機能を提供する予定かどうか知っていますか? –

関連する問題