Search
Write a publication
Pull to refresh

Опыт формирование документов

Введение


Судьба подкинула интересную задачку — на сервере по заданому образцу формировать документы, вся прелесть заключается в том, что это строгий документ, т.е. своевольностей не допускается, порядок букв продиктован формой утвержденной кабинетов министров и т.д и т.п.

Первоначально задачка казалась простой, возможно даже примитивной, сверстать в Ворде шаблончик, забить поля для нужных данных, малость разметки и в формирователе тупо подставляем чего надо, документ готов. Делов-то.

А фига вам


Началось с того, что в качестве метки данных был выбрано чего типа field1, и первый сюрприз — field — это английский текст, 1 уже русский, так как документ по умолчанию русский И в документе это числилось как два различных элемента, поиск разваливался. Да и автозамена заглавных букв достала. Ну ладно в качестве лечения копируем в блокнот и снова вставка в ворд. Съело, пока документ не был открыт снова, прошелся своей орфографией и вся разметка в трубу. Вылечилось только отключением авто определения языка и проверки орфографии и никто уже и не знает чего еще ковырял в настройках. Редакции такие метки не поддавались ни какой, точнее Ворд их сразу рубил на кусочки.

После некоторых экспериментов с XMLDoc (есть такой формат) перешли на родной вордовский docx и к нему шаблонизатор нашелся, phpDoc/phpWord звался. Который и поламался, как только начал его кормить своим шаблоном, ковыряние показало — почему-то не работают регексы (ну не работает не жадный поиск и хоть процессор вырви, проверял и в командной строке, не жует и все), перепилил на обыкновенный поиск и дело пошло. Ура, результат кривее нету, а тут задачка еще усугубилась — документ должен экспортироваться также и в PDF. А у шаблонизатора на борту конвертор в PDF, который почему-то не работал, точнее криво парсил документ. Не годно.

Первое и самое простое, средствами OLE открываем Вордо документ и сохраняем как PDF, красота! 10 строчек и все как часы. Одна засада — никто не дает добро ставить официльный Ворд, а под нее закупать лицензированную Винду. Крах всех надежд.

Почухав репу нащупали решение — Libre тоже в Pdf может! Только вот открыт его по человечески не может. Облом.

Порывшись по просторам интернета, нашлось решение — клепаем html его прогоняем через шаблонизатор (еще один сообразить пришлось) протираем через библиотечку (использовалась mpdf), резултат pdf документ, кривой как мой кабель в сеть. Да и вот засада получается два шаблона, от чего руководство было не в восторге. Начал задумыватсья из html сбить doc.

Рассматривались онлайн сервисы, но у них то нет автоматизации, то платные. Проверил LiveDocX, уже к Zend прикручен — облом полный, документ кривущий, да и на халяву только 200 в день остальные $30 в месяц. Идите вы, по некоторым серверам за $30 в год то что надо выдают. Не то.

Жесть, даже гугл ушел в аут. Это тупик, начинаются перебираться варианты vine word, всевозможные конвертеры, кстати нашел интересную альтернативу MS Office — WPS Office весу крохи (изначально затачивался под мобилы) функционал почти тот же, и личико слизали, естественно халява + полноценный русский перевод.

К теме — кошмар, ужас, отчаяние и не определенность, тут еще и «Не желаете ли обновить вашу систему», да обновляй. ЧУДО!!! Свершилось! Libre 5! Корректно читает docx! О да, святой update.

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

Осталась разгребсти еще кое-какие засады. Первая — стили. В Ворде разметка стилей по умолчанию одна, В Либре другая, и результат совсем как неожиданный. Лечение — во всем документе всем элементам по максимуму прописываем пользовательские стили. Вуаля — все цивильненько, хотя и занудило, шаблон то не один, но и 100.

Вторая переносы между страницами — в тексте есть логические блоки, которые нельзя разрывать, ну это решилось просто — выделяем интересующий блок -> Абзац -> Свойства -> Не разрывать и вооля красота!

Третья — Таблицы (главная беда, из за которой вся канитель) — беда та же слетает разметка стилей, переносы между страницами, лечение тоже, только в свойствах таблицы. Но главная беда в заголовке, точнее в шапке, если табличка продолжается на новой странице, то и подпишите, что это за колонки, а сам шапка, на пол листа, и под ней строчка с нумерацией колонок. Ничего лучше не нашлось, как разделить на 2 таблицы и сделать их не разрывными.

Финишный марафет и всем даже понравилось.

Еще засады. как оказалась Либра 5 коректно читает, а вот сохранить в docx корректно уже не умеет. По сему возникло резонное предложение — использовать не docx, а odt. Засада — MS Word корректно не читает. Похоже разработчики решили нагадить друг другу. Зато просто doc все жуют замечательно, только вот шаблонизатора не него не встречалось.

Вывод


В принципе задача была решена положительно. Изначально использовать docx похоже не самое удачное решение, с odt вроде получше, но после шаблонизации его обязательно надо конвертировать в doc, иначе Ворд не съест. Похоже раз используется свободное ПО то использовать до последнего байта. Опыт — сын ошибок трудных.

P.S.: Извиняюсь за отсутствие точных деталей, просто хотел показать с какими проблемами появляются, когда производишь вроде банальную задачу формирование документов. Надеюсь кому-то удастся избежать моих граблей.

А пока судьба закинула новую задачку — посчитать количество страниц в разделе (считалка на борту), как всегда MS и Libre не дружат. Как разрулил, в другой раз.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.