From 7dbabca8d7b5cab1034ea63cb44c52a974068e5a Mon Sep 17 00:00:00 2001
From: Jean-Paul Smets <jp@nexedi.com>
Date: Tue, 1 Feb 2011 14:47:08 +0000
Subject: [PATCH] Added conversion to DJVU

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@42893 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/Document/PDFDocument.py | 33 ++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/product/ERP5/Document/PDFDocument.py b/product/ERP5/Document/PDFDocument.py
index 4ec8902c75..41d73a1104 100644
--- a/product/ERP5/Document/PDFDocument.py
+++ b/product/ERP5/Document/PDFDocument.py
@@ -87,6 +87,14 @@ class PDFDocument(Image):
         data = self._convertToText()
         self.setConversion(data, mime=mime, format='txt')
         return (mime, data)
+    elif format in ('djvu', 'DJVU'):
+      try:
+        return self.getConversion(format='djvu')
+      except KeyError:
+        mime = 'image/vnd.djvu'
+        data = self._convertToDJVU()
+        self.setConversion(data, mime=mime, format='djvu')
+        return (mime, data)
     elif format is None:
       return self.getContentType(), self.getData()
     else:
@@ -197,6 +205,31 @@ class PDFDocument(Image):
                                                           'href="asEntireHTML')
     return h
 
+  security.declarePrivate('_convertToDJVU')
+  def _convertToDJVU(self):
+    """
+    Convert the PDF text content to DJVU with pdf2djvu
+    """
+    if not self.hasData():
+      return ''
+    tmp = tempfile.NamedTemporaryFile()
+    tmp.write(self.getData())
+    tmp.seek(0)
+
+    command_result = None
+    try:
+      command = ['pdf2djvu', tmp.name]
+      try:
+        command_result = Popen(command, stdout=PIPE).communicate()[0]
+      except OSError, e:
+        if e.errno == errno.ENOENT:
+          raise ConversionError('pdf2djvu was not found')
+        raise
+
+    finally:
+      tmp.close()
+    return command_result
+
   security.declareProtected(Permissions.AccessContentsInformation, 'getContentInformation')
   def getContentInformation(self):
     """
-- 
2.30.9