Repository navigation
Best Practices ru
Hammad Maqbool edited this page Oct 29, 2026
·
1 revision
English · 简体中文 · 繁體中文 · Español · العربية · Français · Português (Brasil) · Deutsch · हिन्दी · 日本語 · 한국어 · Русский · Bahasa Indonesia · Türkçe · Italiano · Tiếng Việt
Эти привычки следуют прямо из того, как работает docxi, и большинство из них предотвращают какую-либо проблему из раздела Устранение неполадок. Они сгруппированы по темам. Советы по параметрам страницы пригодятся всем, а советы по безопасности и производительности важнее всего для приложений в продакшене.
-
Передавайте все четыре поля вместе. Хеш, переданный в
Docxi::Document.new, заменяет значения по умолчанию, и любое из значенийtop,right,bottomиleft, которое вы пропустите, записывается пустым. -
Задавайте колонтитулы первой страницы. docxi всегда включает отдельную первую страницу. Если странице 1 нужен колонтитул, вызовите также
add_first_headerиadd_first_footer.
-
Используйте
space: trueдля пробелов в начале или в конце. Иначе Word их удалит, и слова двух фрагментов сольются. -
Выносите общее оформление на уровень абзаца. Параметры, переданные в
p, напримерsize:илиfont:, применяются ко всем фрагментам внутри него, и повторять их не нужно. -
Используйте
p.brдля разрывов строк иdocument.br(page: true)для разрывов страниц.document.brбезpage: trueдаёт недопустимый XML.
-
Задавайте границы для строк или ячеек, а не для таблицы. В 0.1.0
borders:на уровне таблицы применяются к каждой ячейке, а не к внешнему контуру таблицы. -
Указывайте
columns_widthдля каждого столбца. Ячейки берут ширину оттуда, и таблицы сохраняют ожидаемый макет.
- Используйте файлы PNG. Каждое изображение сохраняется как часть PNG.
-
Задавайте размер встроенных изображений через
style:, напримерstyle: { width: "120pt", height: "60pt" }. В 0.1.0 это единственный размер изображения, который работает так, как ожидается. -
Передавайте путь, а не открытый
File, если документ может формироваться несколько раз. Изображения из IO читаются во времяrender, и при повторном формировании изображение окажется пустым. -
Изображения в колонтитулах, ячейках таблиц и позиционированные изображения до выхода 0.2.0. Их ширина и высота вычисляются как
width * height * 14.92EMU, поэтому они получаются квадратными. Чтобы получить квадратное изображение со сторонойSдюймов, передайтеwidthиheight, равныеMath.sqrt(S * 914400 / 14.92).round; для одного дюйма это примерно 248.
-
Не передавайте недоверенные строки в
add_media. Путь заставляет docxi прочитать этот файл с вашего сервера, а URL заставляет ваш сервер его скачать. Передавайте IO, который вы открыли сами, или сначала проверяйте значение. См. Безопасность. -
Текст экранируется автоматически. Строки, переданные в
text, записываются как текст XML, поэтому пользовательский ввод не может изменить структуру документа.
-
Формируйте большие документы в фоновой задаче. Весь документ собирается в памяти при вызове
render. См. Интеграции. -
Формируйте документ один раз и используйте байты повторно. Сохраните
word.render.string, если документ нужно отправить или сохранить несколько раз. -
Зафиксируйте совместимую версию с помощью
gem "docxi", "~> 0.1". -
Тестируйте то, что создаёте.
.docx— это zip из XML-файлов, поэтому тесты могут распаковать его и проверить XML. Собственные тесты docxi работают именно так. См. Архитектура.
docxi wiki · README · Installation · Troubleshooting · Report an issue · MIT License
Start
Build documents
Help
Project
Links
Languages