2017-12-21 58 views
0

아파치 POI에서는 기본적으로 제공되지만 사용자 정의 글꼴을 추가 할 수없는 글꼴을 추가 할 수 있습니다. 내가 한 일은 다음과 같습니다.아파치 POI에 사용자 정의 글꼴을 추가하는 방법 ppt

XSLFTextBox categoryTitleShape = indexslide.createTextBox(); categoryTitleShape.setAnchor (새로운 java.awt.Rectangle (25, 40, 120, 30)); XSLFTextRun categoryTitle = categoryTitleShape.addNewTextParagraph(). addNewTextRun(); categoryTitle.setText ("CATEGORIES"); // visible text categoryTitle.setFontSize (20.); categoryTitle.setFontColor (Color.BLACK); categoryTitle.setBold (true); categoryTitle.setFontFamily (HSSFFont.FONT_ARIAL, FontGroup.EAST_ASIAN);

위의 코드는 apache에서 사용할 수있는 글꼴을 추가합니다. ppt. 하지만 사용자 지정 글꼴을 추가해야합니다. 도와주세요.

답변

2

Microsoft Office 문서에 글꼴 임베딩이 가능한 것 같습니다. 적어도 파워 포인트와 워드에서. How to embed fonts in PowerPointHow to embed a TrueType font in a document을 참조하십시오. 그러나 불행히도 apache poi은이 글꼴 파일을 /fonts/ Office Open XML 문서 파일에 저장하는 것을 지원하지 않습니다.

그래서 지금까지 apache poi을 사용하여 사용 된 글꼴이 운영 체제에 설치되어 있어야합니다. 우리는 문자열을 typefaceXSLFTextRun.setFontFamily에 줄 수 있습니다. 이 글꼴이 운영 체제에 설치된 경우,이 글꼴이 사용됩니다. 그렇지 않으면 파일이 렌더링되면 유사한 글꼴이 추측됩니다.

예 :

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

결과 10 파워 포인트 윈도우에서 :

enter image description here

결과 LibreOffice와의 감동 우분투 리눅스 :

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' 마이크로 소프트! 그럼에도 불구하고 그것을 시도하고 이것을 읽습니까. –

+0

@kiwiwings : 통찰력은 "Document font embedding demystified"가 약속 한 제목만큼이나 중요하지 않습니다 ;-). 'apache poi'가 장래에'XWPF'와/또는'XSLF'에 폰트 임베딩 기능을 제공 할 계획이 있는지 알고 있습니까? –