Код в Word без картинок: подсветка синтаксиса через python-docx и Pygments

Viteax 37 минут назад Объяснить с Код в Word без картинок: подсветка синтаксиса через python-docx и Pygments Средний 7 мин 1.4K Python * Open source * Учебный процесс в IT Программирование * Туториал Код в Word без...
Will Anthropic have the best AI model at the end of October 2026?
В сфере искусственного интеллекта произошло заметное событие. Viteax 37 минут назад Объяснить с Код в Word без картинок: подсветка синтаксиса через python-docx и Pygments Средний 7 мин 1. 4K Python * Open source * Учебный процесс в IT Программирование * Туториал Код в Word без картинок: подсветка синтаксиса через python-docx и PygmentsОколо ста строк на Python – и листинги в . docx выглядят как в IDE, копируются, ищутся и нумеруются сами.
В прошлой статье я рассказывал про «Отчет Creator» – скрипт, который собирает отчеты по лабам со Stepik в Word. Код решений он вставлял картинками, и первый же комментарий под статьей был: «Код рисунками – брр». Но тогда я честно думал, что python-docx по-другому не умеет.
Технические детали
С этой библиотекой я вообще познакомился случайно: в 2024 году спросил у ChatGPT, чем генерировать Word-файлы из Python, он назвал python-docx – так и пошло. Документацию я тогда читал по диагонали, ровно до момента «картинка вставилась – работает». После комментариев я все-таки сел разбираться.
Выяснилось, что код текстом с подсветкой сделать можно, просто придется пару раз спуститься в XML и наступить на несколько граблей. Все это я собрал в небольшой модуль, который можно забрать в любой свой генератор документов: отчеты, курсовые, документацию. Вот как было:Страница старого отчета, код решения вставлен картинкойА вот как стало:Два листинга, вставленных текстом: Python и C++Одногруппники и преподаватели, мягко говоря, удивились такому завозу: код в отчетах наконец можно выделить, скопировать и прочитать без лупы, а сами файлы заметно похудели.
Чем плохи картинкиКартинкаТекстСкопировать коднельзяможноНайти через Ctrl+FнельзяможноЧеткость при печати и масштабезависит от разрешениявсегда четкоПоменять шрифт или размер в Wordтолько перегенерироватьчерез стиль, за секундуИ еще скорость с размером. Для честного сравнения я взял 30 одинаковых листингов по 14 строк и собрал из них два документа: в первом код отрисован через Pillow (JetBrains Mono, 64 px, как в старой версии), во втором вставлен текстом. СпособВремя генерацииРазмер .
Отраслевые последствия
docxКартинки (Pillow)4,1 с130 КБТекст (python-docx + Pygments)0,6 с39 КБПустой документ сам по себе весит около 36 КБ, так что 30 текстовых листингов добавляют к нему всего пару килобайт. Почему бы не LaTeX или pandoc? Их в комментариях к прошлой статье тоже советовали, и это отличные инструменты.
Но кафедра принимает только . docx по своему шаблону, а попасть в чужой шаблон из pandoc сложнее, чем дописать сто строк. Стиль для кодаПодсказка из комментариев: в Word для кода заводят отдельный стиль, как и для заголовков.
Тогда все листинги выглядят одинаково, а шрифт меняется в одном месте. style import WD_STYLE_TYPE from docx. shared import Pt CODE_STYLE = "Code" def ensure_code_style(doc, font="Courier New", size=10): if CODE_STYLE in : return style = doc.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




