生成效果:
生成代碼
from docx import Document
from docx.shared import Inches,Pt
from docx.oxml.ns import qn
from django.http import HttpResponse,FileResponse
import cStringIO, urllib2
import datetime
import os
def WordDownload(req):
doc = Document() # 建立模板對象
chg_font(doc.styles['Normal'], fontname=u'宋體', size=12) # 設置默認字體
paragraph1 = doc.add_paragraph()
run1 = paragraph1.add_run(u'基本信息')
chg_font(run1, fontname=u'微軟雅黑', size=16)
paragraph2 = doc.add_paragraph()
lister = [u'作者姓名:%s' % doctor_user.realname, u'所在地區:%s' % doctor_user.area,
u'所在醫院:%s' % doctor_user.hospital_name, u'所在科室:%s' % doctor_user.department,
u'手機號碼:%s' % doctor_user.telephone, u'個人積分:%s' % doctor_user.integral,
u'作者照片:', u'作者簡介:%s' % healer.introduce]
for an in lister: #
if u'照片' in an:
run = paragraph2.add_run(an)
run.add_break()
if wx_urls:
file = urllib2.urlopen(wx_urls)
tmpIm = cStringIO.StringIO(file.read())
run.add_picture(tmpIm, width=Inches(0.8))
else:
paragraph2.add_run(u"沒有照片")
run.add_break() # 添加換行
else:
run = paragraph2.add_run(an)
run.add_break()
# ---第一部分 基本信息 ----#
paragraph1 = doc.add_paragraph()
run1 = paragraph1.add_run(u'基本信息')
chg_font(run1, fontname=u'微軟雅黑', size=16)
paragraph2 = doc.add_paragraph()
lister = [u'作者姓名:%s' % doctor_user.realname, u'所在地區:%s' % doctor_user.area,
u'所在醫院:%s' % doctor_user.hospital_name, u'所在科室:%s' % doctor_user.department,
u'手機號碼:%s' % doctor_user.telephone, u'個人積分:%s' % doctor_user.integral,
u'作者照片:', u'作者簡介:%s' % healer.introduce]
for an in lister: #
if u'照片' in an:
run = paragraph2.add_run(an)
run.add_break()
if wx_urls:
file = urllib2.urlopen(wx_urls)
tmpIm = cStringIO.StringIO(file.read())
run.add_picture(tmpIm, width=Inches(0.8))
else:
paragraph2.add_run(u"沒有照片")
run.add_break() # 添加換行
else:
run = paragraph2.add_run(an)
run.add_break()
# ---第二部分 投稿詳情 ----#
paragraph3 = doc.add_paragraph()
run3 = paragraph3.add_run(u'投稿詳情')
chg_font(run3, fontname=u'微軟雅黑', size=16)
paragraph4 = doc.add_paragraph()
run = paragraph4.add_run(u'投稿標題:%s'%healer.title)
run.add_break()
# ---第三部分 投稿文字 ----#
medical=MedicalNotes.objects.filter(healer=healer).first()
paragraph5 = doc.add_paragraph()
run5 = paragraph5.add_run(u'投稿文字')
chg_font(run5, fontname=u'微軟雅黑', size=16)
paragraph6 = doc.add_paragraph()
run = paragraph6.add_run(medical.content)
run.add_break()
# ---第四部分 投稿圖片 ----#
paragraph7 = doc.add_paragraph()
run7 = paragraph7.add_run(u'投稿圖片')
chg_font(run7, fontname=u'微軟雅黑', size=16)
butelink=list(ContributeLink.objects.filter(medical=medical,typeser=1).values_list('links',flat=True))
paragraph8 = doc.add_paragraph()
run = paragraph8.add_run(u'投稿圖片')
run.add_break()
for img in butelink:
file = urllib2.urlopen(img + '?imageView2/1/w/800/h/700')
tmpIm = cStringIO.StringIO(file.read())
run.add_picture(tmpIm, width=Inches(0.8))
run.add_break()
# ---第五部分 審覈記錄 (生成表格的方式)----#
paragraph9 = doc.add_paragraph()
run9 = paragraph9.add_run(u'審覈記錄')
chg_font(run9, fontname=u'微軟雅黑', size=16)
record = CaseAuditRecord.objects.filter(healer=healer)
rows = record.count() + 1
tab = doc.add_table(rows=rows, cols=4)
tab1 = tab.rows[0].cells
er = 0
lister4 = [u'操作人', u'處理時間', u'操作', u'駁回原因'] # 表頭
for an in lister4:
tab1[er].text = an
er += 1
if record:
rowser = 1
for an in record.values('staff__name', 'create_time', 'audit_type', 'reject'):
tab2 = tab.rows[rowser].cells
tab2[0].text = an['staff__name']
tab2[1].text = an['create_time'].strftime('%Y-%m-%d %H:%M:%S')
tab2[2].text = u'%s' % AUDIT_TYPE[int(an['audit_type'] - 1)][1]
tab2[3].text = an['reject']
rowser += 1
run9.add_break()
# ---第六部分 生成word數據流直接下載 ----#
new_time = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
file_name='word%s.docx' % new_time
doc_url='./wordfile/'+file_name
doc.save(doc_url)
docfile=open(doc_url,"rb")
response=FileResponse(docfile)
response['Content-Type']='application/octet-stream'
response['Content-Disposition']='attachment;filename=word%s.docx'%new_time
path=os.getcwd()
os_file_url=path+'/wordfile'
w3 = threading.Thread(target=del_file, args=((os_file_url,file_name)))
w3.start()
return response