這篇文章給大家分享的是有關(guān)Django如何生成PDF文檔并顯示在網(wǎng)頁(yè)中的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

這個(gè)demo實(shí)現(xiàn)了通過(guò)用戶輸入自己的個(gè)人信息生成一份簡(jiǎn)歷pdf,來(lái)闡述如何使用Django的HttpResponse生成PDF的文檔。
先上效果圖:



安裝依賴庫(kù)
首先安裝Django最新版2.2.2和PDF依賴包xhtml2pdf
pip install django pip install xhtml2pdf
編寫(xiě)表單驗(yàn)證
為了簡(jiǎn)單起見(jiàn),這個(gè)demo依賴數(shù)據(jù)庫(kù),只需要表單驗(yàn)證數(shù)據(jù)即可pdf/forms.py
class MessageForm(forms.Form): ''' 表單驗(yàn)證 ''' name = forms.CharField(required=True) degree = forms.CharField(required=True) edu = forms.CharField(required=True) work = forms.CharField(required=True) tech = forms.CharField(required=True) phone = forms.CharField(required=True)
編寫(xiě)類視圖
pdf/views.py
由于這里我們只需要表單視圖,所以只創(chuàng)建了一個(gè)類視圖,post用來(lái)驗(yàn)證表單數(shù)據(jù)是否都存在,如果存在就把表單數(shù)據(jù)渲染到PDF模板中,經(jīng)過(guò)處理后返回PDF的響應(yīng)response。
這里可以使用Django的通用類視圖FormView構(gòu)建,代碼更簡(jiǎn)潔
class MessageView(View):
def get(self, request):
form = MessageForm(data=request.GET)
return render(request, 'index.html', {
'form': form
})
def post(self, request):
form = MessageForm(data=request.POST)
if form.is_valid():
response = generate_pdf_response(context=form.cleaned_data)
return response
return redirect(reverse('pdf:message'))編寫(xiě)生成PDF響應(yīng)response
view.py這里為了方便直接把處理函數(shù)寫(xiě)到視圖函數(shù)的文件里
def link_callback(uri):
if uri.startswith(settings.MEDIA_URL):
path = os.path.join(settings.MEDIA_ROOT,
uri.replace(settings.MEDIA_URL, ""))
elif uri.startswith(settings.STATIC_URL):
path = os.path.join(settings.STATIC_ROOT,
uri.replace(settings.STATIC_URL, ""))
else:
return uri
# 確保本地文件存在
if not os.path.isfile(path):
raise Exception(
"Media URI 必須以以下格式開(kāi)頭"
f"'{settings.MEDIA_URL}' or '{settings.STATIC_URL}'")
return path
def generate_pdf_response(context):
response = HttpResponse(content_type="application/pdf")
response["Content-Disposition"] = \
f"attachment; filename='{context['name']}.pdf'"
html = render_to_string("pdf.html", context=context)
status = pisa.CreatePDF(html,
dest=response,
link_callback=link_callback)
if status.err:
return HttpResponse("PDF文件生成失敗")
return response解決中文亂碼問(wèn)題
需要下載中文字體msyh.ttf放在static目錄下的font目錄,用來(lái)設(shè)置全局字體。這些文件都在github倉(cāng)庫(kù)里。
def font_patch():
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from xhtml2pdf.default import DEFAULT_FONT
pdfmetrics.registerFont(TTFont('yh', '{}/font/msyh.ttf'.format(
settings.STATICFILES_DIRS[0])))
DEFAULT_FONT['helvetica'] = 'yh'把這個(gè)函數(shù)放在生成PDF響應(yīng)前

按照以上大致步驟大家就能夠生成PDF文件了,可以在網(wǎng)頁(yè)中瀏覽、放大、縮小,也可以下載,非常方便、簡(jiǎn)單。
感謝各位的閱讀!關(guān)于“Django如何生成PDF文檔并顯示在網(wǎng)頁(yè)中”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:Django如何生成PDF文檔并顯示在網(wǎng)頁(yè)中-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://www.chinadenli.net/article34/docpse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作、外貿(mào)建站、網(wǎng)站排名、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容