Python实现word转pdf
在做word转未pdf的功能过程中找了很多java的实现(POI),对于普通的文档还是支持的还可以,但是对于文档里面涉及图片、表格、水印等就会出现很多样式上的问题,字体重复,水印丢失,表格位置错乱等。
1、poi用到的转pdf的相关代码如下:
public static byte[] docx2pdf(byte[] docxBytes) throws XWPFConverterException, IOException {
PdfOptions options = PdfOptions.create();
XWPFDocument document = new XWPFDocument(new ByteArrayInputStream(docxBytes));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// XHWPFDocument doc = new XHWPFDocument(new ByteArrayInputStream(docxBytes));
//document.getp
//XWPFHeaderFooterPolicy xFooter = new XWPFHeaderFooterPolicy(document);
/* XWPFHeader defaultHeader = xFooter.getDefaultHeader();
defaultHeader.getParagraphArray(0).getCTP().getRArray(0).getPictArray().
XWPFParagraph item = defaultHeader.getParagraphArray(0).getCTP().getRArray(0).getPictArray();
document.setParagraph(item, document.getPosOfParagraph(document.getLastParagraph()) -2);*/
//xFooter.createWatermark("复制");
PdfConverter.getInstance().convert(document, baos, options);
return baos.toByteArray();
}
2、经过了很多次的努力发现还是解决不了上面的问题(功力不够呀,请有解决方法的猿友不吝赐教!),所以不再java上做努力了,经过研究发现用Python可以比较好的实现word转pdf的需求,可是我对于Python一点不熟,学习了一天多,了解了一些基本语法,当然又找了不少的资料,还真是挺多的,word转pdf,转html,pdf转word等等,其他怎么看,就找到了一篇word转pdf的开始研究,Python确实比Java方便多了,只要把以来导入,尽可以执行了,未来调试代码,我就用idea搭起来了Python项目。
python代码如下:
# -*- encoding: utf-8 -*-
import os
import sys
from win32com import client
# pip install win32com
def templateDoc2pdf(doc_name, pdf_name):
"""
:word文件转pdf
:param doc_name word文件名称
:param pdf_name 转换后pdf文件名称
"""
try:
word = client.DispatchEx("Word.Application")
if os.path.exists(pdf_name):
os.remove(pdf_name)
worddoc = word.Documents.Open(doc_name, ReadOnly=1)
worddoc.SaveAs(pdf_name, FileFormat=17)
worddoc.Close()
return pdf_name
except:
return 1
templateDoc2pdf(sys.argv[1], sys.argv[2])
这个是封装后的代码,是供Java代码调用。
原始代码如下,可以直接运行:
# -*- encoding: utf-8 -*-
import os
from win32com import client
#pip install win32com
def doc2pdf(doc_name, pdf_name):
"""
:word文件转pdf
:param doc_name word文件名称
:param pdf_name 转换后pdf文件名称
"""
try:
word = client.DispatchEx("Word.Application")
if os.path.exists(pdf_name):
os.remove(pdf_name)
worddoc = word.Documents.Open(doc_name,ReadOnly = 1)
worddoc.SaveAs(pdf_name, FileFormat = 17)
worddoc.Close()
return pdf_name
except:
return 1
def main():
input = r'E:/大仓租赁合同(1).docx'
print(input);
output = r'E:/Python.pdf'
print(output);
rc = doc2pdf(input, output)
print(rc);
# rc = doc2html(input, output)
# rc = pdf2doc(input, output)
if rc:
print('转换成功')
else:
print('转换失败')
if __name__ == '__main__':
main()
这个可以直接双击调用,就会在指定目录生成pdf文件,完美转化,样子简直和wps转出来的pdf一毛一样,哈哈哈,开心的开始搞代码。
用Java开始调用python,调用代码如下:
@Override
public void word2Pdf(String pythonFilePath, String docPath, String pdfPath) {
File file = new File(pdfPath);
String[] arguments = new String[] {"python",pythonFilePath, docPath, "e:/doc/测试11.pdf"};
try {
Runtime.getRuntime( ).exec(arguments);
} catch (Exception e) {
e.printStackTrace( );
}
}
这样就实现Java调用python实现word转pdf的功能拉。
但是,本来这样就完美了,但是,但是,这些代码,python代码所依赖的包都是Windows系统的包,这些代码放到Linux系统上是支持不了的,坑爹啊,快搞完了,才知道这些。。。。
但是还是有方案滴,这里就先不透露了,因为还在改,下篇我们再聊,其实我们用了kkFileView(一个2k星的项目)来完成这个功能,哈哈忍不了,透漏一下。