亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法

 更新時間:2019年12月17日 09:57:55   作者:Pykk2019  
今天小編就為大家分享一篇Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

項目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master

這個demo實現(xiàn)了通過用戶輸入自己的個人信息生成一份簡歷pdf,來闡述如何使用Django的HttpResponse生成PDF的文檔。

先上效果圖:

安裝依賴庫

首先安裝Django最新版2.2.2和PDF依賴包xhtml2pdf

pip install django
pip install xhtml2pdf

編寫表單驗證

為了簡單起見,這個demo依賴數(shù)據(jù)庫,只需要表單驗證數(shù)據(jù)即可

pdf/forms.py

class MessageForm(forms.Form):
  '''
  表單驗證
  '''
  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)

編寫類視圖

pdf/views.py

由于這里我們只需要表單視圖,所以只創(chuàng)建了一個類視圖,post用來驗證表單數(shù)據(jù)是否都存在,如果存在就把表單數(shù)據(jù)渲染到PDF模板中,經(jīng)過處理后返回PDF的響應(yīng)response。

這里可以使用Django的通用類視圖FormView構(gòu)建,代碼更簡潔

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'))

編寫生成PDF響應(yīng)response

view.py這里為了方便直接把處理函數(shù)寫到視圖函數(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 必須以以下格式開頭"
      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

解決中文亂碼問題

需要下載中文字體msyh.ttf放在static目錄下的font目錄,用來設(shè)置全局字體。這些文件都在github倉庫里。

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'

把這個函數(shù)放在生成PDF響應(yīng)前

按照以上大致步驟大家就能夠生成PDF文件了,可以在網(wǎng)頁中瀏覽、放大、縮小,也可以下載,非常方便、簡單。

大家可以直接clone一份代碼試試效果

以上這篇Django生成PDF文檔顯示網(wǎng)頁上以及PDF中文顯示亂碼的解決方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • tensorflow 加載部分變量的實例講解

    tensorflow 加載部分變量的實例講解

    今天小編就為大家分享一篇tensorflow 加載部分變量的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • linux 下selenium chrome使用詳解

    linux 下selenium chrome使用詳解

    這篇文章主要介紹了linux 下selenium chrome使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 基于Python+Turtle實現(xiàn)繪制簡易的大風(fēng)車

    基于Python+Turtle實現(xiàn)繪制簡易的大風(fēng)車

    大風(fēng)車,吱呀吱呦呦地轉(zhuǎn),這里的風(fēng)景呀真好看!天好看,地好看……一首熟悉的歌曲,是否已經(jīng)把你拉回了童年?本文將用Turtle庫繪制簡易的大風(fēng)車,需要的可以參考一下
    2022-06-06
  • python 數(shù)據(jù)加密代碼

    python 數(shù)據(jù)加密代碼

    使用Python來做數(shù)據(jù)加密同樣簡單,可以使用hashlib或者hmac模塊來做數(shù)據(jù)加密
    2008-12-12
  • Python數(shù)據(jù)分析處理(三)--運動員信息的分組與聚合

    Python數(shù)據(jù)分析處理(三)--運動員信息的分組與聚合

    這篇文章主要介紹了Python數(shù)據(jù)清洗與處理?運動員信息的分組與聚合,根據(jù)Python數(shù)據(jù)清洗與處理?的相關(guān)資料展開運動員信息的分組與聚合的文章內(nèi)容,需要的朋友可以參考一下
    2021-12-12
  • 【python】matplotlib動態(tài)顯示詳解

    【python】matplotlib動態(tài)顯示詳解

    這篇文章主要介紹了matplotlib動態(tài)顯示,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • python 使用三引號時容易犯的小錯誤

    python 使用三引號時容易犯的小錯誤

    這篇文章主要介紹了python 使用三引號時容易犯的小錯誤,幫助新手學(xué)習(xí),避免入坑,感興趣的朋友可以了解下
    2020-10-10
  • Python畫圖小案例之多啦A夢叮當(dāng)貓超詳細注釋

    Python畫圖小案例之多啦A夢叮當(dāng)貓超詳細注釋

    在看了很多Python教程之后,覺得是時候做點什么小項目來練練手了,于是想來想去,用python寫了一個童年記憶的卡通人物哆啦A夢,代碼注釋無比詳細清楚,快來看看吧
    2021-09-09
  • python中函數(shù)的返回值及類型詳解

    python中函數(shù)的返回值及類型詳解

    這篇文章主要為大家介紹了python中函數(shù)的返回值及類型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析

    Python利用PyExecJS庫執(zhí)行JS函數(shù)的案例分析

    這篇文章主要介紹了Python利用PyExecJS庫執(zhí)行JS函數(shù),本文通過案例分析給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論