refactor pdf to png method on subprocess, add media url for develop mode

feature/docker
Dmitriy Shesterkin 9 years ago
parent 01df2c8f42
commit c6153f6818
  1. 1
      requirements/base.txt
  2. 1
      src/commons/pdf_tools.py
  3. 18
      src/docs/views/base_views.py
  4. 12
      src/dokumentor/urls.py

@ -34,7 +34,6 @@ djangocms-text-ckeditor==3.1.0
djangocms-video==0.0.1 djangocms-video==0.0.1
easy-thumbnails==2.3 easy-thumbnails==2.3
flup==1.0.3.dev20161029 flup==1.0.3.dev20161029
ghostscript==0.4.1
gnureadline==6.3.3 gnureadline==6.3.3
html5lib==0.9999999 html5lib==0.9999999
httplib2==0.10.3 httplib2==0.10.3

@ -27,7 +27,6 @@ def render_pdf_to_string(request, template_name, dictionary=None):
pdf = pisa.pisaDocument(BytesIO(html.encode('utf-8')), result, encoding='utf-8') pdf = pisa.pisaDocument(BytesIO(html.encode('utf-8')), result, encoding='utf-8')
pdf_content = result.getvalue() pdf_content = result.getvalue()
result.close() result.close()
print(type(pdf_content))
if not pdf.err: if not pdf.err:
return pdf_content return pdf_content
return None return None

@ -6,8 +6,7 @@ import tempfile
from email.header import Header from email.header import Header
from time import time from time import time
import simplejson as json import simplejson as json
import subprocess as s
import ghostscript
from django.contrib import messages from django.contrib import messages
from django.db import DatabaseError from django.db import DatabaseError
@ -404,27 +403,31 @@ class BaseViews(object):
os.makedirs(tmp_media_dir) os.makedirs(tmp_media_dir)
tmp_dir = tempfile.mkdtemp(dir=tmp_media_dir) tmp_dir = tempfile.mkdtemp(dir=tmp_media_dir)
os.chmod(tmp_dir, 755) # os.chmod(tmp_dir, 755) # TODO: check on ubuntu
tmp_dirname = os.path.split(tmp_dir)[1] tmp_dirname = os.path.split(tmp_dir)[1]
f = open(filename, 'wb') f = open(filename, 'wb')
f.write(pdf) f.write(pdf)
f.close() f.close()
args = ["",
args = ["gs",
"-q",
"-dNOPAUSE", "-dBATCH", "-dSAFER", "-dNOPAUSE", "-dBATCH", "-dSAFER",
"-sDEVICE=png16m", "-sDEVICE=png16m",
"-r150", "-r150",
"-sOutputFile=%s" % os.path.join(tmp_dir, "page-%03d.png"), "-sOutputFile=%s" % os.path.join(tmp_dir, "page-%03d.png"),
"-f", filename "-f", filename
] ]
GS = ghostscript.Ghostscript(*args)
p = s.Popen(args=args, stdout=s.PIPE, stderr=s.PIPE)
# # ghostscript.Ghostscript(*args) # TODO: check on ubuntu
p.wait()
os.remove(filename) os.remove(filename)
filename = '%s.pdf' % self.get_filename(*args, **kwargs) filename = '%s.pdf' % self.get_filename(*args, **kwargs)
imgs = glob.glob(os.path.join(tmp_dir, '*.png')) imgs = glob.glob(os.path.join(tmp_dir, '*.png'))
imgs = [os.path.split(i)[1] for i in imgs] imgs = [os.path.split(i)[1] for i in imgs]
imgs = ['%stmp/%s/%s' % (MEDIA_URL, tmp_dirname, i) for i in imgs] imgs = ['%stmp/%s/%s' % (MEDIA_URL, tmp_dirname, i) for i in imgs]
email_form = self.EMAIL_FORM_CLASS() email_form = self.EMAIL_FORM_CLASS()
dictionary = { dictionary = {
'obj': obj, 'obj': obj,
'images': imgs, 'images': imgs,
@ -444,7 +447,6 @@ class BaseViews(object):
# else: # else:
# return HttpResponseServerError('Server error. Try later.') # return HttpResponseServerError('Server error. Try later.')
def as_pdf(self, *args, **kwargs): def as_pdf(self, *args, **kwargs):
"""Вывести документ в формате PDF в HttpResponse.""" """Вывести документ в формате PDF в HttpResponse."""
try: try:
@ -535,7 +537,7 @@ class BaseViews(object):
initial = {} initial = {}
client = getattr(self.get_obj(kwargs['id']), 'client', None) client = getattr(self.get_obj(kwargs['id']), 'client', None)
if client: if client:
initial['to'] = client.contact_email # подставить в форму email клиента initial['to'] = client.contact_email # подставить в форму email клиента
form = self.EMAIL_FORM_CLASS(initial=initial) form = self.EMAIL_FORM_CLASS(initial=initial)
dictionary = { dictionary = {

@ -4,8 +4,9 @@ from django.conf import settings
from django.conf.urls import patterns, include, url from django.conf.urls import patterns, include, url
import autocomplete_light import autocomplete_light
from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
admin.autodiscover() admin.autodiscover()
autocomplete_light.autodiscover() autocomplete_light.autodiscover()
@ -30,14 +31,11 @@ urlpatterns = patterns('',
if settings.DEBUG: if settings.DEBUG:
urlpatterns += patterns('', urlpatterns.extend(
url(r'^m/(?P<path>.*)$', 'django.views.static.serve', { static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) +
'document_root': settings.MEDIA_ROOT, static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
'show_indexes': True,
}),
) )
if settings.DEBUG:
import debug_toolbar import debug_toolbar
urlpatterns = [ urlpatterns = [
url(r'^__debug__/', include(debug_toolbar.urls)), url(r'^__debug__/', include(debug_toolbar.urls)),

Loading…
Cancel
Save