.python和word
一、初识docx
从docx模块中导入Document
from docx import Document
doc=Document()
print(f'doc的类型:{type(doc)}')
#添加标题
doc.add_heading('Python办公自动化之word篇',level=0)
doc.add_heading('一、初识docx',level=1)
#添加段落
pg1=doc.add_paragraph('关于Document类\n从docx中导入Document')
#设置段落字体
pg1.add_run('加粗字体').bold=True
pg1.add_run('普通字体')
pg1.add_run('斜体字体').italic=True
#在pg1上方插入段落
pg2=pg1.insert_paragraph_before('欢迎来到docx模块')
#添加分页符
doc.add_page_break()
doc.add_paragraph('第二页')
doc.save('Python办公自动化-word篇.doc')
注:doc.add_heading('',level)方法,level默认为1,范围为0-9,0表示文章题目。
二、整体页面结构介绍
from docx import Document
from docx.shared import RGBColor,Pt,Inches,Cm
from docx.enum.text import WD_PARAGTAPH_ALIGNMENT
form docx.oxml.ns import qn
doc=Document()
#更改字体(全局)
doc.styles['Normal'].font.name=u'宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'宋体')
#设置标题
heading=doc.add_heading('Word办公自动化-整体页面结构介绍',level=0)
heading.alignment=WD_PARAGRAPH_ALIGNMENT.CENTER
#新增段落,设置段落格式:首行缩进0.75cm,居左,段后距离1.0英寸,1.5倍行距。
pr1=doc.add_paragraph()
pr1.paragraph_format.first_line_indent=Cm(0.75)
pr1.paragraph_format.alignment=WD_PARAGRAPH_ALIGNMENT.LEFT
pr1.paragraph_format.space_after=Inches(1.0)
pr1.paragraph_format.line_spacing=1.5
text="更改字体:不但要更改doc.styles['Normal'].font.name\n"\
"还要用_element.rPr.rFonts.set()\n"\
"设置首行缩进:paragraph.paragraph_format.first_line_indent=Cm(0.75)\n"
#字体样式设置
r_1=pr1.add_run(text)
r_1.font.size=Pt(10) # 字号
r_1.font.bold=True
r_1.font.color.rgb=RGBColor(255,0,0)
print(len(pr1.runs)) # 查看段落拥有的run对象数量
print(pr1.runs[0].text) # 查看对应run对象的文本等属性
# 保存文件
doc.save('word办公自动化——整体布局.docx')
三、字体设置
from docx import Document
from docx.oxml.ns import qn
from docx.enum.style import WD_STYLE_TYPE
document = Document()
# 设置宋体字样式
style_font = document.styles.add_style('宋体', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '宋体'
document.styles['宋体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
# 设置楷体字样式
style_font = document.styles.add_style('楷体', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '楷体'
document.styles['楷体']._element.rPr.rFonts.set(qn('w:eastAsia'), u'楷体')
# 设置华文中宋字样式
style_font = document.styles.add_style('华文中宋', WD_STYLE_TYPE.CHARACTER)
style_font.font.name = '华文中宋'
document.styles['华文中宋']._element.rPr.rFonts.set(qn('w:eastAsia'), u'华文中宋')
paragraph1 = document.add_paragraph() # 添加段落
run = paragraph1.add_run(u'aBCDefg这是中文', style='宋体') # 设置宋体样式
font = run.font #设置字体
font.name = 'Cambira' # 设置西文字体
paragraph1.add_run(u'aBCDefg这是中文', style='楷体').font.name = 'Cambira'
paragraph1.add_run(u'aBCDefg这是中文', style='华文中宋').font.name = 'Cambira'
document.save('字体设置1.docx')
四、插入图片与表格
import docx
from docx import Document
from docx.shared import Inches
#打开文档
doc_1 = Document('周杰伦.docx') #上面脚本存储的文档
#新增图片
doc_1.add_picture('周杰伦.jpg',width=Inches(1.0), height=Inches(1.0))
# 创建3行1列表格
table1 = doc_1.add_table(rows=2, cols=1)
table1.style='Medium Grid 1 Accent 1' #表格样式很多种,如,Light Shading Accent 1等
# 修改第2行第3列单元格的内容为营口
table1.cell(0, 0).text = '营口'
# 修改第3行第4列单元格的内容为人民
table1.rows[1].cells[0].text = '人民'
# 在表格底部新增一行
row_cells = table1.add_row().cells
# 新增行的第一列添加内容
row_cells[0].text = '加油'
doc_1.save('周杰伦为营口加油.docx')
五、设置页眉页脚
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
document = Document()
header = document.sections[0].header # 获取第一个节的页眉
print('页眉中默认段落数:', len(header.paragraphs))
paragraph = header.paragraphs[0] # 获取页眉的第一个段落
paragraph.add_run('这是第一节的页眉') # 添加页面内容
footer = document.sections[0].footer # 获取第一个节的页脚
paragraph = footer.paragraphs[0] # 获取页脚的第一个段落
paragraph.add_run('这是第一节的页脚') # 添加页脚内容
document.add_section()
header = document.sections[1].header # 获取第2个节的页眉
header.is_linked_to_previous = False # 不使用上节内容和样式
paragraph = header.paragraphs[0]
paragraph.add_run('这是第二节的页眉')
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置页眉居中对齐
document.sections[1].footer.is_linked_to_previous = False
footer.paragraphs[0].add_run('这是第二节的页脚') # 添加第2节页脚内容
footer.paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置第2节页脚居中对齐
document.save('页眉页脚1.docx')
.python和pdf
一、批量拆分
import os
from PyPDF2 import PdfFileWriter, PdfFileReader
def split_pdf(filename, filepath, save_dirpath, step=5):
if not os.path.exists(save_dirpath):
os.mkdir(save_dirpath)
pdf_reader = PdfFileReader(filepath)
# 读取每一页的数据
pages = pdf_reader.getNumPages()
for page in range(0, pages, step):
pdf_writer = PdfFileWriter()
# 拆分pdf,每 step 页的拆分为一个文件
for index in range(page, page+step):
if index < pages:
pdf_writer.addPage(pdf_reader.getPage(index))
# 保存拆分后的小文件
save_path = os.path.join(save_dirpath, filename+str(int(page/step)+1)+'.pdf')
print(save_path)
with open(save_path, "wb") as out:
pdf_writer.write(out)
print("文件已成功拆分,保存路径为:"+save_dirpath)
filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
filepath = os.path.join(os.getcwd(), filename)
save_dirpath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告【拆分】')
split_pdf(filename, filepath, save_dirpath, step=5)
二、批量合并
import os
from PyPDF2 import PdfFileReader, PdfFileWriter
def concat_pdf(filename, read_dirpath, save_filepath):
pdf_writer = PdfFileWriter()
# 对文件名进行排序
list_filename = os.listdir(read_dirpath)
list_filename.sort(key=lambda x: int(x[:-4].replace(filename, "")))
for filename in list_filename:
print(filename)
filepath = os.path.join(read_dirpath, filename)
# 读取文件并获取文件的页数
pdf_reader = PdfFileReader(filepath)
pages = pdf_reader.getNumPages()
# 逐页添加
for page in range(pages):
pdf_writer.addPage(pdf_reader.getPage(page))
# 保存合并后的文件
with open(save_filepath, "wb") as out:
pdf_writer.write(out)
print("文件已成功合并,保存路径为:"+save_filepath)
filename = '易方达中小盘混合型证券投资基金2020年中期报告.pdf'
read_dirpath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告【拆分】')
save_filepath = os.path.join(os.getcwd(), '易方达中小盘混合型证券投资基金2020年中期报告-合并后.pdf')
concat_pdf(filename, read_dirpath, save_filepath)