Python实现word转pdf

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星的项目)来完成这个功能,哈哈忍不了,透漏一下。

每天努力一点,每天都在进步。

发布了156 篇原创文章 · 获赞 50 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/dingjianmin/article/details/103315562
今日推荐