Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Django中的硬拷贝在选定目录中创建pdf输出文件?_Python_Django_Pdf_Save_Pdf Generation - Fatal编程技术网

Python 如何使用Django中的硬拷贝在选定目录中创建pdf输出文件?

Python 如何使用Django中的硬拷贝在选定目录中创建pdf输出文件?,python,django,pdf,save,pdf-generation,Python,Django,Pdf,Save,Pdf Generation,我想自动将结果保存在选定目录中的pdf文件中。 我使用django硬拷贝模块。目前,我可以显示带有url的pdf。 谢谢你的想法 以下是视图: from django.conf import settings from hardcopy.views import PDFViewMixin, PNGViewMixin class pdf_hardcopy(PDFViewMixin, TemplateView): download_attachment = True templat

我想自动将结果保存在选定目录中的pdf文件中。 我使用django硬拷贝模块。目前,我可以显示带有url的pdf。 谢谢你的想法

以下是视图:

from django.conf import settings
from hardcopy.views import PDFViewMixin, PNGViewMixin

class pdf_hardcopy(PDFViewMixin, TemplateView):
    download_attachment = True
    template_name = 'project/pdf_hardcopy.html'

    def get_filename(self):
        return "my_file.pdf"

    def get_context_data(self, *args, **kwargs):
        context = super(pdf_hardcopy, self).get_context_data(*args, **kwargs)
        id = self.kwargs['pk']
        dossier_media = str(settings.MEDIA_ROOT)
        GetDataTeam = Datas.objects.filter(id=id)
        context["GetDataTeam"] = GetDataTeam
        return context
path('pdf_hardcopy/<int:pk>/', views.pdf_hardcopy.as_view(), name='pdf_hardcopy'),
我的url:

from django.conf import settings
from hardcopy.views import PDFViewMixin, PNGViewMixin

class pdf_hardcopy(PDFViewMixin, TemplateView):
    download_attachment = True
    template_name = 'project/pdf_hardcopy.html'

    def get_filename(self):
        return "my_file.pdf"

    def get_context_data(self, *args, **kwargs):
        context = super(pdf_hardcopy, self).get_context_data(*args, **kwargs)
        id = self.kwargs['pk']
        dossier_media = str(settings.MEDIA_ROOT)
        GetDataTeam = Datas.objects.filter(id=id)
        context["GetDataTeam"] = GetDataTeam
        return context
path('pdf_hardcopy/<int:pk>/', views.pdf_hardcopy.as_view(), name='pdf_hardcopy'),
path('pdf_hardcopy/',views.pdf_hardcopy.as_view(),name='pdf_hardcopy'),

快速查看回购协议,它似乎没有任何内置的方式来实现这一点。我可能会重写
PDFViewMixin
get\u file\u response
方法。您可以在
views.py
文件[]中看到当前的实现

您可以在views.py文件中执行以下操作:

类PDFViewAndSaveMixin(PDFViewMixin):
“”“重写PDFViewMixin以同时保存文件。”“”
def get_file_响应(自身、内容、输出文件、额外参数):
打开(f'save/location/{self.get_filename},'w')作为本地_文件:
本地_文件。写入(输出_文件)
return super().获取文件响应(内容、输出文件、额外参数)
类pdf_硬拷贝(PDFViewAndSaveMixin,TemplateView):
# ...

这是一种相当粗糙的保存文件的方法,您可能应该创建一个带有FileField的Django模型来管理这些文件,而不是简单地将它们直接写入磁盘。请参阅。

谢谢您的解决方案。我遵循了您建议的方法,但我有一个错误:需要一个类似字节的对象,而不是'str',我应该在哪里为参数赋值:content,output_file?抱歉,我的文件编写语法混乱了。我相信上面经过编辑的答案应该更接近正确。您不需要指定这些值。它们将通过硬拷贝传递给方法(如果你在浏览器中获得PDF,你知道这是有效的)。它正在一点一点地进行。我更新了我的代码。我有一个错误:TypeError:需要一个类似字节的对象,而不是“\u TemporaryFileWrapper”。为了纠正这个问题,我编写了以下代码:local_file.write(字节(str(output_file),encoding='utf-8'))。pdf文件已创建但无法打开。嗯,你能调试一下吗?当它传递到这个方法中时,
output\u file
是什么类型?它有路径吗?也许您可以使用
shutil
将文件复制到您的保存位置<代码>从shutil导入复制文件<代码>复制文件(src,dst)调试后,我得到了这个(输出文件:)(内容:b'\n\n\n\n\n\n