在Django中打印PDF文件

时间:2017-08-20 13:24:33

标签: javascript python django pdf printing

我想在我的Django项目中创建一些东西,它将模型对象的FileField中的PDF文件打印到纸上。像这样:

class PDF(models.Model):
    pdf = models.FileField(upload_to='pdffiles/', blank=True, null=True}

我想要做的主要事情是创建一个链接,使用Javascript创建一个弹出窗口,其中包含一个输入字段,用户从对象的FileField中输入PDF的名称,以及一个触发物理的“打印”按钮打印功能(包括打开打印对话框)。我是否应该使用表单或视图来实现此功能,如果我应该使用Javascript来激活打印功能,我该怎么做?感谢。

编辑:我正在考虑使用print.js。有人能告诉我如何在我的Django项目中实现print.js吗?我需要插入Git存储库中的哪些文件以及如何将它们链接到我的模板?

1 个答案:

答案 0 :(得分:0)

如果我关注此Question,我认为您可以使用此解决方案;

views.py

from django.conf import settings
from django.shortcuts import get_object_or_404
from yourapp.models import PDF

def pdf_viewer(request, pk):
    obj = get_object_or_404(PDF, pk=pk)
    pdf_full_path = settings.BASE_DIR + obj.pdf.url
    with open(pdf_full_path, 'r') as pdf:
        response = HttpResponse(pdf.read(), content_type='application/pdf')
        response['Content-Disposition'] = 'filename=%s' % obj.pdf.name
        return response
    pdf.closed

然后urls.py;

from django.conf.urls import url
from yourapp.views import pdf_viewer

urlpatterns = [
    url(r'^pdf-viewer/(?P<pk>\d+)/$', pdf_viewer, name='pdf_viewer_page'),
]

模板内部怎么样?

<button class="show-pdf">Show PDF</button>
<div class="pdf-wrapper">
  <iframe id="pdf-iframe" frameborder="0" allowfullscreen></iframe>
</div>

<script>
// you can using jQuery to load the pdf file as iframe.
$('.show-pdf').click(function () {
    var src = '{% url "pdf_viewer_page" pk=obj.id %}';
    var iframe = $("#pdf-iframe");

    iframe.attr({'width': 560, 'height': 300});
    // iframe.attr('src', src); // to load the pdf file only.

    // to load and auto print the pdf file.
    iframe.attr('src', src).load(function(){
      document.getElementById('pdf-iframe').contentWindow.print();
    });
    return false;
});
</script>
  

但是,如果您尝试使用{{ obj.pdf.url }},则在此模板中可以返回例如:'/media/to/file.pdf'

的字符串

或者更容易(整页);

<a href='{% url "pdf_viewer_page" pk=obj.id %}' target="_blank">Show PDF on new tab</a>