Я создаю отчеты, используя docx4j и docx stamper
(https://github.com/thombergs/docx-stamper)
У меня есть основной документ, который содержит мой TOC и логотип и набор нумерации страницзатем я начинаю заполнять другие макеты docx с помощью docx stamper, а затем добавляю их в конец основной части. Проблема заключается в том, что если я задаю ориентацию страницы в одном макете docx как альбомную после добавления в основную часть, он теряеториентация. Результат содержит обе части и правильную нумерацию страниц. Все стили сохраняются, но первая и третья части, имеющие альбомную ориентацию, отображаются в виде портрета, как в основном документе.
documentPartBase = wordMLPackageBase.getMainDocumentPart();
WordprocessingMLPackage wordMLPackageOne = fillFirstTemplate.fillTempLe();
for (Object obj : wordMLPackageOne.getMainDocumentPart().getContent()) {
documentPartBase.addObject(obj);
}
documentPartBase.addObject(pageBreak);
WordprocessingMLPackage wordMLPackageTwo = fillSecTemplate.fillTempLe();
for (Object obj : wordMLPackageTwo.getMainDocumentPart().getContent()) {
documentPartBase.addObject(obj);
}
documentPartBase.addObject(pageBreak);
WordprocessingMLPackage wordMLPackageThree = fillThirdTemplate.fillTempLe();
for (Object obj : wordMLPackageThree.getMainDocumentPart().getContent()) {
documentPartBase.addObject(obj);
}
documentPartBase.addObject(pageBreak);
wordMLPackageBase.save(new File(Paths.get(".").getFileSystem().getPath("D:").toString(), resultFileName))
Я попытался добавитьпакет с альбомной ориентацией перед добавлением детали в основную, но это не помогло:
WordprocessingMLPackage aPackage;
try {
aPackage = createPackage(PageSizePaper.A4, true);
} catch (InvalidFormatException e) {
throw new RuntimeException("Unhandled exception occurred.", e);
}
for (Object obj :aPackage.getMainDocumentPart().getContent()){
documentPartBase.addObject(obj);
}
WordprocessingMLPackage wordMLPackageThree = fillThirdTemplate.fillTempLe();
for (Object obj : wordMLPackageThree.getMainDocumentPart().getContent()) {
documentPartBase.addObject(obj);
}
А также попытался добавить:
try {
sectPr = (SectPr) XmlUtils.unmarshalString("<w:sectPr xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">"
+ "<w:pgSz w:w=\"16839\" w:h=\"11907\" w:orient=\"landscape\"/>"
+ "</w:sectPr>");
} catch (JAXBException e) {
throw new RuntimeException("Unhandled exception occurred.", e);
}
wordMLPackageThree.getMainDocumentPart().getContent().add(sectPr);
Добавление следующего метода в соответствии с
Измените ориентацию страницы в середине документа
, как показано на приведенном ниже коде, весь документ выглядит как ландшафт!
makeLandscape(wordMLPackageThree.getMainDocumentPart(), STPageOrientation.LANDSCAPE);
for (Object obj : wordMLPackageThree.getMainDocumentPart().getContent())
{
//Properties properties = Docx4jProperties.getProperties();
//properties.setProperty("docx4j.PageOrientationLandscape", "true");
documentPartBase.addObject(obj);
}
private void makeLandscape(MainDocumentPart mdp, STPageOrientation stPageOrientation)
{
ObjectFactory objectFactory = new ObjectFactory();
SectPr sectionLandscape = objectFactory.createSectPr();
SectPr.PgSz landscape = new SectPr.PgSz();
landscape.setOrient(stPageOrientation);
landscape.setH(BigInteger.valueOf(11906));
landscape.setW(BigInteger.valueOf(16383));
sectionLandscape.setPgSz(landscape);
org.docx4j.wml.P p = objectFactory.createP();
PPr createPPr = objectFactory.createPPr();
createPPr.setSectPr(sectionLandscape);
p.setPPr(createPPr);
mdp.addObject(p);
}
Я пытался, как сказано в первом комментарии, но весь документ был альбомным, и в конце была добавлена пустая страница с портретом:
makeLandscape(documentPartBase,STPageOrientation.LANDSCAPE);
WordprocessingMLPackage wordMLPackageThree= fillFunktionenLe.fillFunktionenLe();
for (Object obj : wordMLPackageThree.getMainDocumentPart().getContent()) {
documentPartBase.addObject(obj);
}
makeLandscape(documentPartBase,STPageOrientation.PORTRAIT);
, что тоже не помогло.
Как я могу сохранить ориентацию страницы, используя docx4j после добавления содержимого вместе?