如何在 Django 中创建 PDF 文档 - 新手教程
各位程序员朋友们,大家好!
本文解释了如何使用不同的技术在Django中生成 PDF 文档:通过 Django Shell,使用 GET 参数从互联网拉取图像来生成文档,并使用该图像构建新的(PDF)文档。
感谢阅读! - 内容由App Generator提供。
对于新手来说,Django是一个由经验丰富的开发人员设计的开源 Web 框架,我们可以使用它来编写从简单的单页项目到复杂的 API 和电子商务平台的各种代码。
本教程涵盖的主题
- ✅ 构建了一个新的 Django 应用
- ✅ 配置 Django 以激活新应用
- ✅针对每个案例添加/解释代码
- 使用 Django CLI 生成 PDF
- 在新页面中生成(简单的)动态 PDF
- 使用图像生成动态 PDF
- ✅ 列举几个开源的Django 模板
使用 Django CLI 创建 PDF
本教程假设读者已经有一个 Django 项目,我们将添加一个新的项目app来实现 PDF 生成流程。完全没有项目基础的初学者可以参考专门的 Django 教程,该教程涵盖了 Django 的基础知识:Django for Beginners(Django 入门)。
使用虚拟环境安装依赖项
$ virtualenv env # create a VENV
$ source env/bin/activate # activate VENV
$
$ pip install reportlab
reportlab这个库为我们的应用带来了所有PDF的强大功能。让我们使用它,直接在Django shell中创建一个简单的PDF文档:
$ python ./manage.py shell # start Django CLI
>>>
>>> import reportlab # import the library
>>> from reportlab.pdfgen import canvas # import modules
>>> p = canvas.Canvas('1.pdf') # Init a PDF object
>>> p.drawString(200, 200, "Hello world.") # Draw a simple String
>>> p.showPage() # Create the PDF
>>> p.save() # Clean UP the library usage
所有指令执行完毕后,我们应该会在 Django 项目根目录下看到一个新的 PDF 文件。让我们在不离开 Django shell 的情况下打开该文件:
>>> import os,sys
>>> os.startfile('1.pdf', 'open')
辅助程序startfile应该PDF使用操作系统中注册的默认处理程序打开文件。
创建新的 Django 应用
$ # Current Dir: ROOT of the Django project
$ python manage.py startapp pdf_app
编写一个简单的 PDF 生成器
# File contents: `app_pdf/views.py` (partial content)
...
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from datetime import datetime
...
def pdf_dw(request):
# Create the HttpResponse object
response = HttpResponse(content_type='application/pdf')
# This line force a download
response['Content-Disposition'] = 'attachment; filename="1.pdf"'
# READ Optional GET param
get_param = request.GET.get('name', 'World')
# Generate unique timestamp
ts = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')
p = canvas.Canvas(response)
# Write content on the PDF
p.drawString(100, 500, "Hello " + get_param + " (Dynamic PDF) - " + ts )
# Close the PDF object.
p.showPage()
p.save()
# Show the result to the user
return response
这个简单的 PDF 生成器会为返回给用户的对象设置一些属性HttpResponse,读取一个可选的 GET 参数,并生成一个保存在 PDF 中的时间戳。新生成的 PDF 保存到内存后,我们就可以将其内容返回给用户了。
用法示例:
http://localhost:8000/pdf_dw/?name=Bill Gates
生成包含图像的 PDF
使用同一个reportlab库,我们可以轻松生成带有嵌入式图像的 PDF 文档——让我们来看一下代码:
# File contents: `app_pdf/views.py` (partial content)
...
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
from datetime import datetime
...
def pdf_img(request):
# Create the HttpResponse object with the appropriate PDF headers.
response = HttpResponse(content_type='application/pdf')
# Create the PDF object, using the response object as its "file."
p = canvas.Canvas(response)
my_image = ImageReader('https://www.google.com/images/srpr/logo11w.png')
p.drawImage(my_image, 10, 500, mask='auto')
# Close the PDF object.
p.showPage()
p.save()
# Show the result to the user
return response
my_image该对象是 Google 徽标,从公共地址下载并通过drawImage指令在我们的 PDF 中使用。
示例输出由
http://localhost:8000/pdf_img/
保存代码后,必须更新 Django 设置才能激活新应用:
# Update Django Settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app_pdf',
]
...
更新项目路由
urlpatterns = [
path('admin/', admin.site.urls),
path("" , include("app_pdf.urls")), # <-- NEW
]
感谢阅读!如果您有关于 Django 和 PDF 生成过程的问题,欢迎在评论区留言提问。
✅ 更多Django 模板
本节介绍的开源示例可以帮助初学者(以及其他用户)通过重用代码库和提供的功能,更快地用 Django 编写新项目。
👉黑色仪表盘 Django
Black Dashboard Django 包含超过 16 个独立组件,让您可以自由选择和组合。这意味着您可以实现数千种可能的组合。所有组件都支持颜色变化,您可以使用 SASS 文件轻松修改。由于所有元素都已实现,因此您可以节省大量从原型设计到最终功能代码的时间。我们考虑周全,因此该仪表盘提供深色模式和浅色模式两种版本。
- 👉 Django Black 控制面板-
Product page - 👉 Django Black 控制面板-
LIVE Demo
Django 代码库采用简洁的模块化结构,遵循最佳实践,并提供 Docker 和 Gunicorn/Nginx 堆栈的身份验证、数据库配置和部署脚本。任何具备 Django/Python 基本知识的开发者,只需按照产品文档操作,即可在终端中输入几行命令来编译和使用该应用程序。
👉 Django Argon 控制面板
Argon Dashboard 由 100 多个独立组件构成,您可以自由选择和组合。所有组件均可自定义颜色,您可以使用 SASS 文件轻松修改。由于所有元素均已实现,因此您可以节省大量从原型设计到最终功能代码的时间。此 Dashboard 还预置了示例,因此开发过程非常流畅,从我们的页面切换到实际网站也十分便捷。
- 👉 Django Argon 控制面板-
Product page - 👉 Django Argon 控制面板-
LIVE Demo
👉 Django Material 仪表盘
Material Dashboard 运用了光线、纹理和动态效果。整体布局如同多层纸张,层次分明,清晰展现了深度和秩序。导航主要位于左侧边栏,内容则位于右侧的主面板内。
- 👉 Django Material 仪表盘-
Product page - 👉 Django Material 仪表盘-
LIVE Demo
✅ 资源
- 👉 访问应用生成器,开始您的下一个项目
- 👉 Django 应用生成器- 第二代应用构建器





