python将xml+xsl转换成PDF的方法

时间:2022-01-22 03:27:52

这几天一直在找从xml+xsl转换成PDF文档的方案,最好是用python实现的,找了好多国外的网站,最终还是在csdn上找到了,看来还是自家兄弟靠谱啊,在此谢谢wyuan8913了:-):

转换过程:

1)python将xml,xsl文件转成html文件存储

http://blog.csdn.net/wyuan8913/article/details/7185288

2)python将html转成PDF,包含中文

http://blog.csdn.net/wyuan8913/article/details/7185655

详情如下:

 

python将xml,xsl文件转成html文件存储

分类: python 8人阅读 评论(0) 收藏 举报

前提:安装libxml2 libxstl

官方网站:http://xmlsoft.org/XSLT/index.html

安装包下载:http://xmlsoft.org/sources/

下面是windows平台的exe安装文件下载:

http://xmlsoft.org/sources/win32/python/

这是转载的测试代码:

[python] view plaincopy
  1. # -*- coding: mbcs -*-  
  2. #!/usr/bin/python  
  3.   
  4. import libxml2, libxslt  
  5.   
  6.   
  7. class compoundXML:  
  8.     def __init__(self):  
  9.         self._result = None  
  10.         self._xsl = None  
  11.         self._xml = None  
  12.          
  13.          
  14.     def do(self, xml_file_name, xsl_file_name):         
  15.         self._xml = libxml2.parseFile(xml_file_name)  
  16.         if self._xml == None:  
  17.             return 0  
  18.         styledoc = libxml2.parseFile(xsl_file_name)  
  19.         if styledoc == None:  
  20.             return 0  
  21.         self._xsl = libxslt.parseStylesheetDoc(styledoc)  
  22.         if self._xsl == None:  
  23.             return 0  
  24.   
  25.         self._result = self._xsl.applyStylesheet(self._xml, None)                 
  26.          
  27.     def get_xml_doc(self):  
  28.         return self._result             
  29.                
  30.     def get_translated(self):  
  31.         return self._result.serialize('UTF-8')         
  32.      
  33.     def save_translated(self, file_name):  
  34.         self._xsl.saveResultToFilename(file_name, self._result, 0)  
  35.          
  36.     def release(self):  
  37.         ''''' 
  38.         this function must be called in the end. 
  39.         '''  
  40.         self._xsl.freeStylesheet()  
  41.         self._xml.freeDoc()  
  42.         self._result.freeDoc()  
  43.         self._xsl = None  
  44.         self._xml = None  
  45.         self._result = None  
  46.              
  47. if __name__ == '__main__':  
  48.     test = compoundXML()  
  49.     test.do('test/testxmlutil.xml''test/testxmlutil.xsl')  
  50.     print test.get_translated()  
  51.     test.save_translated('test/testxmlutil.htm')  
  52.     test.release()  

这里有个问题是生成的html文件里的汉字从浏览器看都是乱码,首行加入

<metacharset="utf8"/>

即可正常显示。

 

python将html转成PDF,包含中文

分类: python 82人阅读 评论(0) 收藏 举报

前提:

安装xhtml2pdf

下载字体:code2000.ttf;给个地址:http://ishare.iask.sina.com.cn/f/22120225.html

待转换的文件:1.htm

[html] view plaincopy
  1. <meta charset="utf8"/>  
  2. <style type='text/css'>  
  3. @font-face {   
  4.         font-family: "code2000";   
  5.         src: url("code2000.ttf")   
  6. }   
  7.   
  8. html {   
  9.      font-family: code2000;   
  10. }   
  11. </style>  
  12. <html>  
  13. <body><table>  
  14. <tr>  
  15. <td>文字</td>  
  16. <td>123</td>  
  17. </tr>  
  18. <tr>  
  19. <td>图片</td>  
  20. <td><img src="1.jpg"></td>  
  21. </tr>  
  22. </table></body></html>  

html_to_pdf.py程序

[python] view plaincopy
  1. # -*- coding: utf-8 -*-   
  2. import sx.pisa3 as pisa   
  3. data= open('1.htm').read()  
  4. result = file('test.pdf''wb')   
  5. pdf = pisa.CreatePDF(data, result)   
  6. result.close()   
  7. pisa.startViewer('test.pdf')   

说明:xhtml2pdf不能识别汉字,需要在html文件中通过CSS的方式嵌入code2000字体,貌似只能用code2000,原因不明。