Python將word文檔批量轉PDF


前面有一篇<Python批量創建word文檔(2)- 加圖片和表格>的文章,利用這篇文章創建的word文檔來批量轉PDF文檔。代碼:

  1 '''
  2     #python批量將word文檔轉換成PDF文件
  3 '''
  4 #導入所需庫
  5 from docx import Document
  6 from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
  7 from docx.shared import Pt
  8 from docx.shared import Inches
  9 from docx.oxml.ns import qn
 10 from win32com.client import Dispatch, constants, gencache
 11 import os
 12 import time
 13 
 14 #定義今日黃金價格
 15 price = input("請輸入今日黃金價格: ")
 16 #定義今日日期
 17 today = time.strftime("%Y{y}%m{m}%d{d}",time.localtime()).format(y='',m='',d='')
 18 #定義客戶列表
 19 company_list = ['張三','李四','王五','趙六','許七']
 20 
 21 
 22 #開始循環列表,每循環一次創建一個word文檔
 23 for customer in company_list:
 24     #開始創建word文檔
 25     document = Document()
 26     #定義文檔初始格式
 27     document.styles['Normal'].font.name = '微軟雅黑'
 28     document.styles['Normal'].font.size = Pt(12)
 29     #設置文檔中文字體默認格式
 30     document.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'),u'微軟雅黑')
 31 
 32     #增加圖片
 33     document.add_picture('D:/Python代碼素材/word自動化辦公/banner.jpg', width=Inches(6))
 34 
 35     #向文檔中增加第一自然段
 36     p1 = document.add_paragraph()
 37     #設置第一自然段格式
 38     p1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
 39     #向第一自然段添加內容
 40     run1 = p1.add_run('關於下達%s的價格通知' % today )
 41     #設置內容格式
 42     run1.font.name = '黑體'
 43     run1.font.size = Pt(25)
 44     run1.font.bold = True
 45     #設置中文字體格式
 46     run1._element.rPr.rFonts.set(qn('w:eastAsia'),u'黑體')
 47 
 48     #設置第一自然段的段前段后距離
 49     p1.space_after = Pt(5)
 50     p1.space_before = Pt(5)
 51 
 52     #增加第二自然段
 53     p2 = document.add_paragraph()
 54     #設置第二自然段格式
 55     p2.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
 56     #增加內容
 57     run2 = p2.add_run('尊敬的: ' + customer + ', 您好!')
 58     #設置內容格式
 59     run2.font.name = '微軟雅黑'
 60     run2.font.size = Pt(18)
 61     run2.font.bold = True
 62     #設置中文字體格式
 63     run2._element.rPr.rFonts.set(qn('w:eastAsia'),u'微軟雅黑')
 64 
 65     #增加第三自然段
 66     p3 = document.add_paragraph()
 67     #設置第三自然段對齊方式
 68     p3.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
 69     #增加內容
 70     run3 = p3.add_run('    為提供優質客戶服務,我公司現將%s的黃金價格通知如下!' % today)
 71     #設置格式
 72     run3.font.name = '仿宋_GB2312'
 73     run3.font.size = Pt(16)
 74     run3.font.bold = True
 75     #設置中文格式
 76     run3._element.rPr.rFonts.set(qn('w:eastAsia'),u'仿宋_GB2312')
 77 
 78     #增加表格
 79     table = document.add_table(rows=3,cols=3,style="Table Grid")
 80     #合並第一列的單元格
 81     table.cell(0, 0).merge(table.cell(0, 2))
 82     #設置合並后的單元格的格式
 83     table.cell(0, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
 84     #向合並后的單元格內寫入內容
 85     table_run = table.cell(0, 0).paragraphs[0].add_run('關於下達%s的價格通知' % today)
 86     #設置字體
 87     table_run.font.name = '隸書'
 88     table_run.font.size = Pt(15)
 89     table_run.font.bold = True
 90     #設置中文字體格式
 91     table_run._element.rPr.rFonts.set(qn('w:eastAsia'),u'隸書')
 92 
 93     #開始向其他單元格寫入內容,設置每個單元格的文字內容居中
 94     table.cell(1, 0).text = '日期'
 95     table.cell(1, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
 96     table.cell(1, 1).text = '價格'
 97     table.cell(1, 1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
 98     table.cell(1, 2).text = '備注'
 99     table.cell(1, 2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
100 
101     table.cell(2, 0).text = today
102     table.cell(2, 0).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
103     table.cell(2, 1).text = price
104     table.cell(2, 1).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
105     table.cell(2, 2).text = '這里是備注'
106     table.cell(2, 2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
107 
108     #增加第四自然段
109     p4 = document.add_paragraph()
110     #設置第四自然段靠右對齊
111     p4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT
112     #第四自然段增加內容
113     run4 = p4.add_run('(聯系人:小劉    電話:18888888888)')
114     #設置字體格式
115     run4.font.name = '幼圓'
116     run4.font.size = Pt(16)
117     run4.font.bold = True
118     #設置中文字體格式
119     run4._element.rPr.rFonts.set(qn('w:eastAsia'),u'幼圓')
120 
121     #增加分頁符
122     document.add_page_break()
123     #在分頁后增加第五自然段
124     p5 = document.add_paragraph()
125     #設置第五自然段對齊方式
126     p5.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
127     #增加第五自然段內容
128     run5 = p5.add_run()
129     run5.font.name = '方正舒體'
130     run5.font.size = Pt(30)
131     run5.font.bold = True
132     run5._element.rPr.rFonts.set(qn('w:eastAsia'),u'方正舒體')
133 
134     #判定要存儲的文件是否存在,如果存在就刪除
135     if os.path.exists('%s-%s-價格通知.docx' % (customer, today)):
136         os.remove('%s-%s-價格通知.docx' % (customer, today))
137     #休眠五秒以待代碼完成
138     time.sleep(1)
139 
140     #保存文檔
141     document.save('%s-%s-價格通知.docx' % (customer, today))
142 
143     #利用保存后的word文檔轉換PDF
144     #先找word文檔位置
145     docx_path = '%s-%s-價格通知.docx' % (customer, today)
146     #要保存pdf文件的位置
147     pdf_path = '%s-%s-價格通知.pdf' % (customer, today)
148     #調用gencache指向office功能
149     gencache.EnsureModule('{00020905-0000-0000-C000-000000000046}', 0, 8, 4)
150     #調用word控件
151     wd = Dispatch('Word.Application')
152     #以只讀方式打開word文檔
153     doc = wd.Documents.Open(docx_path, ReadOnly=1)
154     #導出生成的pdf文檔
155     doc.ExportAsFixedFormat(pdf_path, constants.wdExportFormatPDF, Item=wdExportDocumentWithMarkup,
156                             CreateBookmarks=constants.wdExportCreateHeadingBookmarks)
157     wd.Quit(constants.wdDoNotSaveChanges)
158     time.sleep(5)
159     if os.path.exists('%s-%s-價格通知.docx' % (customer, today)):
160         os.remove('%s-%s-價格通知.docx' % (customer, today))
161         

完工。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM