Как стать автором
Обновить

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

Спасибо с любом случае, много библиотек хороших и разных полезно! Но всё-таки - а чем NPOI такой уж низкоуровневый? Пример из Вашего readme на Гитхабе на NPOI реализуется плюс-минус в то же количество очень похожих строк. Про Open XML SDK молчу, там правда сурово.

Спасибо за отзыв! А я, если честно, уже не помню. Но тогда ничего сопоставимого по простоте входа с оригинальной DocX и Aspose.Words точно не было. Я очень, очень искал %)

многие вещи не реализованы в NPOI, например нормальная работа с колонтитулами, нумерация страниц и т.п

Хм... я пока что только самые базовые штуки делал, но вроде и колонтитулы поддерживает, и поля (а нумерация страниц - по сути, поля в колонтитулах):


XWPFFooter footer = document.CreateFooter(HeaderFooterType.Default);
XWPFParagraph footerPara = footer.CreateParagraph();
XWPFRun footerRun = footerPara.CreateRun();
footerRun.SetText("Page ");
footerRun.AddField("PAGE");

(это, если что, ChatGPT написала, так что все претензии к ней :)

Я не утверждаю ничего, опыта пока мало, но просто для себя хочется понять, на какие грабли придётся наступить, когда потребуется делать что-то посложнее.

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

Насколько я понимаю, HeaderFooterType.First как раз позволяет создать отдельный колонтитул для первой страницы (на второй и последующих останется дефолтный).

А вот как Word делает нумерацию с начала новой секции - тут я, честно говоря, независимо от библиотеки не понял сходу. Поле остаётся то же самое, "PAGE"... Я, конечно, вместо "PAGE" могу вставить "LISTNUM", у которого в параметрах можно настроить сброс нумерации, но это не то, что делает сам Word, и может конфликтовать с аналогичными полями в тексте. В общем, надо до Visual Studio добраться, поэкспериментировать... спасибо за направление для экспериментов!

Колонтитулов есть аж три вида: First - только для первой страницы секции, Even только для четных страниц, и Odd - должен быть обязательно, он для всех, кроме первой и четных, если они отдельно заданы.

А для нумерации страниц во всем документе и в секции просто есть разные поля. Как раз в Wordroller можно посмотреть, какие — мне пришлось добавить оба вида.

А для нумерации страниц во всем документе и в секции просто есть разные поля. Как раз в Wordroller можно посмотреть, какие — мне пришлось добавить оба вида.

А какие? Я сходу не нашёл. В самом Word есть разные поля для количества страниц в документе и в секции соответственно, а номер - только PAGE...

Сам Word, если создать документ вручную и глянуть внутрь, делает по-другому - если я выбираю в Page Numbering Options рестартовать нумерацию с 1, то он создаёт два отдельных, но совершенно одинаковых footer1.xml и footer2.xml, внутри каждого поле PAGE. А вот потом где-то ещё (пока не глядел детально) сопоставляет одной секции один футер, а другой - другой. И вот это сопоставление в библиотеках явным образом не делается, надо копаться на низком уровне (нашёл такой вопрос для POI на java)

Word так и делает: создает новую секцию (это виртуальный объект, конструируемый по section breaks в теле документа) с независимым набором колонтитулов и нумерацией страниц.

В Wordroller секции специально вынесены как верхнеуровневые объекты в теле документа, чтобы было интуитивно более понятнее :)

Понятно. А NPOI, на первый взгляд, добавляет колонтитул без вариантов только к документу, а не к секции. Что, с одной стороны, убирает лишний уровень сложности для простых случаев, но, с другой, препятствует реализации сложных.

Посмотрел сейчас и вспомнил, что одной из проблемных вещей была работа с секциями и колонтитулами. С секциями в NPOI, судя по всему, не суперинтуитивно до сих пор. А с колнотитулами наоборот, в DocX была беда изначатльно.

OpenXML под MIT лицензией зато, где то это может оказаться важным.

А чем Apache 2 хуже, кроме того, что она лучше? :)

Например несовместима с некоторыми другими. И требует упоминать об изменениях.

Не помню, о чем думал, когда выбирал. Но критических проблем с ней, вроде. Одна из двух самых массовых в мире OS.

Для ODT/ODS (LibreOffice) бы такое, чтобы можно было работать с документами, без необходимости иметь "либру" на сервере/раб.станции для формирования доков. Имхо в гос.секторе актуально.

К сожалению, ODT — все таки слишком маргинальный формат, если брать глобально. Лучше генерировать DOCX, но добиваться корректного отображения в LibreOffice. Мы в HARDROLLER так и делаем: генерируем DOCX, с которыми пользователи работают и в Word (причем от 2007 до 365), и в Libre, а сами мы генерируем PDF в LibreOffice под Linux.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории