I need a button to create a PDF file (with Python 2.7, Django 1.8), but I don’t know how to express it on a machine.
I started by reading some articles, trying to learn from others how to do this.
Found this handy link that redirected me to the following links:
So, to print as PDF:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ Method One: Using ReportLab ////////////////////////////////////////////// /////
pip install reportlab
ReportLab relies on Pillow, which is a third-party Python image library. If you run:
pip install Pillow
You will see something like this:
Requirement already satisfied: Pillow in c:\pythonprojects\virtualenvs\apis\lib\site-packages
Requirement already satisfied: olefile in c:\pythonprojects\virtualenvs\apis\lib\site-packages (from Pillow)
, , , .
------------------------------------------ 0.2 ( ) ----------------------------------------- -
1.
from django.http import response
from django.core.files.storage import FileSystemStorage
from django.shortcuts import render, HttpResponse
from django.contrib.auth.decorators import login_required
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.units import inch
import requests
import praw
def profile(request):
doc = SimpleDocTemplate("test.pdf")
styles = getSampleStyleSheet()
Story = [Spacer(1, 2 * inch)]
style = styles["Normal"]
parsedData = []
userData = {}
if request.method == 'POST':
sub = request.POST.get('subreddit')
reddit = praw.Reddit(client_id='client_id',
client_secret='client_secret',
user_agent='user_agent')
subreddit = reddit.subreddit(sub)
print('Master, this was the data retrieved that is going to be displayed:')
print(subreddit.display_name)
print(subreddit.title)
print(subreddit.description)
print('Tell me if you want more and I can give that to you, no problem-------------')
print('Now, Im gonna create a PDF file with the same data...')
subreddit_name = subreddit.display_name
subreddit_title = subreddit.title
subreddit_description = subreddit.description
p = Paragraph(subreddit_name, subreddit_title, subreddit_description, style)
Story.append(p)
Story.append(Spacer(1, 0.2 * inch))
doc.build(Story)
print('The file was created and can be accessed in the root of the Django project. The name is test.pdf')
print('Tell me to stop if you dont like what Im doing-------------')
print('OK. Time to give that to the user as well...')
userData['subreddit_name'] = subreddit.display_name
userData['title'] = subreddit.title
userData['description'] = subreddit.description
parsedData.append(userData)
return render(request, 'app/profile.html', {'data': parsedData})
, #PDF, .
2.
:

Traceback :
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/app/profile/
Django Version: 1.8
Python Version: 2.7.12
Installed Applications:
('frontend',
'app',
'blog',
'suit',
'suit_redactor',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
22. return view_func(request, *args, **kwargs)
File "C:\PythonProjects\reddit_development\demonstration\app\views.py" in profile
69. doc.build(Story)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in build
1213. BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in build
969. self.handle_flowable(flowables)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in handle_flowable
834. if frame.add(f, canv, trySplit=self.allowSplitting):
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\frames.py" in _add
167. w, h = flowable.wrap(aW, h)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\paragraph.py" in wrap
1191. leftIndent = style.leftIndent
Exception Type: AttributeError at /app/profile/
Exception Value: 'unicode' object has no attribute 'leftIndent'
3. , ?
, :
p = Paragraph(subreddit_name, subreddit_title, subreddit_description, style)
Story.append(p)
Story.append(Spacer(1, 0.2 * inch))
doc.build(Story)
------------------------------------------ 0.3 ----------------------------------------------
Christoph Bluoss ,
p = Paragraph("Some string", style)
,
1.
. 3
Story1 = [Spacer(1, 2 * inch)]
Story2 = [Spacer(1, 2 * inch)]
Story3 = [Spacer(1, 2 * inch)]
. 3
p1 = Paragraph(subreddit_name, style)
p2 = Paragraph(subreddit_title, style)
p3 = Paragraph(subreddit_description, style)
. ,
Story1.append(p1)
Story1.append(Spacer(1, 0.2 * inch))
Story2.append(p2)
Story2.append(Spacer(1, 0.2 * inch))
Story3.append(p3)
Story3.append(Spacer(1, 0.2 * inch))
. doc.buil .
doc.build(Story1, Story2, Story3)
2.
:

Traceback :
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/app/profile/
Django Version: 1.8
Python Version: 2.7.12
Installed Applications:
('frontend',
'app',
'blog',
'suit',
'suit_redactor',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
22. return view_func(request, *args, **kwargs)
File "C:\PythonProjects\reddit_development\demonstration\app\views.py" in profile
77. doc.build(Story1, Story2, Story3)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in build
1213. BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in build
966. self.clean_hanging()
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in clean_hanging
554. self.handle_flowable(self._hanging)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in handle_flowable
828. f.apply(self)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in apply
153. annotateException("\nhandle_%s args=%s"%(action,ascii(args)))
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\lib\utils.py" in annotateException
1390. rl_reraise(t,v,b)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in apply
146. getattr(doc,arn)(*args)
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in handle_pageBegin
1189. self._handle_pageBegin()
File "C:\PythonProjects\virtualenvs\apis\lib\site-packages\reportlab\platypus\doctemplate.py" in handle_pageBegin
579. self.pageTemplate.onPage(self.canv,self)
Exception Type: TypeError at /app/profile/
Exception Value: 'list' object is not callable
handle_pageBegin args=()
3. , :
, :
p1 = Paragraph(subreddit_name, style)
p2 = Paragraph(subreddit_title, style)
p3 = Paragraph(subreddit_description, style)
Story1.append(p1)
Story1.append(Spacer(1, 0.2 * inch))
Story2.append(p2)
Story2.append(Spacer(1, 0.2 * inch))
Story3.append(p3)
Story3.append(Spacer(1, 0.2 * inch))
doc.build(Story1, Story2, Story3)
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\ : WeasyPrint/////////////////////////////////////////////////
, .