Docx4j пытается применить шаблон к документу

#java #docx4j

#java #docx4j

Вопрос:

Я пытаюсь прикрепить верхний, нижний колонтитулы и стили шаблонов к документам docx из dotx, но docx4j применяет только стили и игнорирует верхний и нижний колонтитулы. Я делаю что-то не так? Есть ли способ сделать это?

         ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            JAXBContext jc = JAXBContext.newInstance(bindClass);
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            StringWriter writer = new StringWriter();
            marshaller.marshal(bindingInstance, writer);
            String inputXML = writer.toString();
            System.out.println(inputXML);
            // Load input_template
            
            WordprocessingMLPackage wordMLPackage = Docx4J.load(getDocx("doc.docx"));
            
            wordMLPackage.attachTemplate(getDotx("template.dotx").getAbsolutePath());
            
            Docx4J.bind(wordMLPackage, inputXML, Docx4J.FLAG_BIND_BIND_XML | Docx4J.FLAG_BIND_INSERT_XML | Docx4J.FLAG_BIND_REMOVE_XML);

            Docx4J.save(wordMLPackage, bos, Docx4J.FLAG_BIND_BIND_XML | Docx4J.FLAG_BIND_INSERT_XML | Docx4J.FLAG_BIND_REMOVE_XML);

            System.out.println("DocumentPrintHandler.bindData() ==>"   wordMLPackage.getDocPropsExtendedPart().getContents().getPages()); //$NON-NLS-1$
        } catch (JAXBException e) {
            Logging.i("DocumentPrintHandler.bindData() (JAXBException)", e); //$NON-NLS-1$
            return null;
        } catch (Docx4JException e) {
            Logging.i("DocumentPrintHandler.bindData() (Docx4JException)", e); //$NON-NLS-1$
            return null;
        } catch (Exception e) {
            Logging.i("DocumentPrintHandler.bindData() (Exception)", e); //$NON-NLS-1$
            return null;
        }
        return bos.toByteArray();
    }```
 

Комментарии:

1. attachTemplate устанавливает соответствующее свойство только в DocumentSettingsPart. Если вы хотите скопировать верхние и нижние колонтитулы, для этого вам понадобится код. docx4java.org/forums/docx-java-f6 / … содержит некоторый код для этого, но не будет делать это рекурсивно (например, для копирования изображений). Я напишу некоторый код для этого в течение праздничного периода.

2. Отлично, но в моем верхнем и нижнем колонтитулах есть изображения.