|
1 | | -import pdfkit |
2 | 1 | from django.conf import settings |
3 | 2 | from django.contrib.auth.decorators import login_required |
4 | 3 | from django.core.cache import cache |
|
8 | 7 | from django.shortcuts import redirect, render |
9 | 8 | from django.urls import reverse |
10 | 9 | from django.views import View |
| 10 | +from pyppeteer import launch |
11 | 11 | from utils.helpers import paginate |
12 | 12 |
|
13 | 13 | from . import forms |
@@ -140,16 +140,25 @@ def get(self, request, id): |
140 | 140 | def view_pdf(request, id): |
141 | 141 | post = Post.objects.filter(id=id).first() |
142 | 142 | if post: |
143 | | - return render( |
144 | | - request, 'posts/pdf.html', |
145 | | - {'title': post.title, 'content': post.content, }) |
| 143 | + return render(request, 'posts/pdf.html', {'post': post}) |
146 | 144 | return HttpResponseRedirect(reverse('home')) |
147 | 145 |
|
148 | 146 |
|
149 | | -def download_pdf(request, id): |
| 147 | +async def download_pdf(request, id): |
150 | 148 | # get view_pdf path => /pdf/view/1221554458 |
| 149 | + # path = reverse('view_pdf', args=(id,)) |
| 150 | + # pdf = pdfkit.from_url(f'{settings.APP_URL}{path}') |
| 151 | + # response = HttpResponse(pdf, content_type='application/pdf') |
| 152 | + # response['Content-Disposition'] = f'attachment; filename="{str(id)}.pdf"' |
| 153 | + # return response |
| 154 | + |
| 155 | + browser = await launch(options={'args': ['--no-sandbox']}, handleSIGINT=False, handleSIGTERM=False, handleSIGHUP=False) |
| 156 | + page = await browser.newPage() |
151 | 157 | path = reverse('view_pdf', args=(id,)) |
152 | | - pdf = pdfkit.from_url(f'{settings.APP_URL}{path}', False) |
| 158 | + await page.goto(f'{settings.APP_URL}{path}') |
| 159 | + pdf = await page.pdf({"format": 'A4'}) |
| 160 | + await browser.close() |
153 | 161 | response = HttpResponse(pdf, content_type='application/pdf') |
154 | 162 | response['Content-Disposition'] = f'attachment; filename="{str(id)}.pdf"' |
| 163 | + response['Content-Length'] = len(pdf) |
155 | 164 | return response |
0 commit comments