1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/PasseRR-docx4j-wisewe

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
document.md 9.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 07:48 d22693e

4. Объединение ячеек таблицы

Эффект:

Таблица

Имя Другая информация
Чжан Сан 26
Ван Ву 18
Чжао Лю 2
Ли Сы 50
Янь Ци 80

Примечание: объединение ячеек обрабатывается в соответствии с группировкой по полу, но порядок в списке не гарантируется.

Код:

public void mergeTable() throws FileNotFoundException {
    List<Person> people = SpecDataFactory.tableData();
    // Группировка данных по полу и объединение обработки столбцов пола, имитируя группировку SQL, но не гарантируя порядок списка
    Map<String, List<Person>> groupBySex = people.stream().collect(Collectors.groupingBy(Person::getSex));
    DocumentExporter.create()
        .headingParagraph("Список сотрудников", ParagraphStyle.SUB_HEADING)
        // Необходимо указать количество строк и столбцов таблицы
        .table(people.size() + 2, 3, t -> {
            // Объединение строк заголовка таблицы
            t.row(r -> r.cell(c -> c.boldText("Имя").rowspan(2)).cell(c -> c.boldText("Другая информация").colspan(2)))
                // Объединение данных строк
                .row(r -> r.headCells("Имя", "Возраст", "Пол"));
            groupBySex.forEach((key, value) -> {
                AtomicBoolean merged = new AtomicBoolean();
                int rowspan = value.size();
                t.rows(value, (it, r) ->
                       r.dataCells(it::getName, it::getAge)
                       .cell(c -> {
                           c.text(it::getSex);
                           // Объединение строки один раз
                           if (!merged.get()) {
                               merged.set(true);
                               c.rowspan(rowspan);
                           }
                       })
                      );
            });
        })
        .writeTo(new FileOutputStream(FileUtil.brotherPath(DocumentExporterSpec.class, "merge-table.docx")));
}

5. Простые верхний и нижний колонтитулы

Эффект:

Я верхний колонтитул Заголовок один Это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст Я нижний колонтитул

Объяснение: верхний и нижний колонтитулы выровнены по левому краю, и если есть несколько страниц, то на каждой странице есть верхний и нижний колонтитулы.

Код:

public void simpleHeaderAndFooter() throws FileNotFoundException {
    DocumentExporter.create()
        .headingParagraph("Заголовок один", ParagraphStyle.HEADING_1)
        .textParagraph("Это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст, это основной текст")
        .header("Я верхний колонтитул")
        .footer("Я нижний колонтитул")
        .writeTo(
        new FileOutputStream(FileUtil.brotherPath(DocumentExporterSpec.class, "simple-header-foote1r.docx"))
    );
}

6. Нижний колонтитул со страницами

Эффект:

Информация о сотрудниках компании Личная информация Чжан Саня

Имя Возраст Пол
Чжан Сань 26 лет Женщина

Разделитель страниц (эффект страницы в Word) Страница 1/всего 5 страниц

Информация о компании Личная информация Ли Си

Имя Возраст Пол
Ли Си 50 лет Мужчина

Разделитель страниц (эффект страницы в Word) Страница 2/всего 5 страниц … Всего 5 страниц 5 страниц

public void complexHeaderAndFooter() throws FileNotFoundException {
    List<Person> people = SpecDataFactory.tableData();
    DocumentExporter.create()
        // 多个文档 自动添加分页符
        .documents(people, (it, d) ->
            // 分页文档
            d.headingParagraph(it.getName() + "个人信息", ParagraphStyle.SUB_HEADING)
                .table(2, 3, t ->
                    t.row(r -> r.headCells("姓名", "年龄", "性别"))
                        .row(r -> r.dataCells(it::getName, it::getAge, it::getSex))
                )
        )
        .header(HeaderFooterType.DEFAULT, h -> h.text("某公司职工信息"))
        .footer(HeaderFooterType.DEFAULT, f -> f.page("第", "页/共", "页"))
        .writeTo(new FileOutputStream(FileUtil.brotherPath(this.getClass(), "complex-header-footer.docx")));
}

7. Картинки (заглавный рисунок, рисунок таблицы, рисунок верхнего колонтитула, рисунок нижнего колонтитула)

Эффект:

«Я — рисунок верхнего колонтитула»

<p style="margin-bottom: 30px;"> Я — рисунок верхнего колонтитула
<img src="./src/test/resources/b.png" style="width: 30px; height: 30px; margin-left: 0px;" />
</p>

«Список сотрудников»

Имя Возраст Пол Рисунок Текст и рисунок
Чжан Сань 26 Женщина Я — рисунок ячейки таблицы
Ли Сы 50 Мужчина Я — рисунок ячейки таблицы
Ван У 18 Женщина Я — рисунок ячейки таблицы
Чжао Лю 2 Женщина Я — рисунок ячейки таблицы
Янь Ци 80 Мужчина Я — рисунок ячейки таблицы

«Я — рисунок основного текста»

<img src="./src/test/resources/c.gif"/>

Объяснение: поддерживаются форматы изображений gif, jpg, png, bmp, можно добавлять изображения в абзацы, ячейки таблиц, верхний колонтитул и нижний колонтитул.

public void picture() throws FileNotFoundException {
    List<Person> people = SpecDataFactory.tableData();
    DocumentExporter.create()
        .headingParagraph("Список сотрудников", ParagraphStyle.SUB_HEADING)
        // Нужно указать количество строк и столбцов таблицы
        .table(people.size() + 1, 5, t ->
               // Строка заголовка автоматически выделяется жирным шрифтом
               t.row(r -> r.headCells("Имя", "Возраст", "Пол", "Рисунок", "Текст и рисунок"))
               // Данные строки отображаются обычным шрифтом
               .rows(people, (p, r) ->
                     r.dataCells(p::getName, p::getAge, p::getSex)
                     // В ячейку таблицы добавляется изображение
                     .pictureCell(new
``` ```
File(FileUtil.brotherPath(DocumentExporterSpec.class, "c.gif")), 20, 20)
    .cell(c ->
        c.text("我是单元格图片")
            .pictureParagraph(
                new File(FileUtil.brotherPath(DocumentExporterSpec.класс, "c.gif")),
                20,
                20
            )
    )
)
// 段落图片
.textParagraph("我是正文图片")
.pictureParagraph(new File(FileUtil.brotherPath(DocumentExporterSpec.class, "c.gif")), 400, 150)
// 页眉图片
.header(HeaderFooterType.DEFAULT, h ->
    h.textParagraph("я — страница с изображением заголовка")
        .pictureParagraph(new File(FileUtil.brotherPath(DocumentExporterSpec.class, "b.png")), 20, 20)
)
// 页脚图片
.footer(HeaderFooterType.DEFAULT, f ->
    f.textParagraph("я — страница с изображением нижнего колонтитула")
        .pictureParagraph(new File(FileUtil.brotherPath(DocumentExporterSpec.class, "b.png")), 20, 20)
)
.writeTo(new FileOutputStream(FileUtil.brotherPath(DocumentExporterSpec.class, "picture.docx")));
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/PasseRR-docx4j-wisewe.git
git@api.gitlife.ru:oschina-mirror/PasseRR-docx4j-wisewe.git
oschina-mirror
PasseRR-docx4j-wisewe
PasseRR-docx4j-wisewe
master