最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django生成PDF文檔顯示在網頁上以及解決PDF中文顯示亂碼的問題

 更新時間:2019年07月04日 09:13:54   作者:Pykk2019  
這篇文章主要介紹了Django生成PDF文檔顯示在網頁上以及解決PDF中文顯示亂碼的問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

項目地址: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模板中,經過處理后返回PDF的響應response。

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

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響應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目錄,用來設置全局字體。這些文件都在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響應前

按照以上大致步驟大家就能夠生成PDF文件了,可以在網頁中瀏覽、放大、縮小,也可以下載,非常方便、簡單。
大家可以直接clone一份代碼試試效果

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python如何實現(xiàn)異步調用函數(shù)執(zhí)行

    python如何實現(xiàn)異步調用函數(shù)執(zhí)行

    這篇文章主要介紹了python如何實現(xiàn)異步調用函數(shù)執(zhí)行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python實現(xiàn)txt文件格式轉換為arff格式

    python實現(xiàn)txt文件格式轉換為arff格式

    這篇文章主要為大家詳細介紹了python實現(xiàn)txt文件格式轉換為arff格式的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 如何通過Python收集MySQL MHA 部署及運行狀態(tài)信息的功能

    如何通過Python收集MySQL MHA 部署及運行狀態(tài)信息的功能

    本篇幅主要介紹如何通過Python實現(xiàn)收集MHA 集群 節(jié)點信息 和 運行狀態(tài)的功能。這些信息將是CMDB信息的重要組成部分,感興趣的朋友一起看看吧
    2021-10-10
  • python實現(xiàn)雙鏈表

    python實現(xiàn)雙鏈表

    這篇文章主要為大家詳細介紹了python實現(xiàn)雙鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解將Django部署到Centos7全攻略

    詳解將Django部署到Centos7全攻略

    這篇文章主要介紹了詳解將Django部署到Centos7全攻略,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • 關于Qt6中QtMultimedia多媒體模塊的重大改變分析

    關于Qt6中QtMultimedia多媒體模塊的重大改變分析

    如果您一直在 Qt 5 中使用 Qt Multimedia,則需要對您的實現(xiàn)進行更改。這篇博文將嘗試引導您完成最大的變化,同時查看 API 和內部結構
    2021-09-09
  • python基礎篇之pandas常用基本函數(shù)匯總

    python基礎篇之pandas常用基本函數(shù)匯總

    Pandas是一個python數(shù)據(jù)分析庫,它提供了許多函數(shù)和方法來加快數(shù)據(jù)分析過程,下面這篇文章主要給大家介紹了關于python基礎篇之pandas常用基本函數(shù)的相關資料,需要的朋友可以參考下
    2022-07-07
  • python-httpx的具體使用

    python-httpx的具體使用

    HTTPX是Python3的功能齊全的HTTP客戶端,它提供同步和異步API,本文主要介紹了python-httpx的具體使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python基于Socket實現(xiàn)的簡單聊天程序示例

    Python基于Socket實現(xiàn)的簡單聊天程序示例

    這篇文章主要介紹了Python基于Socket實現(xiàn)的簡單聊天程序,結合簡單實例形式分析了Python聊天程序的客戶端與服務器端相關實現(xiàn)技巧,需要的朋友可以參考下
    2017-08-08
  • python中playwright結合pytest執(zhí)行用例的實現(xiàn)

    python中playwright結合pytest執(zhí)行用例的實現(xiàn)

    本文主要介紹了python中playwright結合pytest執(zhí)行用例的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

陕西省| 三穗县| 杭州市| 绩溪县| 合川市| 陕西省| 微博| 阳朔县| 龙井市| 汶上县| 安陆市| 苏州市| 垣曲县| 布尔津县| 晋州市| 惠来县| 阜宁县| 新乡县| 明星| 宽城| 寿宁县| 沛县| 南靖县| 合肥市| 曲周县| 那坡县| 永春县| 布尔津县| 青铜峡市| 高安市| 克拉玛依市| 沁源县| 临沧市| 滁州市| 阳春市| 正蓝旗| 五莲县| 托里县| 黄梅县| 云龙县| 中阳县|