在PHP环境下自动导入word文档到数据库.doc_第1页
在PHP环境下自动导入word文档到数据库.doc_第2页
在PHP环境下自动导入word文档到数据库.doc_第3页
在PHP环境下自动导入word文档到数据库.doc_第4页
在PHP环境下自动导入word文档到数据库.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在PHP环境下自动导入word文档到数据库最近在搭建自己的博客网站,经过比较放弃了大家都在使用的wordpress,转而使用轻巧的typecho,轻巧意味着运行速度快,但相应的功能一定就比较贫乏。所以很多功能需要自己动手来创建。我的很多文档都是在word中编写的,相信直接在网站后台编辑文章的人肯定是极少的。现在要把这些文档再发布到博客上,难道又要再进行一次编辑吗?而且我的文档中还有非常多图,这实在是太麻烦了。所以我想到了用PHP直接解析WORD文档,然后把它转化为HTML网页再存入数据库中,一键搞定,这才是高大上的节奏。于是我到网上去搜索“导入DOC文档到数据库”,发现网上的资料绝大部分是基于JAVA的,比如APACHE的POI实现,比如docx4j实现,使用这些jar包可以快速的实现导入.doc文档。当然还有微软的当家编程语言C#,操作DOC文档也是很方便的,甚至还有SDK。但因为网站所用的虚拟主机是PHP系统的,而且对JAVA和C#编程不是非常熟悉,所以决定还是使用PHP来实现这个功能。在编程之前先找找前人做的工作是非常有必要的,在wordpress上有实现这个功能的插件,于是我下载了这个插件,基于这个插件就可以做出自己的程序。暴料一下,这个插件名是“docx-to-html-free”。我还在github上找到好几个实现这样功能的代码。逐一尝试后发现,这些代码都工作的不是非常好,而且分析这些代码后发现.docx文档其实是一外zip压缩文档,里面存放的是一些xml文件和资源文件,而PHP对zip和xml都有很好的支持,所以实现这样的功能并不是一件非常困难的事。在编写程序之前,最关键的还是要分析.docx文件的结构,然后针对它的结构写出针对的分析程序,经过分析我发现,把.docx文档解压后,文档主要内容存放在word/document.xml中,图片等资源存放在word/media/文件夹中,资源的索引存放在word/_rels/document.xml.rels中,项目编号样式存放在numbering.xml中,这些是最主要的一些文件,其它文件不一一列举了。Office2007以后,.docx文件以XML文本格式存储,这样就可以使用外部程序创建或打开Word文件,而不需要使用Word的对象。也能够自由的打开分析Word文件,或者发布到自己的Web页面,或者其他更多应用。一个典型的WordXML结构可以是如下的样子: Hello, World. 这是最简单的WordXML内容,它包括这几部分:XML的声明和名称空间的指明:文档内容基本节点类型从body内可以看出,构成实际文本内容的有3中类型节点: 表示一个段落 表示一个样式串,指明它包括的文本的显示样式 表示真正的文本内容如果我们需要指明一个文本为粗体,需要怎么办呢? 2.0C 表示该格式串种的文本为粗体。这样,我们就知道表示一个特定的文本格式,稍微复杂点的格式: 2.0C字体为粗体,尺寸为是40除2等于20相当于几号字体?,字体名称“Arial” 2.0C中的xml:space=preserve从字面上理解是保持空格。如果没有这内容的话文本的前后空格将会被Word忽略。如果我们需要指定一个段的对齐方式,行距要怎么办呢?这就要设置的属性了。类似于这样:对齐方向: 这儿是右对齐。行距: 600是用行距的倍数乘240得出,如果是两倍行距,则是480。这儿应该是2.5倍行距。由此可见,组装一个WordXML格式的文件是一件比较简单的事情。将段属性包含在中将文本格式包含在中这儿的Pr是property的意思,表示这个块中是r(run)或p(paragraph)的格式设置。表格是通过 tbl 元素定义的,它与 HTML 标记类似。表元素指定文档中存在的表的位置。tbl 元素具有两个定义其属性的元素:tblPr 和 tblGrid,前者定义表范围的一组属性(如样式和宽度),后者定义表的网格布局。tbl 元素还可包含任意(非零)数目的行,其中每行使用 tr 元素来指定。每个 tr 元素可包含任意非零个单元格,其中每个单元格使用 tc 元素来指定。docx插图方式与inline和anchor关系inline:内联,此种插图方式对插入的图片位置不能灵活控制,只能通过段设置,对应word的嵌入型插图。anchor:锚,此种插图方式对插入的图片位置能灵活控制,对应word的四周型、紧密型、穿越型等。表示嵌入一个图片在_rels/document.xml.rels这里定义了用到的图片资源,如下:这样就可以定位到这个图片表示这个图片的大小 其中360000表示1厘米,2.54厘米表示96个像素也表示图片大小需要和上面的标签一致,而且这是个必要项,如删除将出错表示插入形状v:group 表示形状进行了组合v:rect style=position:absolute;left:1755;top:9795;width:2475;height:915 表示一个矩形locateName($resourseFile),根据索引取出文件内容$zip-getFromIndex($resourses),解压其中的某些文件$zip-extractTo(./,array(word/.$path);而XML的读取在PHP中有四种方法,分别的XML Expat Parser、SimpleXML、XMLReader、DOMDocument,这里的第一种方法实在是太老旧了,一般我们都不会用这种方法,SimpleXML和DOMDocument需要把文件全部加载到内存中,如果DOCX文件太大,这时就会有问题,而且SimpleXML很难处理有命名空间的XML文件。最终我还是选择了XMLReader类来读取XML文件。它主要使用循环$reader-read()来读全部节点,然后在循环中检查$reader-name是否是你想要的节点名,以及是进入节点$reader-nodeType=XMLReader:ELEMENT,还是退出节点$reader-nodeType=XMLReader:END_ELEMENT,当发现文本节点时,可以通过$reader-readString()来读取文本。经过一星期的努力,终于实现了.docx文件上传并转换为HTML存入数据库中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论