Django 는 PDF 문 서 를 생 성하 여 웹 페이지 에 표시 하고 PDF 중국어 디 스 플레이 의 난 장 판 문 제 를 해결 합 니 다.

프로젝트 주소:https://github.com/PythonerKK/django-generate-pdf/tree/master
이 demo 는 사용자 가 자신의 개인 정 보 를 입력 하여 이력서 pdf 를 만 들 고 Django 의 HttpResponse 를 사용 하여 PDF 문 서 를 만 드 는 방법 을 설명 합 니 다.
선행 효과 도:



설치 의존 라 이브 러 리
우선 Django 최신 버 전 2.2.2 와 PDF 의존 패키지 xhtml2pdf 를 설치 합 니 다.

pip install django
pip install xhtml2pdf
폼 검증 작성
간단하게 보기 위해 서 이 demo 는 데이터베이스 에 의존 하고 폼 검증 데이터 만 있 으 면 됩 니 다.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폼 보기 만 필요 하기 때문에 하나의 보기 만 만 만 들 었 습 니 다.post 는 폼 데이터 가 모두 존재 하 는 지 검증 하 는 데 사 용 됩 니 다.존재 하면 폼 데 이 터 를 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 응답 응답 응답view.py 여기 서 처리 함 수 를 보기 함수 파일 에 직접 쓰기 편 하도록 합 니 다.

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'
이 함 수 를 PDF 응답 생 성 전에 두 십시오.

이상 의 대체적인 절차 에 따라 여러분 은 PDF 파일 을 생 성 할 수 있 습 니 다.웹 페이지 에서 조회,확대,축소 할 수도 있 고 다운로드 할 수도 있 습 니 다.매우 편리 하고 간단 합 니 다.
여러분 들 은 코드 하나 로 바로 효 과 를 볼 수 있 습 니 다.
프로젝트 주소:https://github.com/PythonerKK/django-generate-pdf/tree/master
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기