Django 는 PDF 문 서 를 생 성하 여 웹 페이지 에 표시 하고 PDF 중국어 디 스 플레이 의 난 장 판 문 제 를 해결 합 니 다.
이 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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.