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

DOCX и PHP легкое заполнение документов Word

image

Для заполнения документа необходимо всего лишь:
  1. Скопировать в документ свой текст, шаблон документа;
  2. Расставить закладки (Bookmarks) и задать им имена;
  3. Любым серверным скриптом(php, aspx, и др.) заменить файл имя документа.docx.zip/CustomXML/item2.xml.


А теперь по подробнее.



Уже достаточно давно я интересуюсь возможными альтернативами заполнения документации в формате .docx на стороне сервера. Искал давно, но ничего такого, что бы радовало не нашел, наиболее понравившимися из того, что нашел было PHPWord, и недавняя статья Честная генерация DOCX на PHP. Часть 1.

В моем случае следующая специфика задач:

  1. генерация файлов docx с нуля не подходит, т.к. формы периодически меняются и нет желания постоянно их перекладывать в код;
  2. вариант с заменой по регулярке тоже не очень, использовал PHPWord в целом очень ничего библиотека, только сначала вообще плохо искал, потом, когда поправил их код и регулярку, начало лучше искать, но проблема этогшо метода в том, что иногда форматирование нарушалось;
  3. требуется легко, просто и быстро.


не найдя того, что хотел, решил изучать C#, маялся конечно долго, но оно того стоит, представляю Вам собственно сами файлы(Яндекс.Диск): файл .docx, файл .vsto

Особенности чтобы все нормально работало

имена закладок (Bookmarks) задаются исходя из того, как вы назовете поля в XML файле по следующему принципу:

Интел компани
Генерального директора
Петров Иван
Устава
23
34



имя поля к примеру: Company_Loc_a так должна называться закладка
я ниже 3го уровня не пробовал, но должен работать до бесконечной вложенности.

Буду рад советам

В настоящий момент файл не совсем то, чего я от него хочу, буду благодарен за замечания, а главное посоветуйте, если не трудно:
1) как сделать 1 файл, т.е. либо отвязаться от файла vsto либо интегрировать его ка-нибудь, или может на сервер кинуть и ссылку внедрить?
2) сейчас я привязывался к закладкам Bookmarks this.Bookmarks[i.Key] i.Key — это имя закладки
как сделать аналогично с PlainText…
сейчас его можно вызвать, но только одним способом
this.CompanyName где CompanyName — имя поля текста.
3) и подскажите, есть в C# что-то похожее на this.{i.Key} чтобы динамически вызывать параметр или как в PHP $$ или ${переменная со сзначением создаваемой переменной} ??
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.