summaryrefslogtreecommitdiff
path: root/ishtar_common/views_item.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/views_item.py')
-rw-r--r--ishtar_common/views_item.py59
1 files changed, 24 insertions, 35 deletions
diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py
index b286ab3bf..513035903 100644
--- a/ishtar_common/views_item.py
+++ b/ishtar_common/views_item.py
@@ -1,13 +1,13 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+from copy import copy, deepcopy
import csv
import datetime
import json
import logging
-import optparse
import re
-from copy import copy, deepcopy
+import subprocess
from tempfile import NamedTemporaryFile
from django.conf import settings
@@ -26,7 +26,6 @@ from tidylib import tidy_document as tidy
from unidecode import unidecode
from weasyprint import HTML, CSS
from weasyprint.fonts import FontConfiguration
-from xhtml2odt import xhtml2odt
from ishtar_common.utils import check_model_access_control, CSV_OPTIONS, \
get_all_field_names
@@ -180,41 +179,31 @@ def show_item(model, name, extra_dct=None):
tpl = loader.get_template('ishtar/sheet_%s.html' % name)
context_instance['output'] = 'ODT'
content = tpl.render(context_instance, request)
+ tidy_options = {'output-xhtml': 1, 'indent': 1,
+ 'tidy-mark': 0, 'doctype': 'auto',
+ 'add-xml-decl': 1, 'wrap': 1}
+ html, errors = tidy(content, options=tidy_options)
+ html = html.encode('utf-8').replace(" ", " ")
+ html = re.sub('<pre([^>]*)>\n', '<pre\\1>', html)
+
+ odt = NamedTemporaryFile()
+ html_source = NamedTemporaryFile()
+ with open(html_source.name, 'w') as html_file:
+ html_file.write(html)
+
+ pandoc_args = ["pandoc", "-f", "html", "-t", "odt",
+ "-o", odt.name, html_source.name]
try:
- tidy_options = {'output-xhtml': 1, 'indent': 1,
- 'tidy-mark': 0, 'doctype': 'auto',
- 'add-xml-decl': 1, 'wrap': 1}
- html, errors = tidy(content, options=tidy_options)
- html = html.encode('utf-8').replace("&nbsp;", "&#160;")
- html = re.sub('<pre([^>]*)>\n', '<pre\\1>', html)
-
- odt = NamedTemporaryFile()
- options = optparse.Values()
- options.with_network = True
- for k, v in (('input', ''),
- ('output', odt.name),
- ('template', settings.ODT_TEMPLATE),
- ('with_network', True),
- ('top_header_level', 1),
- ('img_width', '8cm'),
- ('img_height', '6cm'),
- ('verbose', False),
- ('replace_keyword', 'ODT-INSERT'),
- ('cut_start', 'ODT-CUT-START'),
- ('htmlid', None),
- ('url', "#")):
- setattr(options, k, v)
- odtfile = xhtml2odt.ODTFile(options)
- odtfile.open()
- odtfile.import_xhtml(html)
- odtfile = odtfile.save()
- except xhtml2odt.ODTExportError:
- return HttpResponse(content, content_type="application/xhtml")
+ subprocess.check_call(pandoc_args)
+ except subprocess.CalledProcessError:
+ return HttpResponse(content,
+ content_type="application/xhtml")
response = HttpResponse(
content_type='application/vnd.oasis.opendocument.text')
- response['Content-Disposition'] = 'attachment; filename=%s.odt' % \
- filename
- response.write(odtfile)
+ response['Content-Disposition'] = \
+ 'attachment; filename={}.odt'.format(filename)
+ with open(odt.name, 'r') as odt_file:
+ response.write(odt_file.read())
return response
elif doc_type == 'pdf':
tpl = loader.get_template('ishtar/sheet_%s_pdf.html' % name)