Django 분석을 PDF 파일로 내보내기

6519 단어 django
최근 회사에서 exe 패키지를 만들고 프로그램에 새로운 기능을 추가하느라 바빠서 오랫동안 Django에 관한 글을 쓰지 못했는데...모처럼 이번 주말에 한가하게 Django의 작은 기능들을 알아보는 것도 좋을 것 같아요~
그럼 오늘 Django의 보기에서 페이지를 pdf 형식으로 내보내는 기능을 보십시오.그렇다면 동적 생성 pdf의 장점은 무엇일까?다른 목적을 가진 사용자를 위해 맞춤형 pdf를 만들 수 있습니다.그렇다면 어떻게 이뤄졌을까?Python에서 개발한 pdf 라이브러리 - ReportLab을 사용합니다.
ReportLab 설치
리포트 랩 라이브러리를 http://www.reportlab.com/software/opensource/rl-toolkit/download/ 다운로드해서 설치할 수 있으며, 설치 방법을 설명하는 사용자 안내서가 있거나, pip를 사용해서 설치할 수도 있다.
sudo pip install reportlab

ReportLab이 성공적으로 설치되었는지 테스트
>>> import reportlab

만약 이 명령이 아무런 오류도 보고하지 않았다면 ReportLab이 성공적으로 설치되었음을 의미합니다.
Django 동적 생성 pdf의 관건은 ReportLab이 파일에 대한 API 인터페이스이다. APi 인터페이스는 파일 대상이고 Django의 HttpResponse 대상도 파일 대상이다. 이것은 서로 통한다.
그럼 "Hello World"의 예를 들어보겠습니다.
from reportlab.pdfgen import canvas

from django.http import HttpResponse



def some_view(request):

    # Create the HttpResponse object with the appropriate PDF headers.

    response = HttpResponse(content_type='application/pdf')

    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'



    # Create the PDF object, using the response object as its "file."

    p = canvas.Canvas(response)



    # 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()

    return response

여기response는 특수한 MIME 형식인 '응용 프로그램/pdf' 라는 표시를 받았습니다. 이것은 HTML 파일이 아니라 PDF 파일입니다. 그렇지 않으면 브라우저가 HTML로 출력된 파일 형식을 설명하기 때문에 창에 매우 추하게 보일 수 있습니다.
또한response는 PDF 파일의 이름을 포함하는 추가 내용을 얻을 수 있습니다. 물론 이 파일의 이름은 임의입니다. 브라우저의 다른 이름으로 저장해서 이름을 지어줄 수 있습니다.이 예에서는 문서를 어떻게 처리하는지 확인하기 위해 이어서 대화상자가 팝업됩니다.마지막으로 가장 중요한 것은 showPage () 방법과 save () 방법을 사용하여 내보낸 PDf 파일을 저장하는 것입니다.
참고 ReportLab은 스레드가 아닌 안전한 제품입니다.
그럼 이제 복잡한 PDF 파일을 살펴보겠습니다. 만약에 ReportLab으로 복잡한 PDF 문서를 만들려면 IO 클래스를 임시 중계로 보조하는 것을 고려해야 합니다. 이 라이브러리는 매우 효과적인 파일 클래스의 대상 인터페이스를 제공합니다. 다음은 위의'Hello World'를 다시 쓰겠습니다.
from io import BytesIO

from reportlab.pdfgen import canvas

from django.http import HttpResponse



def some_view(request):

    # Create the HttpResponse object with the appropriate PDF headers.

    response = HttpResponse(content_type='application/pdf')

    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'



    buffer = BytesIO()



    # Create the PDF object, using the BytesIO object 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.

    p.showPage()

    p.save()



    # Get the value of the BytesIO buffer and write it to the response.

    pdf = buffer.getvalue()

    buffer.close()

    response.write(pdf)

    return response

물론 ReportLab 라이브러리 외에도 우수한 Python 제3자 라이브러리가 많다. 예를 들어 다음과 같다.
PDFlib: Django가 다른 Python 라이브러리를 연결한 것입니다. 예를 들어 'XHTML2PDF' 라이브러리, 그리고 'HTMLdoc' 를 사용합니다. HTML을 PDF로 바꾸는 명령줄이지만 인터페이스가 없습니다. Python의 입력과 출력 인터페이스만 사용할 수 있습니다.

좋은 웹페이지 즐겨찾기