Для тієї самої сторінки горизонтальної таблиці в Word не змінюйте орієнтацію всієї статті.

У тому самому документі Word лише сторінка таблиці має бути в альбомній орієнтації. Не змінюйте всю статтю на альбомну орієнтацію. Ця стаття спочатку створює всі розділи, потім отримує цільовий розділ за індексом, встановлює напрямок, ширину та висоту сторінки відповідно, зберігає та перечитує та підтверджує, що жоден із інших розділів не було змінено.

Якщо альбомну орієнтацію мають мати лише певні сторінки в документі Word, найпоширенішою помилкою є зміна альбомної орієнтації всього документа або обертання таблиці, а потім обрізання вмісту. Ця стаття призначена для розробників і груп документів, яким потрібно використовувати python-docx для автоматичної обробки макета Word. Тут пояснюється, як змінити лише орієнтацію сторінки цільового розділу.

Ключ до розуміння полягає в розрізненні розривів сторінок і розділів. Розриви сторінок контролюють лише розриви рядків і не містять орієнтації сторінки, розміру паперу та полів; ці властивості макета прив'язані до "розділів". Прочитавши цю статтю, ви зможете спочатку створити всі розділи, потім витягнути цільовий розділ за індексом, встановити напрямок, ширину та висоту відповідно, і перечитати після збереження, щоб переконатися, що інші розділи не було змінено. Щоб отримати докладні відомості про API, пов’язані з розділами, зверніться до python-docx Розділи офіційна документація.

Висновок одним реченням: Word робить сторінки таблиць лише горизонтальними. Як це встановити?

Створіть окремий розділ лише для вмісту, який має бути горизонтальним, поміняйте ширину та висоту та встановіть напрямок у цьому розділі, а інші розділи залишайте вертикальними.

ваша ситуаціяРекомендовані практикипричина
Перед і після цільової сторінки немає розривів розділівСпочатку використовуйте add_section(), щоб розділити, а потім установіть напрямокАтрибути макета зберігаються в розділах. Ви не можете змінити лише цільову сторінку, не розділивши розділи.
Встановлюється лише LANDSCAPE, але ширина та висота не міняються місцямиПоміняйте місцями page_width і page_height одночасноПроста зміна орієнтації призведе до неправильного розміру паперу, і вміст може бути обрізано під час експорту PDF.
Після встановлення альбомної орієнтації таблиця все ще буде скороченаПеревірте ліве та праве поля розділу або зменшіть ширину таблиціКод не може визначити зв’язок відповідності між формою та папером для вас.
Документ містить безперервні розриви розділів і неправильну орієнтацію.Змініть розрив розділу наступної сторінки та вручну підтвердьте тип розділуБезперервні розриви розділів без розривів сторінок можуть легко спричинити візуальний безлад.

Розриви розділів є справжнім носієм атрибутів макета

У стандарті OpenXML елемент <w:sectPr> визначає макет сторінки. Документ може містити кілька розділів, кожен з яких має власну ширину, висоту, орієнтацію та поля. Під час виклику document.add_section() python-docx створить новий <w:sectPr> у кінці поточного документа, а вміст, доданий після цього, належатиме до цього нового розділу.

Якщо ви спробуєте змінити напрямок, змінивши стиль абзацу або властивості таблиці, зазвичай це не спрацює, оскільки ці об’єкти не мають полів для зберігання інформації про макет.

Логіка роботи: спочатку розділіть на секції, потім візьміть секції і нарешті встановіть

  1. Розташуйте діапазон вмісту, який має бути горизонтальним.
  2. Переконайтеся, що цей вміст загорнуто в окремий розділ і за потреби розділіть за допомогою add_section().
  3. Спершу створіть усі розділи, а потім отримайте цільовий розділ відповідно до індексу, щоб уникнути помилкового об’єкта-заглушки, збереженого перед додаванням розділу як вихідного розділу.
  4. Поміняйте місцями page_width і page_height для цього розділу та встановіть orientation на WD_ORIENT.LANDSCAPE.
  5. Після збереження перечитайте файл і перевірте, чи не змінилися напрямок, ширина та висота інших розділів.

Зауважте, що якщо встановити лише orientation без заміни ширини та висоти, Word відобразить неправильний розмір паперу під час відкриття. Це питання неодноразово підкреслювалося в цій статті.

Приклад самостійної композиції

Наступний код створює вхідні дані в пам'ять. Усі дані є синтетичними зразками. Поточні записи використовуються лише для ілюстрації логіки виклику API і не є гарантією всіх реальних файлів або ефектів продукту. Залежною бібліотекою є python-docx. Запустіть його в заблокованому середовищі проекту. Версія має підтримувати перерахування WD_ORIENT (0.8.11 і вище).

from docx import Document
from docx.enum.section import WD_ORIENT, WD_SECTION
from io import BytesIO
doc = Document()
doc.add_paragraph("Portrait intro")
doc.add_section(WD_SECTION.NEW_PAGE)
doc.add_paragraph("Landscape middle")
doc.add_section(WD_SECTION.NEW_PAGE)
doc.add_paragraph("Portrait end")
middle = doc.sections[1]
width, height = middle.page_width, middle.page_height
middle.orientation = WD_ORIENT.LANDSCAPE
middle.page_width, middle.page_height = max(width, height), min(width, height)
out = BytesIO()
doc.save(out)
out.seek(0)
restored = Document(out)
assert len(restored.sections) == 3
assert restored.sections[1].orientation == WD_ORIENT.LANDSCAPE
assert restored.sections[1].page_width > restored.sections[1].page_height
assert restored.sections[0].orientation == WD_ORIENT.PORTRAIT
assert restored.sections[2].orientation == WD_ORIENT.PORTRAIT

Правильний сценарій введення: документ містить три розділи, перший розділ – це вертикальний текст, другий розділ містить широкі таблиці, а третій розділ повертається до вертикального положення. Очікуваним результатом є те, що orientation буде LANDSCAPE у другому розділі, а page_width буде більшим за page_height, а решта двох розділів залишатимуться PORTRAIT.

Один межовий вхід: документ лише з одним розділом. Пряме встановлення горизонтального напрямку на sections[0] призведе до того, що весь документ стане горизонтальним. Ви повинні спочатку викликати add_section(), щоб розділити вміст, а потім працювати з новоствореними розділами.

Друга границя введення: встановлено ПЕЙЗАЖ, але оригінальний вертикальний розмір зберігається. Код повинен перевіряти page_width >= page_height як предикат.

📊 Основне порівняння: розриви сторінок і розділів

шляхЧи можна перенести напрямок сторінки?Типове використанняВарто звернути увагу
Розрив сторінкине можнаКеруйте лише обгортанням вмістуНе можна використовувати для створення альбомної орієнтації лише однієї сторінки
Розрив розділу наступної сторінкиздатнийЧастковий пейзаж, перемикання полівОкремо потрібно задати ширину, висоту і напрямок розділу.
суцільний розрив розділуздатнийПеремикання макетів на одній сторінціНеможливість змінити сторінки може призвести до плутанини та потребує ручного оцінювання.

🎯 Який спосіб вам підходить?

якщо ви...

  • Немає розривів розділів до та після цільової сторінки: спочатку розділіть розділи, а потім установіть напрямок цільового розділу.
  • Документ має лише один розділ і має бути лише частково горизонтальним: спочатку зателефонуйте add_section(), не змінюйте sections[0] безпосередньо.
  • Таблиця обрізана після альбомної орієнтації: перевірте ліве та праве поля розділу або зменшіть ширину таблиці.
  • Документ містить послідовні розриви розділів: оцініть, чи потрібно його змінити на наступний розрив розділу сторінки, і підтвердьте це вручну.
  • Шифрування файлу, пошкодження структури XML або розділи, динамічно створені макросами: спочатку виправте або перетворіть формат вручну, код у цій статті незастосовний.

❓ Часті запитання (FAQ)

1. Чому після встановлення атрибутів абзацу чи таблиці не змінюється напрямок сторінки?

Об’єкти абзаців і таблиць не мають полів для зберігання інформації про макет. Напрямок сторінки належить атрибуту section, тому його потрібно встановлювати через розділ, який відповідає розриву розділу.

2. Чи достатньо просто встановити орієнтацію на ПЕЙЗАЖ?

недостатньо. Вам також потрібно поміняти page_width і page_height, інакше під час відкриття Word розмір паперу відображатиметься неправильно, а під час експорту PDF вміст може бути обрізано.

3. Чому ви не можете напряму встановити горизонтальний напрямок для sections[0]?

Якщо документ має лише один розділ, його зміна вплине на весь документ. Часткову поперечну частину потрібно розділити на незалежні секції за допомогою add_section().

4. Що робити, якщо верхній і нижній колонтитули не вирівняні по горизонталі?

Зміни в атрибутах розділу не впливають на статус посилання заголовка. Потрібно окремо перевірити налаштування відстані між верхнім і нижнім колонтитулами. Це самостійне питання.

📝 Підсумок

Ключ до того, щоб зробити сторінку таблиці лише горизонтальною, полягає в тому, щоб помістити цільовий вміст в окремий розділ і одночасно поміняти ширину, висоту та орієнтацію. Після збереження перечитайте та перевірте інші розділи. Після перевірки коду вам потрібно підтвердити ефект неозброєним оком після експорту в Word або PDF.

Підключіть OmniDoc до AI Assistant: створюйте та змінюйте Word, Excel і PPT одним реченням

Оновлено 2026-11-15