发布于 2026-01-06 1 阅读
0

如何在 Django 中创建 PDF 文档 - 新手教程

如何在 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

所有指令执行完毕后,我们应该会在 Django 项目根目录下看到一个新的 PDF 文件。让我们在不离开 Django shell 的情况下打开该文件:

>>> import os,sys
>>> os.startfile('1.pdf', 'open')
Enter fullscreen mode Exit fullscreen mode

辅助程序startfile应该PDF使用操作系统中注册的默认处理程序打开文件。


在 Django 中生成 PDF - 简单的 Hello World 程序。


创建新的 Django 应用

$ # Current Dir: ROOT of the Django project
$ python manage.py startapp pdf_app
Enter fullscreen mode Exit fullscreen mode

编写一个简单的 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
Enter fullscreen mode Exit fullscreen mode

这个简单的 PDF 生成器会为返回给用户的对象设置一些属性HttpResponse,读取一个可选的 GET 参数,并生成一个保存在 PDF 中的时间戳。新生成的 PDF 保存到内存后,我们就可以将其内容返回给用户了。

用法示例:http://localhost:8000/pdf_dw/?name=Bill Gates

在 Django 中生成 PDF - 使用 GET 参数生成动态内容。


生成包含图像的 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
Enter fullscreen mode Exit fullscreen mode

my_image该对象是 Google 徽标,从公共地址下载并通过drawImage指令在我们的 PDF 中使用。

示例输出由http://localhost:8000/pdf_img/

在 Django 中生成 PDF - 使用图像对象生成动态内容。


保存代码后,必须更新 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',
]
...
Enter fullscreen mode Exit fullscreen mode

更新项目路由

urlpatterns = [
    path('admin/', admin.site.urls),
    path(""    , include("app_pdf.urls")),   # <-- NEW
]
Enter fullscreen mode Exit fullscreen mode

感谢阅读!如果您有关于 Django 和 PDF 生成过程的问题,欢迎在评论区留言提问。


✅ 更多Django 模板

本节介绍的开源示例可以帮助初学者(以及其他用户)通过重用代码库和提供的功能,更快地用 Django 编写新项目。

👉黑色仪表盘 Django

Black Dashboard Django 包含超过 16 个独立组件,让您可以自由选择和组合。这意味着您可以实现数千种可能的组合。所有组件都支持颜色变化,您可以使用 SASS 文件轻松修改。由于所有元素都已实现,因此您可以节省大量从原型设计到最终功能代码的时间。我们考虑周全,因此该仪表盘提供深色模式和浅色模式两种版本。

Django 代码库采用简洁的模块化结构,遵循最佳实践,并提供 Docker 和 Gunicorn/Nginx 堆栈的身份验证、数据库配置和部署脚本。任何具备 Django/Python 基本知识的开发者,只需按照产品文档操作,即可在终端中输入几行命令来编译和使用该应用程序。

Django Admin Black - AppSeed 提供的 Django 模板项目。


👉 Django Argon 控制面板

Argon Dashboard 由 100 多个独立组件构成,您可以自由选择和组合。所有组件均可自定义颜色,您可以使用 SASS 文件轻松修改。由于所有元素均已实现,因此您可以节省大量从原型设计到最终功能代码的时间。此 Dashboard 还预置了示例,因此开发过程非常流畅,从我们的页面切换到实际网站也十分便捷。

Argon Dashboard 2 - 免费入门版。


👉 Django Material 仪表盘

Material Dashboard 运用了光线、纹理和动态效果。整体布局如同多层纸张,层次分明,清晰展现了深度和秩序。导航主要位于左侧边栏,内容则位于右侧的主面板内。

Material Dashboard - 由 AppSeed 生成的全栈入门套件。


✅ 资源

文章来源:https://dev.to/sm0ke/django-create-pdf-148f