生成多个 PDF 并将其压缩以供下载,全部在一个视图中

2023-12-26

我在用xhtml2pdf在我的 Django 视图中生成 PDF。这个想法是循环遍历查询中的所有实例,然后为每个实例创建一个 PDF,然后将所有生成的 PDF 添加到一个 zip 文件中以供下载。这xtml2pdf逻辑工作正常,但循环逻辑让我头疼。

到目前为止,这是我的功能:

def bulk_cover_letter(request, ward_id, school_cat_id, cheque_number):
    school_type = SchoolType.objects.get(id=school_cat_id)

    schools_in_school_type = Applicant.objects.filter(
        school_type=school_type, ward_id=ward_id, award_status='awarded'
    ).order_by().values_list('school_name', flat=True).distinct()

    for school in schools_in_school_type:
        beneficiaries = Applicant.objects.filter(school_type=school_type, ward_id=ward_id, award_status='awarded', school_name=school)
        total_amount_to_beneficiaries = Applicant.objects.filter(school_type=school_type, ward_id=ward_id, award_status='awarded', school_name=school).aggregate(total=Sum('school_type__amount_allocated'))
        context = {
            'school_name' : school,
            'beneficiaries' : beneficiaries,
            'total_amount_to_beneficiaries' : total_amount_to_beneficiaries,
            'title' : school + ' Disbursement Details',
            'cheque_number': cheque_number
        }

        response = HttpResponse('<title>Cover Letter</title>', content_type='application/pdf')
        filename = "%s.pdf" %(cheque_number)
        content = "inline; filename=%s" %(filename)
        response['Content-Disposition'] = content
        template = get_template('cover_letter.html')
        html = template.render(context)
        result = io.BytesIO()
        pdf = pisa.CreatePDF(
            html, dest=response, link_callback=link_callback)
        if not pdf.error:
            # At this point I can generate a single PDF.
            # But no idea on what to do next.

    # The zipping logic should follow here after looping all the instances - (schools)

从那时起我不知道下一步该做什么。任何帮助将不胜感激。


尝试这个:

Utils.py

def render_to_pdf(template_src, context_dict={}):
    template = get_template(template_src)
    html  = template.render(context_dict)
    buffer = BytesIO()
    p = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), buffer)
    pdf = buffer.getvalue()
    buffer.close()
    if not p.err:
        return pdf#HttpResponse(result.getvalue(), content_type='application/pdf')
    return None


def generate_zip(files):
    mem_zip = BytesIO()

    with zipfile.ZipFile(mem_zip, mode="w",compression=zipfile.ZIP_DEFLATED) as zf:
        for f in files:
            zf.writestr(f[0], f[1])

    return mem_zip.getvalue()

视图.py

def generate_attendance_pdf(modeladmin, request, queryset):

    template_path = 'student/pdf_template.html'

    files = []

    for q in queryset:
        context = {
            'firstname': q.firstname,
            'lastname': q.lastname,
            'p_firstname': q.bceID.firstname
        }
        pdf = render_to_pdf(template_path, context)
        files.append((q.firstname + ".pdf", pdf))

    full_zip_in_memory = generate_zip(files)

    response = HttpResponse(full_zip_in_memory, content_type='application/force-download')
    response['Content-Disposition'] = 'attachment; filename="{}"'.format('attendnace.zip')

    return response

显然,您必须将上下文/名称修改为您需要的内容。

归功于 -> 尼尔·格罗根https://www.neilgrogan.com/py-bin-zip/ https://www.neilgrogan.com/py-bin-zip/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

生成多个 PDF 并将其压缩以供下载,全部在一个视图中 的相关文章

  • Python Tkinter,显示实时数据

    我想在 GUI 中显示实时数据tkinter 我得到的数据包含list两个整数的 current voltage 我每秒都在获取新数据 我成功创建了一个 GUI 现在我想知道如何在 GUI 中显示数据Label小部件 python tkin
  • 使用 Python37 运行时通过 Cloud Functions 生成缩略图

    我有一个由 Firebase 存储触发的 Google Cloud 函数 我想生成缩略图 虽然 Node js 文档有一个使用 ImageMagick 的示例 https cloud google com functions docs tu
  • 如何将我的 html 表单发布到 django 模型并保存?

    我有 html 表单 我想发送并保存到 django 模型 当我尝试发送消息时出现错误 ValueError at account userinfo akylson
  • 如何重写 Django 中的 model.Manager.create() 方法?

    我有很多Hardware模型有一个HardwareType具有各种特征 就像这样 models py from django db import models class HardwareType model Models name mod
  • Django:导入错误:无法导入名称接收者

    非常基本的 django 应用程序 当我尝试执行任何操作 runserver syncdb 时 它会为我提供以下内容 想法 如果我的其中一个文件有问题 您能帮我指导一下问题可能是什么吗 File Library Python 2 7 sit
  • 如何在Django中编写sql COALESCE

    我是姜戈的新手 如何将 COALESCE sql 查询集写入 django orm query SELECT COALESCE max CAST order no as UNSIGNED 0 as o id from nanossc Sal
  • 根据日期列过滤并创建列

    我有一个样本数据如下 date Deadline 2018 08 01 2018 08 11 2018 09 18 2018 12 08 2018 12 18 我想用代码中描述的条件填写截止日期列 如 1 DL 2 DL 3 DL 等 基于
  • 测试从常规函数调用 python 协程(async def)

    假设我有一些异步协程 它可以获取一些数据并返回它 像这样 async def fetch data args result await some io return result 基本上 这个协程是从协程链中调用的 初始协程是通过创建任务来
  • Django ImageField 默认值

    模型 py class UserProfile models Model photo models ImageField upload to get upload file name storage OverwriteStorage def
  • Django 多个外键,相同的相关名称

    我想创建一个模型 1 其中具有相同其他模型 2 的多个外键 我希望这些外键具有相同的related name因为每个外键将指向 model 2 的不同实例 因为我需要所有外键的一个反向关系 也许一个例子会更明确 class Parent M
  • 返回表情符号名称而不是表情符号

    我有这个 1 不带单引号 在 Python 3 中 即 one 有没有一种方法可以获取表情符号 如上面的 并打印相应的表情符号 在本例中为 one 名称 我从 Discord py 反应对象中获取表情符号 就您而言 该表情符号是一个两个字符
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • 基于坐标合并数据框

    我有两个数据框 两个数据框都包含经度和纬度列 我想根据经度和纬度列合并这两个数据框 首先 我应用了普通merge函数 它产生空的结果数据框 我调查发现两个数据框没有相同的经度和纬度列 然后我尝试了另一个函数merge asof并将方向设置为
  • python 3中pickle和_pickle有什么区别?

    我是 python 新手 想要实现fast对象序列化 我尝试使用json 但是太慢了 也尝试使用marshall模块 但是marshall序列化的对象的大小比pickle大6 7倍 所以我决定在我的项目中使用pickle 我读到了有关 cP
  • 当我这样做时什么也没有发生: python manage.py 命令

    我是 django 新手 目前正在学习主要教程 尽管它早些时候工作过 但当我执行 python manage py runserver 或 python manage py h 或使用任何其他命令时 shell 不会输出任何内容 想知道我做
  • 错误:process_executor.py:702: ... 当一些作业被分配给执行器时,工作人员停止了。这可能是由于工作超时太短造成的

    根据主题中的错误 修复方法是什么 环境 Python 3 9 或 3 10 Windows 10 x64 使用时出现错误joblib https joblib readthedocs io en latest 对于并行处理 result c
  • 无法在 selenium 和 requests 之间传递 cookie,以便使用后者进行抓取

    我用 python 结合 selenium 编写了一个脚本来登录网站 然后从driver to requests这样我就可以继续使用requests进行进一步的活动 I used item soup select one div class
  • IIS 上的 Django:调试由于大文件上传上的 FastCGI 请求超时而导致的 IIS 错误

    我正在尝试在带有 IIS 10 和 FastCGI 的 Windows 10 计算机上托管 Django Web 应用程序 虽然到目前为止一切都运行良好 但我在上传较大文件 120MB 时遇到了某些 POST 请求的问题 即 HTTP 50
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix

随机推荐

  • 如何在 SAML 2.0 Web 浏览器 SSO 的 AuthnRequest 中识别主体

    我是 SAML 新手 在完全理解完整的 SAML2 SSO 流程方面遇到了一些困难 具体来说 当服务提供商使用元素响应资源请求时 元素中的哪一部分数据标识要由身份提供商验证的主体 即用户 例如 在以下 AuthnRequest 中似乎没有任
  • scipy.stats.binned_statistic_dd() 中的输出

    我正在尝试使用scipy stats binned statistic dd http docs scipy org doc scipy reference generated scipy stats binned statistic dd
  • 安装tensorflow 2有问题

    我想练习tensorflow 2 但我尝试在anaconda环境中安装它失败了 我的问题是 如何安装tensorflow 2 如果可以在 anaconda 环境中完成 在我看来会更方便 我不需要理解下面的错误信息 只要我能使用tensorf
  • 使用代码中的“fb_ref”参数跟踪来自 Facebook 的点赞按钮推荐

    我们想使用属性fb ref 点赞按钮中的 ref 参数 以便跟踪推荐点击和转化 您是否有关于如何在我们的页面上进行此操作的教程或示例 当您使用ref点赞按钮上的参数 点击返回由该点赞按钮生成的网站 在引荐来源网址中包含两个额外参数 fb r
  • 在哪里可以阅读有关编程的内容? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ASP.NET MVC 将列表传递给 RouteData QueryString

    将值列表作为查询字符串传递的推荐方法是 www site com search value 1 value 2 value 3 value 4 ASP NET 很好地处理了这个问题 string value QueryString Get
  • 文件传输详细信息持续绑定,直到使用 WPF 在窗口中传输文件

    我已经创建了将文件从客户端传输到服务器的项目 我已经完成了文件传输并获取了文件传输的详细信息 例如文件名 something avi 和传输的文件百分比 10 如下所示 每当我传输文件时 我都会使用下面的事件处理程序来了解该文件转移的详细信
  • 如何进入封闭班? [复制]

    这个问题在这里已经有答案了 I know Class getDeclaredClasses 可以获取它声明的所有类 但不包括匿名类 我想知道有没有办法通过封闭类获取所有封闭类 例如 我想获取定义在中的所有封闭类Root用于测试目的 clas
  • 如何在 WPF 中创建可拖动到主窗口之外的面板?

    尝试在 Visual Studio 2008 中复制对接控件 我的应用程序为 FAA 重播 RADAR 环境 并且我希望双显示器用户能够将控制面板拖动到另一个显示器 以使主画布保持清晰 此功能类似于将 VS 中的不同面板拖到主窗口之外的方式
  • MIPS 伪指令、替换

    经过研究后 我发现这只是获得相同结果的方法的替代 如果我错了 请纠正我 example move s0 t1 可以替换为 add s0 zero t1 问题 怎样才能更换lw la sw bne 是的move指令可以并且被替换为add操作说
  • 当我使用 Control-C 中断 C# 控制台应用程序时会发生什么?

    当我使用 Control C 中断 C 控制台应用程序时会发生什么 进程被杀死了吗 内存被释放了吗 是finally块被执行 数据库连接会发生什么情况 如果应用程序是为调试或发布而构建的 或者在 Visual Studio 内部 外部运行
  • Angular 动态组件 AOT 问题

    由于一些业务逻辑 我必须读取动态组件 EntryComponents 的元数据 要读取元数据 以下是我的方法 使用读取模块的所有组件组件工厂解析器 使用组件名称和特定方法过滤掉类 创建组件并读取数据 销毁该组件 const factorie
  • 如何对多个项目使用 ETag / If-Match

    在 RESTful 接口中处理乐观锁定的推荐方法似乎是返回一个ETag来自 GET 并提供If Match在 PUT 上 即 GET items 1 gt gives client an ETag for a single item PUT
  • 从块返回 UIImage

    我有以下代码 UIImage getPublisherLogo check the cache if the logo already exists NSString imageUrl NSString stringWithFormat i
  • 与 Eclipse 编译器相比,为什么 javac 1.5 运行速度这么慢?

    我有一个 Java Maven 项目 其中包含大约 800 个源文件 其中一些由 javacc JTB 生成 使用 javac 编译需要花费 25 分钟 当我将 pom xml 更改为使用 Eclipse 编译器时 编译大约需要 30 秒
  • Qt 会泄漏内存吗?

    如果我编译这个 Qt hello world include
  • Python需要安装ipykernel

    我在 VS code 中使用 Jupyter Notebook 时遇到问题 屏幕显示 Python 3 7 8 requires ipykernel to be installed 我按照弹窗安装了ipykernel 还是不行 附上截图 很
  • 数据损坏:错误在哪里‽

    最后编辑 我已经弄清楚问题是什么 请参阅下面我自己的答案 但我似乎无法将问题标记为已回答 如果有人可以回答我在下面的回答中提出的问题 即这是 Cython 中的错误还是这是 Cython 的预期行为 我将标记that答案被接受 因为这将是从
  • 如何将 Yii 与多语言数据库模型一起使用?

    我在从我创建的完全多语言数据库中获取数据时遇到问题 我希望这里有人可以帮助我 我将所有桌子分成两部分 通用 表 不包含任何需要翻译的文本 和包含需要翻译的所有字段及其翻译的表 示例表 base material id picture bas
  • 生成多个 PDF 并将其压缩以供下载,全部在一个视图中

    我在用xhtml2pdf在我的 Django 视图中生成 PDF 这个想法是循环遍历查询中的所有实例 然后为每个实例创建一个 PDF 然后将所有生成的 PDF 添加到一个 zip 文件中以供下载 这xtml2pdf逻辑工作正常 但循环逻辑让