Django를 사용하여 PDF를 출력합니다.

이 문서에서는 Django 보기를 사용하여 PDF 파일을 동적으로 출력하는 방법을 설명합니다. 이는 우수한 오픈 소스 ReportLab_Python PDF 라이브러리를 통해 가능합니다.

PDF 파일을 동적으로 생성할 수 있는 이점은 사용자나 컨텐츠의 다양한 용도로 사용자 정의된 PDF를 생성할 수 있다는 것입니다.

예를 들어, Django는 kusports.com_에서 3월 Madness 대회에 참가하는 사람들을 위해 PDF 파일로 사용자 정의되고 프린터 친화적인 NCAA 토너먼트 브래킷을 생성하는 데 사용되었습니다.

ReportLab을 설치합니다.

ReportLab 라이브러리는 PyPI에서 사용할 수 있습니다. 사용자 가이드(PDF 파일)도 다운로드할 수 있습니다. 《pip》로 ReportLab을 설치할 수 있습니다.

$ python -m pip install reportlab
...\> py -m pip install reportlab

Python 대화형 인터프리터를 사용하여 설치를 테스트합니다.

>>> import reportlab

해당 명령으로 인해 오류가 발생하지 않으면 설치가 작동했습니다.

당신의 견해를 쓰시오.

Django를 사용하여 PDF를 동적으로 생성하기 위한 핵심은 ReportLab API가 파일과 유사한 개체에 대해 작동하고 Django의 :class:〉~django.the〉 입니다.파일 응답〉 개체는 파일 유사 개체를 수락합니다.

다음은 《Hello World》의 예입니다.

import io
from django.http import FileResponse
from reportlab.pdfgen import canvas

def some_view(request):
    # Create a file-like buffer to receive PDF data.
    buffer = io.BytesIO()

    # Create the PDF object, using the buffer as its "file."
    p = canvas.Canvas(buffer)

    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")

    # Close the PDF object cleanly, and we're done.
    p.showPage()
    p.save()

    # FileResponse sets the Content-Disposition header so that browsers
    # present the option to save the file.
    buffer.seek(0)
    return FileResponse(buffer, as_attachment=True, filename='hello.pdf')

코드와 코멘트는 자명해야 하지만 몇 가지 사항은 언급할 가치가 있습니다.

  • 응답은 파일 이름 확장자에 따라 자동으로 MIME 유형:mimtype:〉application/pdf’를 설정합니다. 이것은 브라우저에게 문서가 HTML 파일이나 일반적인 :mimetype:〉application/octet-stream〉 바이너리 콘텐츠가 아닌 PDF 파일임을 알려줍니다.
  • 《as_attachment = True》가 《파일 응답》으로 전달되면 적절한 《내용-분산》 헤더를 설정하고 웹 브라우저가 컴퓨터에 디폴트가 설정되어 있더라도 문서 처리 방법을 묻는 대화 상자를 열도록 지시합니다. 《as_attachment》 매개 변수가 생략되면 브라우저는 PDF에 사용하도록 구성된 모든 프로그램/플러그인을 사용하여 PDF를 처리합니다.
  • 임의의 《파일 이름》 매개 변수를 제공할 수 있습니다. 브라우저가 《다른 이름으로 저장…》에서 사용합니다.》 대화 상자입니다.
  • ReportLab API에 연결할 수 있습니다. 《캔버스》에 대한 첫 번째 주장과 같은 완충장치가 통과되었습니다.캔버스’는 :class에 제공할 수 있습니다.〉~django.the〉 입니다.파일 응답 클래스입니다.
  • 이후의 모든 PDF 생성 방법은 《버퍼》가 아닌 PDF 객체(이 경우 《p》)로 호출됩니다.
  • 마지막으로 PDF 파일로 ``쇼 페이지》와 《저장(save)》을 부르는 것이 중요합니다.

주석

ReportLab은 스레드 세이프가 아닙니다. 일부 사용자가 PDF 생성 Django 뷰를 구축하는 과정에서 여러 사용자가 동시에 액세스할 수 있는 이상한 문제가 발생했다고 보고했습니다.

다른 포맷

이러한 예에서는 PDF에 특정한 것이 많지 않으며 단지 《보고서 실험실》을 사용한 일부입니다. 유사한 기술을 사용하여 Python 라이브러리를 찾을 수 있는 임의 형식을 생성할 수 있습니다. 또한 다른 예와 텍스트 기반 형식을 생성할 때 사용할 수 있는 몇 가지 기법은 :doc:〉/how to/outputing-csv’를 참조하십시오.

더 보기

Django Package는 Django에서 PDF 파일을 생성하는 데 도움이 되는 〈packages https://djangopackages.org/grids/g/pdf/〉을 제공합니다.

Back to Top