Đối với cùng một trang bảng ngang trong Word, không làm thay đổi hướng của toàn bộ bài viết.

Trong cùng một tài liệu Word, chỉ trang bảng phải ở hướng ngang. Đừng thay đổi toàn bộ bài viết sang hướng ngang. Bài viết này trước tiên tạo tất cả các phần, sau đó truy xuất phần đích theo chỉ mục, đặt hướng và chiều rộng và chiều cao của trang tương ứng, lưu và đọc lại, đồng thời xác nhận rằng không có phần nào khác bị thay đổi.

Khi chỉ một số trang nhất định trong tài liệu Word cần để theo hướng ngang, lỗi thường gặp nhất là thay đổi trực tiếp toàn bộ tài liệu sang hướng ngang hoặc xoay bảng rồi cắt nội dung. Bài viết này dành cho các nhà phát triển và nhóm tài liệu cần sử dụng python-docx để tự động xử lý bố cục Word. Nó giải thích cách chỉ thay đổi hướng trang của phần mục tiêu.

Chìa khóa để hiểu là phân biệt giữa ngắt trang và ngắt phần. Ngắt trang chỉ kiểm soát ngắt dòng và không mang hướng trang, khổ giấy và lề; các thuộc tính bố cục này được liên kết với "phần". Sau khi đọc bài viết này, trước tiên bạn có thể tạo tất cả các phần, sau đó trích xuất phần mục tiêu theo chỉ mục, đặt hướng, chiều rộng và chiều cao tương ứng và đọc lại sau khi lưu để xác nhận rằng các phần khác không bị thay đổi. Để biết chi tiết API liên quan đến phần, vui lòng tham khảo tài liệu chính thức của phần python-docx.

Kết luận trong một câu: Word chỉ làm trang bảng theo chiều ngang. Làm thế nào để thiết lập nó?

Chỉ tạo một phần riêng cho nội dung cần nằm ngang, hoán đổi chiều rộng và chiều cao và đặt hướng cho phần này và giữ các phần khác theo chiều dọc.

hoàn cảnh của bạnCác phương pháp được đề xuấtlý do
Không có ngắt phần trước và sau trang đíchĐầu tiên sử dụng add_section() để phân chia, sau đó đặt hướngThuộc tính bố cục được lưu trữ trong các phần. Bạn không thể chỉ thay đổi trang đích mà không chia các phần.
Chỉ LANDSCAPE được đặt nhưng chiều rộng và chiều cao không bị hoán đổiHoán đổi đồng thời page_width và page_heightChỉ cần thay đổi hướng sẽ dẫn đến khổ giấy sai và nội dung có thể bị cắt khi xuất PDF.
Bảng vẫn bị cắt bớt sau khi đặt hướng ngangKiểm tra lề trái và lề phải của phần hoặc giảm độ rộng bảngMã không thể xác định mối quan hệ phù hợp giữa biểu mẫu và bài viết cho bạn.
Tài liệu chứa các phần ngắt liên tục và hướng không bình thường.Thay đổi ngắt phần trang tiếp theo và xác nhận loại phần theo cách thủ côngNgắt phần liên tục mà không ngắt trang có thể dễ dàng gây ra sự lộn xộn về mặt hình ảnh.

Dấu ngắt phần là vật mang thực sự của các thuộc tính bố cục

Trong tiêu chuẩn OpenXML, phần tử <w:sectPr> xác định bố cục trang. Một tài liệu có thể chứa nhiều phần, mỗi phần có chiều rộng, chiều cao, hướng và lề riêng. Khi document.add_section() được gọi, python-docx sẽ tạo một <w:sectPr> mới ở cuối tài liệu hiện tại và nội dung được thêm vào sau đó sẽ thuộc về phần mới này.

Nếu bạn cố gắng thay đổi hướng bằng cách sửa đổi kiểu đoạn văn hoặc thuộc tính bảng thì thường không có tác dụng vì những đối tượng này không có trường để lưu trữ thông tin bố cục.

Logic hoạt động: đầu tiên chia thành các phần, sau đó lấy các phần và cuối cùng là đặt

  1. Định vị phạm vi nội dung cần nằm ngang.
  2. Đảm bảo nội dung này được gói trong một phần riêng biệt và phân chia bằng add_section() nếu cần.
  3. Trước tiên, hãy tạo tất cả các phần, sau đó lấy phần đích theo chỉ mục để tránh nhầm lẫn đối tượng sơ khai đã lưu trước khi thêm phần đó làm phần gốc.
  4. Hoán đổi page_width và page_height cho phần này và đặt orientation thành WD_ORIENT.LANDSCAPE.
  5. Sau khi lưu, hãy đọc lại tệp và kiểm tra xem hướng, chiều rộng và chiều cao của các phần khác có thay đổi hay không.

Lưu ý, chỉ thiết lập orientation mà không hoán đổi chiều rộng và chiều cao, Word sẽ hiển thị sai khổ giấy khi mở ra. Đây là điểm được nhấn mạnh nhiều lần trong bài viết này.

Ví dụ về bố cục khép kín

Đoạn mã sau xây dựng đầu vào trong bộ nhớ. Tất cả dữ liệu là mẫu tổng hợp. Các bản ghi đang chạy chỉ được sử dụng để minh họa logic lệnh gọi API và không thể hiện sự đảm bảo về tất cả các tệp thực hoặc hiệu ứng sản phẩm. Thư viện phụ thuộc là python-docx. Hãy chạy nó trong môi trường dự án bị khóa. Phiên bản phải hỗ trợ bảng liệt kê WD_ORIENT (0.8.11 trở lên).

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

Kịch bản nhập đúng: Tài liệu chứa ba phần, phần đầu tiên là văn bản dọc, phần thứ hai được đặt với các bảng rộng và phần thứ ba trở về dạng dọc. Kết quả mong đợi là orientation là CẢNH QUAN trong phần thứ hai và page_width lớn hơn page_height, và hai phần còn lại vẫn là PORTRAIT.

Đầu vào ranh giới một: Tài liệu chỉ có một phần. Việc đặt trực tiếp hướng ngang thành sections[0] sẽ khiến toàn bộ tài liệu trở thành hướng ngang. Trước tiên, bạn nên gọi add_section() để phân chia nội dung, sau đó vận hành các phần mới được tạo.

Đầu vào ranh giới hai: CẢNH QUAN được đặt nhưng kích thước dọc ban đầu được giữ lại. Mã phải xác minh page_width >= page_height làm vị ngữ.

📊 So sánh cốt lõi: ngắt trang và ngắt phần

ĐườngHướng trang có thể được thực hiện?Công dụng điển hìnhNhững điều cần lưu ý
Ngắt trangkhông thểChỉ kiểm soát việc gói nội dungKhông thể được sử dụng để chỉ tạo một trang theo chiều ngang
Ngắt phần trang tiếp theocó thểCảnh quan một phần, lề chuyển đổiBạn cần đặt riêng chiều rộng, chiều cao và hướng của phần.
ngắt phần liên tụccó thểChuyển đổi bố cục trong cùng một trangViệc không thay đổi trang có thể gây nhầm lẫn về mặt thị giác và cần phải đánh giá thủ công.

🎯 Phương pháp nào phù hợp với bạn?

nếu bạn……

  • Không có ngắt phần trước và sau trang đích: tách các phần trước, sau đó đặt hướng cho phần đích.
  • Tài liệu chỉ có một phần và chỉ cần nằm ngang một phần: Gọi add_section() trước, không sửa đổi trực tiếp sections[0].
  • Bảng bị cắt bớt theo hướng ngang: Kiểm tra lề trái và lề phải của phần hoặc giảm độ rộng của bảng.
  • Tài liệu chứa các ngắt phần liên tiếp: Đánh giá xem có nên thay đổi sang ngắt phần trang tiếp theo hay không và xác nhận thủ công.
  • Mã hóa tệp, hư hỏng cấu trúc XML hoặc các phần được macro tạo động: Sửa chữa hoặc chuyển đổi định dạng theo cách thủ công trước, mã trong bài viết này không áp dụng được.

❓ Câu hỏi thường gặp (FAQ)

1. Tại sao hướng trang không thay đổi sau khi thiết lập thuộc tính đoạn văn hoặc bảng?

Các đối tượng đoạn văn và bảng không có trường để lưu trữ thông tin bố cục. Hướng trang thuộc thuộc tính phần nên cần được đặt thông qua phần tương ứng với ngắt phần.

2. Chỉ đặt hướng thành LANDSCAPE có đủ không?

không đủ. Bạn cũng cần trao đổi page_width và page_height, nếu không kích thước giấy sẽ hiển thị không chính xác khi mở Word và nội dung có thể bị cắt khi xuất PDF.

3. Tại sao bạn không thể trực tiếp đặt hướng ngang cho các phần [0]?

Nếu tài liệu chỉ có một phần, việc sửa đổi nó sẽ ảnh hưởng đến toàn bộ tài liệu. Chuyển đổi một phần trước tiên cần được chia thành các phần độc lập bằng cách sử dụng add_section().

4. Nếu header và footer bị lệch ngang thì phải làm sao?

Những thay đổi trong thuộc tính của phần không ảnh hưởng đến trạng thái liên kết tiêu đề. Bạn cần kiểm tra riêng cài đặt khoảng cách giữa đầu trang và chân trang. Đây là một vấn đề độc lập.

📝 Tóm tắt

Chìa khóa để tạo một trang bảng chỉ nằm ngang là đặt nội dung mục tiêu vào một phần riêng biệt và hoán đổi chiều rộng, chiều cao và hướng cùng một lúc. Sau khi lưu lại, đọc lại và kiểm tra các phần khác. Sau khi xác minh mã, bạn cần xác nhận hiệu ứng bằng mắt thường sau khi xuất sang Word hoặc PDF.

Kết nối OmniDoc với trợ lý AI: tạo và sửa đổi Word, Excel và PPT trong một câu

Cập nhật lúc 2026-11-15