1. 程式人生 > 實用技巧 >Python將word文件批量轉PDF

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

完工。