Untuk halaman tabel horizontal yang sama di Word, jangan mengubah orientasi keseluruhan artikel.

Dalam dokumen Word yang sama, hanya halaman tabel yang harus dalam orientasi lanskap. Jangan mengubah keseluruhan artikel menjadi orientasi lanskap. Artikel ini pertama-tama membuat semua bagian, kemudian mengambil bagian target berdasarkan indeks, menetapkan arah dan lebar serta tinggi halaman masing-masing, menyimpan dan membaca ulang, dan mengonfirmasi bahwa tidak ada bagian lain yang diubah.

Ketika hanya halaman tertentu dalam dokumen Word yang memerlukan orientasi lanskap, kesalahan paling umum adalah mengubah seluruh dokumen secara langsung ke orientasi lanskap, atau memutar tabel lalu kontennya dipotong. Artikel ini ditujukan bagi pengembang dan tim dokumen yang perlu menggunakan python-docx untuk menangani tata letak Word secara otomatis. Ini menjelaskan cara mengubah orientasi halaman bagian target saja.

Kunci pemahamannya adalah membedakan antara hentian halaman dan hentian bagian. Hentian halaman hanya mengontrol jeda baris dan tidak memuat orientasi halaman, ukuran kertas, dan margin; properti tata letak ini terikat pada "bagian". Setelah membaca artikel ini, Anda seharusnya dapat membuat semua bagian terlebih dahulu, kemudian mengekstrak bagian target berdasarkan indeks, mengatur arah, lebar dan tinggi masing-masing, dan membaca kembali setelah menyimpan untuk memastikan bahwa bagian lain belum diubah. Untuk detail terkait bagian API, silakan merujuk ke dokumentasi resmi Bagian python-docx.

Kesimpulan dalam satu kalimat: Word hanya membuat halaman tabel menjadi horizontal. Bagaimana cara mengaturnya?

Hanya buat bagian terpisah untuk konten yang harus horizontal, tukar lebar dan tinggi serta atur arah pada bagian ini, dan pertahankan bagian lainnya tetap vertikal.

situasi AndaPraktik yang direkomendasikanalasan
Tidak ada jeda bagian sebelum dan sesudah halaman targetPertama gunakan add_section() untuk membelah, lalu atur arahnyaAtribut tata letak disimpan dalam beberapa bagian. Anda tidak dapat hanya mengubah halaman target tanpa membagi bagiannya.
Hanya LANDSCAPE yang disetel tetapi lebar dan tinggi tidak ditukarTukar page_width dan page_height secara bersamaanMengubah orientasi saja akan mengakibatkan ukuran kertas salah, dan konten mungkin terpotong saat mengekspor PDF.
Tabel masih terpotong setelah mengatur orientasi lanskapPeriksa margin kiri dan kanan bagian tersebut, atau kurangi lebar tabelKode tidak dapat menentukan hubungan pencocokan antara formulir dan kertas untuk Anda.
Dokumen berisi hentian bagian terus menerus dan orientasinya tidak normal.Ubah ke hentian bagian halaman berikutnya dan konfirmasikan jenis bagian secara manualHentian bagian yang berkelanjutan tanpa hentian halaman dapat dengan mudah menyebabkan kekacauan visual.

Hentian bagian adalah pembawa atribut tata letak yang sebenarnya

Dalam standar OpenXML, elemen <w:sectPr> mendefinisikan tata letak halaman. Sebuah dokumen dapat berisi beberapa bagian, masing-masing memiliki lebar, tinggi, orientasi, dan marginnya sendiri. Ketika document.add_section() dipanggil, python-docx akan membuat <w:sectPr> baru di akhir dokumen saat ini, dan konten yang ditambahkan setelahnya akan menjadi milik bagian baru ini.

Jika Anda mencoba mengubah orientasi dengan mengubah gaya paragraf atau properti tabel, biasanya hal ini tidak berhasil karena objek tersebut tidak memiliki bidang untuk menyimpan informasi tata letak.

Logika operasi: pertama bagi menjadi beberapa bagian, lalu ambil beberapa bagian, dan terakhir atur

  1. Posisikan rentang konten yang perlu horizontal.
  2. Pastikan konten ini dibungkus dalam bagian terpisah dan dibelah menggunakan add_section() jika perlu.
  3. Buat semua bagian terlebih dahulu, lalu dapatkan bagian target sesuai indeks untuk menghindari kesalahan objek stub yang disimpan sebelum menambahkan bagian tersebut sebagai bagian asli.
  4. Tukar page_width dan page_height untuk bagian ini, dan atur orientation ke WD_ORIENT.LANDSCAPE.
  5. Setelah menyimpan, baca kembali file tersebut dan periksa apakah arah, lebar dan tinggi bagian lainnya tetap tidak berubah.

Perhatikan bahwa dengan hanya mengatur orientation tanpa menukar lebar dan tinggi, Word akan menampilkan ukuran kertas yang salah saat dibuka. Hal ini berulang kali ditekankan dalam artikel ini.

Contoh komposisi mandiri

Kode berikut membangun masukan dalam memori. Semua data adalah sampel sintetis. Catatan yang berjalan hanya digunakan untuk mengilustrasikan logika panggilan API dan tidak mewakili jaminan semua file nyata atau efek produk. Perpustakaan dependennya adalah python-docx. Silakan jalankan di lingkungan proyek yang terkunci. Versi harus mendukung enumerasi WD_ORIENT (0.8.11 dan lebih tinggi).

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

Skenario masukan yang benar: Dokumen berisi tiga bagian, bagian pertama adalah teks vertikal, bagian kedua ditempatkan dengan tabel lebar, dan bagian ketiga kembali ke vertikal. Hasil yang diharapkan adalah orientation adalah LANDSCAPE di bagian kedua, dan page_width lebih besar dari page_height, dan dua bagian sisanya tetap POTRET.

Batas masukan satu: Dokumen yang hanya memiliki satu bagian. Mengatur arah horizontal secara langsung ke sections[0] akan menyebabkan seluruh dokumen menjadi horizontal. Anda harus memanggil add_section() terlebih dahulu untuk membagi konten, lalu mengoperasikan bagian yang baru dibuat.

Batas masukan dua: LANDSCAPE diatur tetapi ukuran vertikal asli dipertahankan. Kode harus memverifikasi page_width >= page_height sebagai predikat.

📊 Perbandingan inti: hentian halaman dan hentian bagian

JalanBisakah arah halaman dibawa?Kegunaan yang khasHal-hal yang perlu diperhatikan
Istirahat Halamantidak bisaHanya mengontrol pembungkusan kontenTidak dapat digunakan untuk membuat satu halaman saja menjadi lanskap
Istirahat bagian halaman berikutnyamampuLanskap parsial, peralihan marginAnda perlu mengatur lebar, tinggi dan arah bagian secara terpisah.
jeda bagian terus menerusmampuGanti tata letak dalam halaman yang samaKegagalan mengubah halaman dapat menyebabkan kebingungan visual dan memerlukan penilaian manual.

🎯 Metode mana yang cocok untuk Anda?

jika kamu……

  • Tidak ada jeda bagian sebelum dan sesudah halaman target: pisahkan bagian terlebih dahulu, lalu atur arah bagian target.
  • Dokumen hanya memiliki satu bagian dan hanya perlu sebagian horizontal: Hubungi add_section() terlebih dahulu, jangan langsung memodifikasi sections[0].
  • Tabel terpotong setelah orientasi lanskap: Periksa margin kiri dan kanan bagian, atau kurangi lebar tabel.
  • Dokumen berisi hentian bagian berturut-turut: Evaluasi apakah harus diubah ke hentian bagian halaman berikutnya dan konfirmasikan secara manual.
  • Enkripsi file, kerusakan struktur XML, atau bagian yang dihasilkan secara dinamis oleh makro: Perbaiki atau konversi format secara manual terlebih dahulu, kode dalam artikel ini tidak berlaku.

❓ Pertanyaan yang Sering Diajukan (FAQ)

1. Mengapa arah halaman tidak berubah setelah mengatur atribut paragraf atau tabel?

Objek paragraf dan tabel tidak memiliki field untuk menyimpan informasi tata letak. Arah halaman termasuk dalam atribut bagian, sehingga perlu diatur melalui bagian yang sesuai dengan hentian bagian.

2. Apakah cukup dengan mengatur orientasi ke LANDSCAPE saja?

tidak cukup. Anda juga perlu menukar page_width dan page_height, jika tidak, ukuran kertas akan ditampilkan secara tidak benar saat Word dibuka, dan konten mungkin terpotong saat mengekspor PDF.

3. Mengapa Anda tidak bisa langsung mengatur arah horizontal ke bagian[0]?

Jika dokumen hanya memiliki satu bagian, memodifikasinya akan mempengaruhi keseluruhan dokumen. Transversal parsial perlu dipecah menjadi beberapa bagian independen menggunakan add_section() terlebih dahulu.

4. Apa yang harus saya lakukan jika header dan footer tidak sejajar secara horizontal?

Perubahan atribut bagian tidak mempengaruhi status link header. Anda perlu memeriksa pengaturan jarak antara header dan footer secara terpisah. Ini adalah masalah independen.

📝 Ringkasan

Kunci untuk membuat halaman tabel menjadi horizontal saja adalah dengan meletakkan konten target ke bagian terpisah dan menukar lebar, tinggi, dan orientasi pada saat yang bersamaan. Setelah menyimpan, baca kembali dan periksa bagian lainnya. Setelah verifikasi kode, Anda perlu mengonfirmasi efeknya dengan mata telanjang setelah mengekspor ke Word atau PDF.

Hubungkan OmniDoc ke asisten AI: buat dan modifikasi Word, Excel, dan PPT dalam satu kalimat

Diperbarui 2026-11-15