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

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

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

項(xiàng)目地址:https://github.com/PythonerKK/django-generate-pdf/tree/master

這個(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ě)類(lèi)視圖

pdf/views.py

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

這里可以使用Django的通用類(lèi)視圖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)單。

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

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

相關(guān)文章

  • Python程序控制語(yǔ)句用法實(shí)例分析

    Python程序控制語(yǔ)句用法實(shí)例分析

    這篇文章主要介紹了Python程序控制語(yǔ)句用法,結(jié)合實(shí)例形式分析了Python流程控制語(yǔ)句的條件、循環(huán)以及函數(shù)、類(lèi)、文件、異常處理等相關(guān)操作使用技巧,需要的朋友可以參考下
    2020-01-01
  • 使用Python編寫(xiě)電腦定時(shí)關(guān)機(jī)小程序

    使用Python編寫(xiě)電腦定時(shí)關(guān)機(jī)小程序

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫(xiě)電腦定時(shí)關(guān)機(jī)小程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • pandas之query方法和sample隨機(jī)抽樣操作

    pandas之query方法和sample隨機(jī)抽樣操作

    這篇文章主要介紹了pandas之query方法和sample隨機(jī)抽樣操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python3.6 + TensorFlow 安裝配置圖文教程(Windows 64 bit)

    Python3.6 + TensorFlow 安裝配置圖文教程(Windows 64 bit)

    這篇文章主要介紹了Python3.6 + TensorFlow 安裝配置的教程(Windows 64 bit),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python中zipfile壓縮包模塊的使用

    Python中zipfile壓縮包模塊的使用

    zipfile 模塊提供了創(chuàng)建、讀取、寫(xiě)入、添加及列出 ZIP 文件的工具,本文主要介紹了Python中zipfile壓縮包模塊的使用,感興趣的可以了解一下
    2021-05-05
  • Python ArcPy實(shí)現(xiàn)柵格圖像文件由HDF格式批量轉(zhuǎn)換為T(mén)IFF格式

    Python ArcPy實(shí)現(xiàn)柵格圖像文件由HDF格式批量轉(zhuǎn)換為T(mén)IFF格式

    這篇文章主要為大家詳細(xì)介紹了如何基于Python中Arcpy模塊,實(shí)現(xiàn)大量HDF格式的柵格圖像文件批量轉(zhuǎn)換為T(mén)IFF格式,有需要的小伙伴可以參考下
    2024-12-12
  • python 循環(huán)數(shù)據(jù)賦值實(shí)例

    python 循環(huán)數(shù)據(jù)賦值實(shí)例

    今天小編就為大家分享一篇python 循環(huán)數(shù)據(jù)賦值實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-12-12
  • pyEcharts安裝及詳細(xì)使用指南(最新)

    pyEcharts安裝及詳細(xì)使用指南(最新)

    這篇文章主要介紹了pyEcharts安裝及詳細(xì)使用指南(最新),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Python?ndarray?數(shù)組的變形詳情

    Python?ndarray?數(shù)組的變形詳情

    這篇文章主要介紹了Python?ndarray數(shù)組的變形詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • django中使用POST方法獲取POST數(shù)據(jù)

    django中使用POST方法獲取POST數(shù)據(jù)

    這篇文章主要介紹了django中使用POST方法獲取POST數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評(píng)論

常州市| 长泰县| 崇州市| 灌南县| 绩溪县| 洪泽县| 丹东市| 嘉黎县| 沂源县| 乌兰察布市| 稻城县| 荣成市| 桓台县| 东兰县| 循化| 姜堰市| 博乐市| 漳平市| 从江县| 开原市| 邮箱| 岳阳市| 左贡县| 布尔津县| 高台县| 泸西县| 泰顺县| 益阳市| 邢台县| 镇原县| 斗六市| 呼和浩特市| 两当县| 永和县| 岢岚县| 麻城市| 原阳县| 潞西市| 佛坪县| 平昌县| 耒阳市|