python-docx 在 2 列布局文档中添加标题

python-docx add title in a 2 column layout document

我一直在浏览 python-docx docs,但找不到在 2 列布局文档中插入标题的方法。

我尝试了几种方法来获得解决方法,其中 none 有效。每当我使用 python-docx 创建 2 列布局并尝试为文档添加标题时,标题不会添加到文档的顶部中心,它实际上被添加到左侧的第一列。

下面是我用来生成文档的代码。

from docx import Document
from docx.shared import Inches
from docx.shared import Pt
from docx.enum.section import WD_SECTION
from docx.oxml.ns import qn

doc = Document()

# Title
title = doc.add_heading('THIS IS THE TITLE')

section = doc.sections[0]

sectPr = section._sectPr
cols = sectPr.xpath('./w:cols')[0]
cols.set(qn('w:num'),'2')

# Left column
par1 = doc.add_paragraph('FIRST PAR IN THE LEFT COLUMN(testingtestingtestingtestingtestingtestingtestingtestingtestingtesting)')

# Right column
current_section = doc.sections[-1]  
current_section.start_type
new_section = doc.add_section(WD_SECTION.NEW_COLUMN)
new_section.start_type

par2 = doc.add_paragraph('FIRST PAR IN THE RIGHT COLUMN(testingtestingtestingtestingtestingtestingtestingtestingtestingtesting)')

# Save Doc
doc.save('demo.docx')

下图显示了代码的结果。

有什么方法可以将标题插入文档的顶部中心,或者我需要使用模板才能做到这一点吗?

编辑(解决方案):

Scanny 指出我应该将每个元素隔离在其自己的部分中。请在下面找到生成带有标题的 2 列文档的代码。

from docx import Document
from docx.shared import Inches
from docx.shared import Pt
from docx.enum.section import WD_SECTION
from docx.oxml.ns import qn
import pdf2docx

doc = Document()
# First Section
new_section = doc.add_section(WD_SECTION.CONTINUOUS)
new_section.start_type

p1 = doc.add_heading('This is the title!!!!!!!!!!!!!')
p1.alignment = 1

# Second Section
new_section = doc.add_section(WD_SECTION.CONTINUOUS)
new_section.start_type
section = doc.sections[2]

# Set to 2 column layout
sectPr = section._sectPr
cols = sectPr.xpath('./w:cols')[0]
cols.set(qn('w:num'),'2')

p1 = doc.add_paragraph('This is the 1st para')
p1.alignment = 1

# Third Section
new_section = doc.add_section(WD_SECTION.NEW_COLUMN)          
new_section.start_type


p1 = doc.add_paragraph('This is the 2nd para')
p1.alignment = 1


# Save
doc.save('demo.docx')

感谢Scanny

您需要为 (1-col) 标题和 (2-col) body 单独的部分。节上有一个设置来指定它之前的中断类型,例如 section.start_type = WD_SECTION.CONTINUOUS。我相信需要继续 second 部分