#!python3

#-*- coding:utf8 -*-

#PyPDF2可能会打不开某些pdf文档,也不能提取图片,图表或者其他媒介从PDF文件中。但是它能提取文本从PDF中,转化为字符。

import PyPDF2

#以二进制方式 读模式打开一个pdf文件

pdfFileObj=open('e:\work\data_service.pdf','rb')

#读取pdf文档

pdfReader=PyPDF2.PdfFileReader(pdfFileObj)

#返回的是pdf文档的总页数

print(pdfReader.numPages)

#获取单页的内容,页码数从0开始

pageObj=pdfReader.getPage(0)

#返回单页的文本内容

pageObj.extractText()

#对于有加密的pdf文档其读对象有属性 isEncrypted

print(pdfReader.isEncrypted) #若有加密,则属性值为True。直接获取某页的文本内容会报错。

#通过方法decrypt()传递解密密码后可正常获取文本内容,密码以字符串形式传入。

#pdfReader.decrypt('rosebud')

#写pdf文档

#创建pdf写对象

pdfWriter=PyPDF2.PdfFileWriter()

for pageNum in range(pdfReader.numPages):

pageObj=pdfReader.getPage(pageNum)

#向pdf写对象里添加内容(内容为pdf某个页面对象)

pdfWriter.addPage(pageObj)

#pdfWriter.addPage(pdfReader.getPage(3))

#创建新的pdf文件

pdfOutputFile=open('combinedminutes.pdf','wb')

#将pdf写对象中的内容加进新建的pdf文件中

#pdfWriter.write(pdfOutputFile) 此语句写入失败

#写完后关闭pdf文件

pdfOutputFile.close()

#word文档读写

import docx

doc=docx.Document('C:\\Users\\li.wu\\Desktop\\有趣的植物.docx')

#文档的总段落数

print(len(doc.paragraphs))

#可以一段一段的返回文本内容

print(doc.paragraphs[0].text)

#'第一章\xa0\xa0了解MySQL'

#每个段落都有一个runs属性,runs的长度表示这个段落的格式的变化次数。

len(doc.paragraphs[1].runs)

#10

#每个runs元素也都有一个text属性

print(doc.paragraphs[1].runs[0].text)

#'\xa0\xa0\xa0'

#如果只关心文档中的内容,不在意格式的话,可以写一个函数直接获取整段文本:

def getText(filename):

doc=docx.Document(filename)

fullText=[]

for para in doc.paragraphs:

fullText.append(para.text)

return '\n'.join(fullText)

a=getText('e:\work\mysqll.docx')

print(a.encode('utf-8'))

'''

默认的字体的类型有:

'Normal' 'Heading5' 'ListBullet' 'ListParagraph' 'BodyText' 'Heading6' 'ListBullet2' 'MacroText' 'BodyText2' 'Heading7'

'ListBullet3' 'NoSpacing' 'BodyText3' 'Heading8' 'ListContinue' 'Quote' 'Caption' 'Heading9' 'ListContinue2' 'Subtitle'

'Heading1' 'IntenseQuote' 'ListContinue3' 'TOCHeading' 'Heading2' 'List' 'ListNumber' 'Title' 'Heading3' 'List2'

'ListNumber2' 'Heading4' 'List3' 'ListNumber3'

'''

#有3种类型的风格,段落风格可以应用于Paragraph对象,个性风格可以应用于Run对象。关联风格可以应用于前两种风格。

#设置风格属性时,风格类型名中间不要使用空格,例Subtle Emphasis ,入参应写成'SubtleEmphasis'

#Paragraph和Run对象都有属相style,通过设置style的值可以设置段落和文字的格式。

#当使用关联风格属性应用于Run对象时,需要在风格名后加上’Char'。例如要将Quote类的关联风格应用于Paragraph对象时,使用paragraphObj.style='Quote',

#但是应用于Run对象时,应该使用runObj.style='QuoteChar'.

#目前的Python-Docx(0.7.4)只支持默认的word风格。

#run对象的text属性,每个text属相有三种值 True(打开) False(关闭) None(默认值)

#run对象的text属性:

'''

bold            : The text appears in bold.

italic          : The text appears in italic.

underline       : The text is underlined.

strike          : The text appears with strikethrough.

double_strike   : The text appears with double strikethrough.

all_caps        : The text appears in capital letters.

small_caps      : The text appears in capital letters, with lowercase letters two points smaller.

shadow          : The text appears with a shadow.

outline         : The text appears outlined rather than solid.

rtl             : The text is written right-to-left.

imprint         : The text appears pressed into the page.

emboss          : The text appears raised off the page in relief.

'''

doc.paragraphs[1].runs[0].underline=True

doc.save('restyled.docx')

#创建新的word文档

doc=docx.Document()

#添加段落

doc.add_paragraph('Hello world!')

a=doc.add_paragraph('this is a second paragraph')

#在段落后添加语句

a.add_run('This text is being addded to the second paragraph')

#添加段落时可设置段落格式

doc.add_paragraph('Hello world !','Title')

#add_heading()方法是以某一种标题格式添加一个段落数据范围从0~4,0是主标题,4是第4级副标题。

doc.add_heading('Header 0',0) #格式为标题1

doc.add_heading('Header 1',1) #格式为标题2

#通过在第一个末尾设置一个break,转到下一页

doc.paragraphs[2].runs[0].add_break(docx.enum.text.WD_BREAK.PAGE)

#Enumeration – WD_BREAK_TYPE

'''

WD_BREAK.LINE

WD_BREAK.LINE_CLEAR_LEFT

WD_BREAK.LINE_CLEAR_RIGHT

WD_BREAK.TEXT_WRAPPING (e.g. LINE_CLEAR_ALL)

WD_BREAK.PAGE

WD_BREAK.COLUMN

WD_BREAK.SECTION_NEXT_PAGE

WD_BREAK.SECTION_CONTINUOUS

WD_BREAK.SECTION_EVEN_PAGE

WD_BREAK.SECTION_ODD_PAGE

'''

doc.add_paragraph('This is on the second page!')

#添加图片到文档末尾(宽设置为4英寸,高设置为1厘米)高与宽可以不设置,则为常规大小。

doc.add_picture('e:\work\code.jpg',width=docx.shared.Inches(4),height=docx.shared.Cm(1))

doc.save('e:\work\helloworld.docx')

pdf及word文档的读取 pyPDF2,docx的更多相关文章

  1. Python处理PDF和Word文档常用的方法

    Python处理PDF和Word文档的模块是PyPDF2,使用之前需要先导入. 打开一个PDF文档的操作顺序是:用open()函数打开文件并用一个变量来接收,然后把变量给传递给PdfFileReade ...

  2. 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法

    判断pdf.word文档.图片等文件类型(格式).大小的简便方法 很久没发文了,今天有时间就写一下吧. 关于上传文件,通常我们都需要对其进行判断,限制上传的类型,如果是上传图片,我们甚至会把图片转化成 ...

  3. Python处理PDF和Word文档常用的方法(二)

    Python处理word时,需要安装和导入python-docx模块. 安装命令:pip install python-docx 导入命令:import docx 编码编写顺序:用docx.Docum ...

  4. 关于WORD文档的读取乱码问题

    一直以来都是用File类操作txt文档,今天想尝试能不能打开word文档,无奈,尝试了UTF8,Unicode,Default....等编码方式,打开文件都是乱码,电脑甚至发出警报声. 以下只取一种编 ...

  5. SpringBoot整合openoffice实现word文档的读取和导入及报错处理

    先安装openoffice4 Linux系统安装参考:https://www.cnblogs.com/pxblog/p/11622969.html Windows系统安装参考:https://www. ...

  6. poi导出word文档,doc和docx

    maven <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency> <gro ...

  7. PDF转word文档

    本文未对扫描版的PDF实验,但是可编辑PDF版本可以转换为word而且转换后的word是可编辑的. 1.从http://xiazai.zol.com.cn/detail/33/326858.shtml ...

  8. word文档操作-doc转docx、合并多个docx

    前言: 临时来了一条新的需求:多个doc文档进行合并. 在网上苦苦搜罗了很久才找到可用的文件(原文出处到不到了 所以暂时不能加链接地址了),现在记录下留给有需要的人. 一:doc转docx 所需jar ...

  9. word文档转pdf,支持.doc和.docx,另附抽取pdf指定页数的方法

    公司有个需求,需要将word转成pdf并且抽取首页用以展示,word文档有需要兼容.doc和.docx两种文档格式.其中.docx通过poi直接就可以将word转成pdf,.doc则无法这样实现,上网 ...

随机推荐

  1. 第 3 章 镜像 - 015 - 调试 Dockerfile

    如何 debug Dockerfile 通过 Dockerfile 构建镜像的过程 从 base 镜像运行一个容器 执行命令对容器做修改 执行类似 docker commit 的操作,生成一个新的镜像 ...

  2. C# 递归缩小图片

    需求:图片太大,上传到服务器会非常占用服务器空间,而系统又不要求高清图片,于是就通过递归的方式让图片每次减少10%的大小,当图片大小小于100k的时候就保存在本地,核心代码如下: class Prog ...

  3. English trip V1 - B 14. There Are Flowers in My Office 我办公室里有花 Teacher:Lamb Key: There be(is/are)

    In this lesson you will learn to describe a room or place. 这节课讲学习描述一个房间或地方 课上内容(Lesson) 1. Where do ...

  4. 20170821xlVBA隐藏空行

    Sub HideBlankRowsBetweenUsedRange() Dim URows As Range, i As Long, EndRow As Long With ActiveSheet E ...

  5. apply、call

    call(),apply() 1.每个函数都包含两个非继承而来的方法:call()和apply() 2.在特定的作用域内调用函数,等于设置函数体内的this对象,以扩充函数赖以运行的作用域 3.app ...

  6. caffe---mnist数据集训练与测试

    1.数据.mnist_test_lmdb和mnist_train_lmdb数据 2.路径. (1)修改lenet_train_test.prototxt文件,训练和测试两处 source: " ...

  7. PHP工厂模式的使用场景,使用方法

    所谓工厂模式和生产有关.生产什么呢?生产出来的是一个实例对象.通过什么设备生产?通过一个工厂类生产simpleFactoty.怎么生产呢?工厂类调用自身静态方法来生产对象实例static functi ...

  8. 深入解析 composer 的自动加载原理 (转)

    深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...

  9. 漏洞复现——bash远程解析命令执行漏洞

    漏洞描述:Bash脚本在解析某些特殊字符串时出现逻辑错误导致可以执行后面的命令,在一些cgi脚本中,数据是通过环境变量来传递的,这样就会形成该漏洞 漏洞原理:bash通过以函数名作为环境变量名,以“( ...

  10. React Native之FlexBox布局

    参考原文链接:https://www.cnblogs.com/wujy/p/5841685.html 弹性盒模型(The Flexible Box Module),又叫Flexbox,意为“弹性布局” ...