亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

利用Python的Django框架生成PDF文件的教程

2020-01-04 18:00:16
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了利用Python的Django框架生成PDF文件的教程,用ReportLab API動態生成PDF文件,需要的朋友可以參考下

便攜文檔格式 (PDF) 是由 Adobe 開發的格式,主要用于呈現可打印的文檔,其中包含有 pixel-perfect 格式,嵌入字體以及2D矢量圖像。 You can think of a PDF document as the digital equivalent of a printed document; indeed, PDFs are often used in distributing documents for the purpose of printing them.

可以方便的使用 Python 和 Django 生成 PDF 文檔需要歸功于一個出色的開源庫, ReportLab (http://www.reportlab.org/rl_toolkit.html) 。動態生成 PDF 文件的好處是在不同的情況下,如不同的用戶或者不同的內容,可以按需生成不同的 PDF 文件。 The advantage of generating PDF files dynamically is that you can create customized PDFs for different purposes say, for different users or different pieces of content.

下面的例子是使用 Django 和 ReportLab 在 KUSports.com 上生成個性化的可打印的 NCAA 賽程表 (tournament brackets) 。

安裝 ReportLab

在生成 PDF 文件之前,需要安裝 ReportLab 庫。這通常是個很簡單的過程: Its usually simple: just download and install the library from http://www.reportlab.org/downloads.html.

Note

如果使用的是一些新的 Linux 發行版,則在安裝前可以先檢查包管理軟件。 多數軟件包倉庫中都加入了 ReportLab 。

比如,如果使用(杰出的) Ubuntu 發行版,只需要簡單的 apt-get install python-reportlab 一行命令即可完成安裝。

使用手冊(原始的只有 PDF 格式)可以從 http://www.reportlab.org/rsrc/userguide.pdf 下載,其中包含有一些其它的安裝指南。

在 Python 交互環境中導入這個軟件包以檢查安裝是否成功。

 

 
  1. >>> import reportlab 

如果剛才那條命令沒有出現任何錯誤,則表明安裝成功。

編寫視圖

和 CSV 類似,由 Django 動態生成 PDF 文件很簡單,因為 ReportLab API 同樣可以使用類似文件對象。

下面是一個 Hello World 的示例:

 

 
  1. from reportlab.pdfgen import canvas 
  2. from django.http import HttpResponse 
  3.  
  4. def hello_pdf(request): 
  5. # Create the HttpResponse object with the appropriate PDF headers. 
  6. response = HttpResponse(mimetype='application/pdf'
  7. response['Content-Disposition'] = 'attachment; filename=hello.pdf' 
  8.  
  9. # Create the PDF object, using the response object as its "file." 
  10. p = canvas.Canvas(response) 
  11.  
  12. # Draw things on the PDF. Here's where the PDF generation happens. 
  13. # See the ReportLab documentation for the full list of functionality. 
  14. p.drawString(100, 100, "Hello world."
  15.  
  16. # Close the PDF object cleanly, and we're done. 
  17. p.showPage() 
  18. p.save() 
  19. return response 

需要注意以下幾點:

這里我們使用的 MIME 類型是 application/pdf 。這會告訴瀏覽器這個文檔是一個 PDF 文檔,而不是 HTML 文檔。 如果忽略了這個參數,瀏覽器可能會把這個文件看成 HTML 文檔,這會使瀏覽器的窗口中出現很奇怪的文字。 If you leave off this information, browsers will probably interpret the response as HTML, which will result in scary gobbledygook in the browser window.

使用 ReportLab 的 API 很簡單: 只需要將 response 對象作為 canvas.Canvas 的第一個參數傳入。

所有后續的 PDF 生成方法需要由 PDF 對象調用(在本例中是 p ),而不是 response 對象。

最后需要對 PDF 文件調用 showPage() 和 save() 方法(否則你會得到一個損壞的 PDF 文件)。

復雜的 PDF 文件

如果您在創建一個復雜的 PDF 文檔(或者任何較大的數據塊),請使用 cStringIO 庫存放臨時生成的 PDF 文件。 cStringIO 提供了一個用 C 編寫的類似文件對象的接口,從而可以使系統的效率最高。

下面是使用 cStringIO 重寫的 Hello World 例子:

 

 
  1. from cStringIO import StringIO 
  2. from reportlab.pdfgen import canvas 
  3. from django.http import HttpResponse 
  4.  
  5. def hello_pdf(request): 
  6. # Create the HttpResponse object with the appropriate PDF headers. 
  7. response = HttpResponse(mimetype='application/pdf'
  8. response['Content-Disposition'] = 'attachment; filename=hello.pdf' 
  9.  
  10. temp = StringIO() 
  11.  
  12. # Create the PDF object, using the StringIO object as its "file." 
  13. p = canvas.Canvas(temp) 
  14.  
  15. # Draw things on the PDF. Here's where the PDF generation happens. 
  16. # See the ReportLab documentation for the full list of functionality. 
  17. p.drawString(100, 100, "Hello world."
  18.  
  19. # Close the PDF object cleanly. 
  20. p.showPage() 
  21. p.save() 
  22.  
  23. # Get the value of the StringIO buffer and write it to the response. 
  24. response.write(temp.getvalue()) 
  25. return response 

其它的可能性

使用 Python 可以生成許多其它類型的內容,下面介紹的是一些其它的想法和一些可以用以實現它們的庫。 Here are a few more ideas and some pointers to libraries you could use to implement them:

ZIP 文件 :Python 標準庫中包含有 zipfile 模塊,它可以讀和寫壓縮的 ZIP 文件。 它可以用于按需生成一些文件的壓縮包,或者在需要時壓縮大的文檔。 如果是 TAR 文件則可以使用標準庫 tarfile 模塊。

動態圖片 : Python 圖片處理庫 (PIL; http://www.pythonware.com/products/pil/) 是極好的生成圖片(PNG, JPEG, GIF 以及其它許多格式)的工具。 它可以用于自動為圖片生成縮略圖,將多張圖片壓縮到單獨的框架中,或者是做基于 Web 的圖片處理。

圖表 : Python 有許多出色并且強大的圖表庫用以繪制圖表,按需地圖,表格等。 我們不可能將它們全部列出,所以下面列出的是個中的翹楚。

matplotlib (http://matplotlib.sourceforge.net/) 可以用于生成通常是由 matlab 或者 Mathematica 生成的高質量圖表。

pygraphviz (https://networkx.lanl.gov/wiki/pygraphviz) 是一個 Graphviz 圖形布局的工具 (http://graphviz.org/) 的 Python 接口,可以用于生成結構化的圖表和網絡。

總之,所有可以寫文件的庫都可以與 Django 同時使用。 The possibilities are immense.

我們已經了解了生成“非HTML”內容的基本知識,讓我們進一步總結一下。 Django擁有很多用以生成各類“非HTML”內容的內置工具。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品动漫久久久久| 亚洲aaaaaa| 奇米四色中文综合久久| 国产亚洲精品久久| 成人久久一区二区| 欧美一区二区三区图| 日韩中文字幕免费看| 亚洲男人天堂久| 亚洲成人999| 国产日韩欧美黄色| 亚洲一区二区三区在线视频| 国产主播喷水一区二区| 国产精品永久免费视频| 亚洲欧洲在线视频| 亚洲人成免费电影| 日韩av一区二区在线| 国产欧美一区二区| 亚洲精品成人免费| 亚洲高清福利视频| 亚洲欧美在线看| 久久99国产精品久久久久久久久| 欧美成人激情图片网| 国产视频综合在线| 亚洲精品aⅴ中文字幕乱码| 日韩在线播放av| 97热在线精品视频在线观看| 66m—66摸成人免费视频| 欧美电影免费在线观看| 国产精品视频一区国模私拍| 日韩欧亚中文在线| 日本三级久久久| 国产精品旅馆在线| 日韩在线视频线视频免费网站| 成人看片人aa| 97免费在线视频| 亚洲自拍偷拍视频| 日韩av一区在线| 日韩欧美在线网址| 亚洲激情 国产| 亚洲美女激情视频| 欧美视频裸体精品| 国产欧亚日韩视频| 亚洲欧美日韩一区二区三区在线| 国产精品视频免费在线观看| 国产精品久久久久一区二区| 精品亚洲永久免费精品| 日韩精品中文字幕视频在线| 少妇激情综合网| 国产91精品黑色丝袜高跟鞋| 午夜精品久久久久久99热| 一本色道久久88综合亚洲精品ⅰ| 992tv成人免费影院| 日韩中文字幕免费看| 日本午夜人人精品| 91影院在线免费观看视频| 国产成人jvid在线播放| 久久久精品久久| 亚洲第一区中文99精品| 最近2019中文免费高清视频观看www99| 国产91九色视频| 亚洲欧美精品一区| 搡老女人一区二区三区视频tv| 伊人亚洲福利一区二区三区| 国产精品极品尤物在线观看| 91精品国产高清自在线| 日韩国产在线看| 国产午夜精品久久久| 全亚洲最色的网站在线观看| 国产精品中文在线| 亚洲aⅴ男人的天堂在线观看| 国产欧美欧洲在线观看| 成人免费淫片视频软件| 精品视频在线导航| 国产精品久久久久久久久久小说| 中文字幕亚洲综合| 日韩av大片在线| 91亚洲精品一区二区| 国产精品久久久久久av福利软件| 久久国产精品电影| 久久在线免费视频| 欧美成人网在线| 欧美大秀在线观看| 日本一区二区三区四区视频| 国产成人免费av| 亚洲国产精品国自产拍av秋霞| 久久精品国产亚洲精品2020| 日韩精品在线私人| 国产成人精品久久二区二区91| 在线观看国产精品日韩av| 日韩网站在线观看| 久久久精品网站| 欧美在线观看一区二区三区| 日韩美女在线看| 国产精品电影在线观看| 中文字幕日韩av电影| 国产成人91久久精品| 91日韩在线视频| 欧美不卡视频一区发布| 日韩精品电影网| 日韩视频一区在线| 国产精品网站视频| 国产精品丝袜高跟| 国产精品成av人在线视午夜片| 日韩电影中文字幕在线观看| 日韩久久免费视频| 国产精品入口免费视| 国产精品99蜜臀久久不卡二区| 欧美成人免费小视频| 成人久久久久爱| 日韩免费观看av| 在线a欧美视频| 亚洲国产高清高潮精品美女| 久久亚洲国产成人| 91chinesevideo永久地址| 成人淫片在线看| 成人精品视频99在线观看免费| 成人精品视频99在线观看免费| 国产日韩精品在线观看| 国产精品免费看久久久香蕉| 97视频在线观看免费高清完整版在线观看| 中文字幕亚洲欧美| 亚洲高清av在线| 亚洲国产天堂网精品网站| 国产欧美欧洲在线观看| 亚洲女在线观看| 精品亚洲一区二区三区四区五区| 亚洲欧美中文字幕在线一区| 欧美视频中文在线看| 亚洲美女性视频| 亚洲久久久久久久久久| 亚洲一区二区在线播放| 午夜精品www| 日韩最新在线视频| 久久国产精品电影| 中文字幕久久亚洲| 国内精品久久久久久中文字幕| 亚洲第一男人av| 国产精品国产三级国产aⅴ9色| 久久这里只有精品视频首页| 日韩电视剧在线观看免费网站| 九九热精品在线| 欧美日本黄视频| 久久好看免费视频| 黑人巨大精品欧美一区二区| 亚洲电影免费观看| 久久久久久久激情视频| 国产亚洲精品91在线| 国产精品久久久久久久av大片| 亚洲国产精品人人爽夜夜爽| 久久伊人色综合| 91国产一区在线| 精品久久香蕉国产线看观看亚洲| 亚洲精品久久久久国产| 国产一区视频在线| 亚洲另类xxxx| 激情久久av一区av二区av三区| 国产欧美精品日韩| 亚洲国产高清福利视频| 亚洲影院在线看| 国产亚洲成精品久久| 久久精品国产一区二区电影| 国产一区二区三区在线观看网站| 一本色道久久88综合日韩精品| 国产精品久久久久久搜索|