2015-09-14 4 views
0

После того, как я решил проблему на docx4j ранее, я смогу использовать ее сейчас.Добавить абзац из документа в другой документ

Я просто пытаюсь запустить пример кода из этой ссылки

http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j

с некоторыми изменениями.

скажем, у меня есть два документа.

Один из них является основным шаблоном, который имеет около 2-3 страниц. Второй имеет только один абзац текста с различным стилем (Жирный, Курсив, Подчеркивание, Размер шрифта и т. Д.).

Я хочу заменить параметр в моем шаблоне абзацем во втором документе.

В результате он может заменить мой параметр абзацем, но есть проблема со стилем. Что я могу наблюдать со многими экспериментом:

  • Отступ еще там
  • New Line еще там
  • Подчеркнутый двигаться вдоль слишком
  • Цвет шрифта/Размер шрифта работает
  • Жирный/Курсив не приходят
  • Шрифтовая семья не приходит

Вот мой код

private static void replaceParagraph2(String placeholder, WordprocessingMLPackage template, ContentAccessor addTo) throws Exception { 

//get the paragraph 
WordprocessingMLPackage paragraph_template = getTemplate("./resources/input/paragraph.docx"); 
List<Object> paragraphs_LineList = getAllElementFromObject(paragraph_template.getMainDocumentPart(), P.class); 

// get the template 
List<Object> template_lineList = getAllElementFromObject(template.getMainDocumentPart(), P.class); 
int position = 0; 
P toReplace = null; 
//find placeholder position 
for (Object p : template_lineList) { 
    List<Object> texts = getAllElementFromObject(p, Text.class); 
    for (Object t : texts) { 
    Text content = (Text) t; 
    if (content.getValue().equals(placeholder)) { 

     toReplace = (P) p; 
     position = template_lineList.indexOf(toReplace); 
     break; 
    } 
    } 
} 

//add paragraph into template 
for (int i = 0; i < paragraphs_LineList.size(); i++) { 

    P para = (P) XmlUtils.deepCopy(paragraphs_LineList.get(i)); 


    addTo.getContent().add(position + 1 + i, para); 
} 

// remove the placeholder on the template 
((ContentAccessor)toReplace.getParent()).getContent().remove(toReplace); 

}

ли я что-то отсутствует?

PS. Я отлаживаю проверку объекта шаблона. Кажется, что жирным значением в объекте P является config, равным null. (Это тип booleanTrueifNull, который я думаю.)

ответ

0

Форматирование происходит от прямого форматирования (в элементах rPr и pPr в параграфе), а также из части стилей. Если стиль не указан, будут использоваться стили по умолчанию.

Вам нужно будет посмотреть на XML в своем абзаце и в части стилей.

Microsoft Word (по крайней мере, 2010) имеет полезную боковую панель «Форматирование раскрытия», которая поможет вам понять, откуда идет форматирование. Нажмите «Разделить стиль источника» внизу.

Для определения эффективного форматирования существует код в docx4j (используемый его выходом в формате PDF). Я думаю, вы могли бы использовать это, чтобы специально применить эффективное форматирование из вашего источника для каждого запуска в вашей цели.

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