Python办公自动化 Task3 python和word和pdf

.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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值