2016-05-08 4 views
0

У меня есть документ (.doc), который я сгенерировал с помощью Apache POI с HWPF, и я хочу изменить тип шрифта. Я предполагаю, что место, где можно было бы изменить это, было бы на персонаже, пробегающем внутри каждого абзаца.Изменить тип шрифта CharacterRun

CharacterRun имеет методы, такие как .setBold().setColor() и .getFontName(), но нет способа установить шрифт, который я смог найти.

В XWPF есть .setFontFamily(), но есть ли способ сделать то же самое с HWPF?

Range after = doc.getRange(); 
int numParagraphs = after.numParagraphs(); 

for(int i = 0; i < numParagraphs; i++){ 
    Paragraph paragraph = after.getParagraph(i); 

    int charRuns = paragraph.numCharacterRuns(); 
    for(int j = 0; j < charRuns; j++){ 
     int size = 9; 
     CharacterRun run = paragraph.getCharacterRun(j); 
     run.setFontSize(size*2); // In half sizes. 
    } 
} 

ответ

1

Способ изменения типа шрифта на CharacterRun является .setFtcAscii(), которая меняет шрифт на один из встроенных шрифтов документа. Документ, который я использовал, имел таблицу шрифтов ниже.

╔═══╦═════════════════╗ 
║ ║ Font Family  ║ 
╠═══╬═════════════════╣ 
║ 0 ║ Times New Roman ║ 
║ 1 ║ Symbol   ║ 
║ 2 ║ Arial   ║ 
║ 3 ║ Calibri   ║ 
║ 4 ║ Courier New  ║ 
║ 5 ║ Cambria Math ║ 
╚═══╩═════════════════╝ 

мне нужно изменить шрифт Courier New так что я использовал:

run.setFtcAscii(4); 

-

Другие документы могут иметь различные таблицы шрифтов, так что я создал для цикла, который устанавливает шрифт индекс, а затем распечатать имя шрифта, используя .getFontName()

Также я обнаружил, что run.setFtcOther(int) делает то же, что и run.setFtcAscii(int)


См: (0x4A4F)

https://msdn.microsoft.com/en-us/library/dd947480(v=office.12).aspx

Смежные вопросы