[Erp5-report] r14510 - in /erp5/trunk/products/ERP5Form: ./ Extensions/

nobody at svn.erp5.org nobody at svn.erp5.org
Wed May 16 21:06:12 CEST 2007


Author: mame
Date: Wed May 16 21:06:12 2007
New Revision: 14510

URL: http://svn.erp5.org?rev=14510&view=rev
Log:
Various patches by mame to support width and height.

Modified:
    erp5/trunk/products/ERP5Form/Extensions/ERP5Site_createModuleScribus.py
    erp5/trunk/products/ERP5Form/ScribusUtils.py

Modified: erp5/trunk/products/ERP5Form/Extensions/ERP5Site_createModuleScribus.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/Extensions/ERP5Site_createModuleScribus.py?rev=14510&r1=14509&r2=14510&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/Extensions/ERP5Site_createModuleScribus.py (original)
+++ erp5/trunk/products/ERP5Form/Extensions/ERP5Site_createModuleScribus.py Wed May 16 21:06:12 2007
@@ -1,7 +1,7 @@
 def ERP5Site_createModuleScribus(self, form_id=None, module_portal_type=None,
         portal_skins_folder=None, object_portal_type=None, object_title=None, module_id=None,
         module_title=None, selection_index=None, selection_name=None, import_scribus_file=None,
-        import_pdf_file=None, option_html=None, import_image_1=None, import_image_2=None,
+        import_pdf_file=None, option_html=None,desired_height=None, desired_width=None, import_image_1=None, import_image_2=None,
         import_image_3=None, **kw) :
   """ Creates a module, portal_type and ERP5Form from a scribus and
       PDFForm file"""
@@ -27,29 +27,28 @@
   ManageCSS = ManageCSS()
   generator = LocalGenerator()
 
-
   # DECLARING VARIABLES
-  def_lineNumberInList = 20
-  def_colorRequired = 'rgb(192,192,255)'
-  def_colorRequiredError = 'rgb(128,128,255)'
-  def_color = '#F6FFFF'
-  def_colorError = 'rgb(255,64,64)'
-  
-
+  def_lineNumberInList = 20 # JPS-XXX - hardcoded
+  def_colorRequired = 'rgb(192,192,255)' # JPS-XXX - hardcoded
+  def_colorRequiredError = 'rgb(128,128,255)' # JPS-XXX - hardcoded
+  def_color = '#F6FFFF' # JPS-XXX - hardcoded
+  def_colorError = 'rgb(255,64,64)' # JPS-XXX - hardcoded
 
   # recovering objects
   portal = context.getPortalObject()
   portal_types = portal.portal_types
   object_portal_type_id = object_portal_type
-
+  desired_height= desired_height
+  desired_width= desired_width
+  resolution= 300 # JPS-XXX - hardcoded
+  option_html = option_html
 
   # DECLARING NAMES
   # declaring names for ERP5 objects, such as Form, DTML Document, etc.
   # these names are stored in a dict (object_names)
   object_names = ManageModule.setObjectNames(object_portal_type_id,
                                              object_title)
-  
-  
+
   # CREATING NEW PORTAL TYPE FOR THE MODULE
   # Manage the creation of a ne portal_type for the module
   # (module is not saved for the moment, but properties can be
@@ -66,7 +65,7 @@
   skin_folder = ManageModule.setSkinFolder(portal,
                                            portal_skins_folder)
       
-      
+     
   # ERP FORM LIST PROCESSING
   # Create ERP5 Form in order to view the module
   # set up the factory based on skin_folder
@@ -94,6 +93,7 @@
   # parsing, allowing them to be updated when needed
   # and used if necessary.
   global_properties = ScribusParser.initFieldDict()
+  
 
   
   # PARSER VARIABLES DECLARATION
@@ -105,14 +105,11 @@
   properties_css_dict = {}
   # init page number
   page_number_int = 0
-
-
+  scale_factor=0
   # import scribus file
   # take the input ScribusFile and read the content
   xml_string = ScribusParser.getContentFile(import_scribus_file)
-  
   if xml_string == None:
-    LOG("ScribusParser",1,"Scribus file is empty !")
     print "no field was defined in the Scribus file"
     pass
   else:
@@ -120,7 +117,6 @@
     # GETTING FULL SCRIBUS DOCUMENT PROPERTIES
     # get string from ScribusFile content
     output_string = str(xml_string)
-    
     
     print " createmodule > ScribusParser.getXmlObjectPropertiesDict"
     # building a tree from the output string elaborated from the
@@ -141,8 +137,11 @@
     # to extract all the usefull properties and organize elements. Then check
     # attributes to get properties values.
     # This represents the main process of the script.
-    widget_properties = ScribusParser.getPropertiesConversionDict(text_field_list)
+    (widget_properties) = ScribusParser.getPropertiesConversionDict(text_field_list)
+
     print " createmodule < ScribusParser.getPropertiesConversionDict\n"
+    
+   
     
 
     # testing if final rendering is PDF-like
@@ -153,35 +152,30 @@
       # format (JPG) and add them to the skin folder as Image objects.
       # used only with option_html == 1
       # recover image_size
-      image_size = ManageFiles.setBackgroundPictures(import_pdf_file,
-                                        object_names,
-                                        skin_folder)
-      page_height, page_width = image_size
+      image_size=ManageFiles.setBackgroundPictures(import_pdf_file,object_names,skin_folder,desired_height,desired_width,resolution)
+      
+      page_height,page_width,original_page_height,original_page_width = image_size
+      
       print "   height = " + str(page_height)
       print "   width = " + str(page_width)
       print " createmodule < background generated\n"    
-      
       
     # add field from OrderedWidgetProperties in ERP5 Module created
     # radiofield_widget_properties = {}
     position = {}
     # personal_properties_list is used to create PropertySheet
     personal_properties_list = []
+
     # recovering number of pages
     global_properties['page'] = len(widget_properties)  
-    
-    
-    
+
     # CSS FILE INIT
     # init the CSS dict by creating sub-dicts to store various information
     # i.e : 'head', 'standard' ,'error', etc.
     # these sub-dicts are stored in the properties_css_dict
     properties_css_dict = ManageCSS.setInit()
 
-       
-    
     # BEGINING DATA INTERPRETATION
-    LOG("ScribusParser",0,"begining interpretation of data")
     print " createmodule > begining data interpretation"
     #iterating pages
     #print "   %s" % int(global_properties['page'])
@@ -189,31 +183,31 @@
       page_number = str(page_iterator)
       page_content = widget_properties[page_number]
       page_id = "page_" + page_number
-      
-      
-      
+
       if option_html == 1:
         # CSS PAGE DEFINITION (PAGE AND BACKGROUND IMAGE)
         # get CSS class properties relative to the actual page
         # (background picture position, picture size, etc.)
         # and add them to the css dict
-        properties_css_dict = ManageCSS.setPageProperties(
+  width_groups,height_groups = ManageFiles.getPageattributes(
+                                              global_properties,
+                                              import_pdf_file)
+        properties_css_dict,properties_page,actual_width,actual_height = ManageCSS.setPageProperties(
                                    properties_css_dict,
                                    page_iterator,
                                    page_id,
-                                   page_height)
-        
-       
-      
-          
-          
+                                   page_height,
+           page_width,
+           original_page_width,
+           original_page_height,width_groups,height_groups)
+
       # RESUME DATA INTERPRETATION
       # iterating pageobjects in page
       for index in range(len(page_content)):
         (id, properties_field) = page_content[index]
-        # testing each page_content              
+        # testing each page_content
         if properties_field.has_key('type'):
-          
+
           if option_html ==1:
             # CSS FIELD PROPERTIES
             # get CSS class properties related to the actual page_object
@@ -223,19 +217,24 @@
                                            properties_css_dict,
                                            page_content[index],
                                            page_width,
-					   page_height,
-					   page_iterator,
-					   page_gap,
-					   keep_page)
+             page_height,
+             page_iterator,
+             page_gap,
+             keep_page,
+             0,
+             0,
+             properties_page,actual_width,actual_height)
+
 
           # recover useful page_object attributes from scribus dict
           # to be able to create and update correctly the fields
           # composing the form
+
           ScribusParser.getFieldAttributes(page_content[index],
                                            option_html,
                                            page_id,
                                            global_properties)
-          
+
     # CSS CLASS (generateOutputContent)
     if option_html ==1:
 
@@ -248,7 +247,7 @@
 
       # save CSS string content into ERP5
       ManageFiles.setCSSFile(factory,object_names['css'],form_css_content)
-
+      
 
 
 
@@ -270,13 +269,15 @@
 
   # create fields corresponding to the page_objects
   # recovered from the scribus file
+  
   ManageModule.setFieldsInObjectForm(skin_folder,
                                      object_names,
                                      default_groups,
                                      global_properties,
                                      option_html
                                      )
-  print " createmodue < fields created in ERP5 Form\n"
+  
+  print " createmodule < fields created in ERP5 Form\n"
 
                                      
                                      
@@ -296,6 +297,7 @@
 
 
   # PROPERTYSHEET AND DOCUMENT CREATION
+  
   print " createmodule > PropertySheet and Document creation"
   # recover personal properties and save them in a PropertySheet
   # then create the Document related to the object
@@ -346,4 +348,4 @@
                             )
 
   # redirect
-  portal.REQUEST.RESPONSE.redirect( redirect_url )
+  portal.REQUEST.RESPONSE.redirect(redirect_url )

Modified: erp5/trunk/products/ERP5Form/ScribusUtils.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Form/ScribusUtils.py?rev=14510&r1=14509&r2=14510&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Form/ScribusUtils.py (original)
+++ erp5/trunk/products/ERP5Form/ScribusUtils.py Wed May 16 21:06:12 2007
@@ -3,6 +3,7 @@
 # Copyright (c) 2005 Nexedi SARL and Contributors. All Rights Reserved.
 #               Guy Oswald OBAMA <guy at nexedi.com>
 #               thomas <thomas at nexedi.com>
+#               Mame C.Sall <mame at nexedi.com>
 #
 # This program is Free Software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -28,7 +29,7 @@
 
 from Products.PythonScripts.Utility import allow_class
 from ZPublisher.HTTPRequest import FileUpload
-#from xml.dom.ext.reader import PyExpat
+from xml.dom.ext.reader import PyExpat
 from xml.dom import Node, minidom
 from AccessControl import ClassSecurityInfo
 from Globals import InitializeClass, get_request
@@ -41,7 +42,7 @@
 from urllib import quote
 
 from Products.ERP5.ERP5Site import ERP5Site
-
+from Products.Formulator.TALESField import TALESMethod
 # defining global variables
 # ANFLAG tag
 # these values can be found in the Scribus document format
@@ -77,6 +78,7 @@
     """
     temp_portal_type = object_portal_type_id.replace(' ','')
     object_names = {}
+    real_object_names={}
     # declaring object that generate pdf output
     object_names['view_pdf'] = temp_portal_type + '_view' +\
                     temp_portal_type + 'AsPdf'
@@ -143,8 +145,8 @@
     form_list_id = form_view_list_object.id
     form_list = form_view_list_object.restrictedTraverse(form_list_id)
     # defining groups for objects listing
-    form_view_list_object.rename_group('Default','left')
-    default_groups = ['right','center','bottom','hidden']
+    form_view_list_object.rename_group('Default','bottom')
+    default_groups = []
     # adding groups
     for group in default_groups:
       form_view_list_object.add_group(group)
@@ -157,7 +159,6 @@
     title = title_module
     field_type = 'ListBox'
     form_view_list_object.manage_addField(id,title,field_type)
-    form_view_list_object.move_field_group(['listbox'], 'left', 'bottom')
     # manage ListBox settings
     values_settings = {}
     values_settings['pt'] = "form_list"
@@ -171,7 +172,8 @@
     # adding field columns
     field_attributes.values['columns'] = [('id','ID'),
                                           ('title','Title'),
-                                          ('description','Description')]
+                                          ('description','Description'),
+					  ('translated_simulation_state','State')]
     field_attributes.values['list_action'] = 'list'
     field_attributes.values['search'] = 1
     field_attributes.values['select'] = 1
@@ -184,7 +186,7 @@
                     object_names,
                     option_html,
                     global_properties,
-                    object_portal_type,
+                    object_portal_type
                     ):
     """
     create and manage erp5 form to handle object, and update its
@@ -196,6 +198,7 @@
     form_view_id_object = skin_folder[object_names['view_id']]
     form_id = form_view_id_object.id
     form = form_view_id_object.restrictedTraverse(form_id)
+    #get the scaling factor
     # managing form groups
     default_groups = []
     if option_html !=1:
@@ -205,6 +208,7 @@
     else:
       # using special page positioning convention for
       # pdf-like rendering
+      del default_groups[0:]
       for page_iterator in range(global_properties['page']):
         page_number = 'page_%s' % str(page_iterator)
         default_groups.append(page_number)
@@ -238,8 +242,7 @@
     # using the dict declared just above to set the attributes
     for key, value in values.items():
       setattr(form,key,value)
-    return default_groups
-
+    return (default_groups)
 
   security.declarePublic('setFieldsInObjectForm')
   def setFieldsInObjectForm(self,
@@ -286,6 +289,7 @@
           field_type = field_values['erp_type']
           field_title = field_values['title']
           field_order = field_values['order']
+          #field_tales = field_values['tales']
           # creating new field in form
           form_view_id_object.manage_addField(field_id,
                                             field_title,
@@ -296,6 +300,15 @@
                                              field_order)
           # recover field
           access_field = getattr(form_view_id_object,field_id)
+          if field_type == 'CheckBoxField':
+            test_name= field_id[3:]
+            tales = {field_id : {'default' : 'here'+ '/'+ test_name}}
+
+            forms = [object_names['view_id']]
+            form = form_view_id_object.restrictedTraverse(forms[0])
+            for k, v in tales.items() :
+              if hasattr(form, k) :
+                form[k].manage_tales_xmlrpc(v)
           #if field_type == 'CheckBoxField':
           #  print "    dir(%s) > %s" % (field_id,dir(access_field))
           #  print "---manage_tales > %s \n\n" % dir(access_field.manage_tales)
@@ -465,7 +478,7 @@
                        portal_type = str(module_portal_type),
                        title       = title_module)
 
-
+   
 class ManageFiles:
   """
   Manages PDF file, by importing the PDF document and then getting
@@ -532,26 +545,35 @@
               if cell_process_name_list[-1] == 'List':
                 TALES = "python: " + ", ".join(
                      "here.get" + "".join(cell_process_name_list) + "()" )
+
               else:
                 TALES = "python: here.get" + "".join(
                      cell_process_name_list) + "()"
+
             else:
               # PropertySheet and Document 
               if cell_process_name_list[-1] == 'List':
                 TALES = "python: " + ", ".join(
                       "here.getProperty('" + cell_name[3:] + "')")
+
               else:
                 TALES = "python: here.getProperty('" + cell_name[3:] +"')"
             print "   %s > %s " % (cell_name,TALES)
             c.setCellTALES(cell_name,TALES)
 
-
+  def getPDFFile(self, file_descriptor):
+    """ Get file content """
+
+    return file_descriptor.open()
 
   security.declarePublic('setBackgroundPictures')
   def setBackgroundPictures(self,
                             pdf_file,
                             object_names,
-                            skin_folder
+                            skin_folder,
+	                    desired_height,
+	                    desired_width,
+	                    resolution
                             ):
     """
     extract background pictures from pdf file and convert them
@@ -566,22 +588,50 @@
     image (i.e page_0) and returns them.
     """
     import commands
+    import tempfile
+    from tempfile import NamedTemporaryFile
     # opening new file on HDD to save PDF content
-    temp_pdf = open('/tmp/ScribusUtilsTempPDF','w')
+    #temp_test= NamedTemporaryFile(mode= "w+b")
+    #tempFile= NamedTemporaryFile().name
+    ScribusUtilsTempPDF= NamedTemporaryFile(mode= "w+b")
+    ScribusUtilstempsPDFName= NamedTemporaryFile().name
+    # going to the begining of the input file
+
+    # XXX - this is really bad because the appropriate 
+    # way to run zope is to create a local instance
+    # it should be removed XXX - some people
+    # do this just to make sure "it works" 
+    # but it is not even multiplatform
+    os.putenv('TMPDIR', '/tmp')
+    # saving content
+    temp_pdf = open(ScribusUtilstempsPDFName,'w')
+
     # going to the begining of the input file
     pdf_file.seek(0)
     # saving content
     temp_pdf.write(pdf_file.read())
     temp_pdf.close()
+
     # launching first soft to convert from PDF to PPM
-    result = commands.getstatusoutput( \
-         'pdftoppm -r 72 /tmp/ScribusUtilsTempPDF /tmp/ScribusUtilsTempPPM')
+    ScribusUtilstempsPPM = NamedTemporaryFile(mode="w+b")
+    ScribusUtilstempsPPMName = NamedTemporaryFile().name
+    result = commands.getstatusoutput('pdftoppm -r %s %s %s' % (resolution, ScribusUtilstempsPDFName, ScribusUtilstempsPPMName))
     # launching second soft to convert from PPM to JPEG
-    result = commands.getstatusoutput( \
-         'convert /tmp/ScribusUtilsTempPPM* jpg:/tmp/ScribusUtilsTempJPG')
+    ScribusUtilstempsJPG = NamedTemporaryFile(mode="w+b")
+    ScribusUtilstempsJPGName = NamedTemporaryFile().name
+    
+    original_result= commands.getstatusoutput('identify %s' % (ScribusUtilstempsPDFName))
+    result = commands.getstatusoutput('convert -density %s -resize %sx%s %s %s' % (resolution,desired_width,desired_height,ScribusUtilstempsPPMName + '*', 'jpg:' + ScribusUtilstempsJPGName))
+    
+    number = ScribusUtilstempsJPGName.find('tmp')
+    directory_tmp= ScribusUtilstempsJPGName[:(number+4)]
+
     # getting list of JPG output files
-    result = commands.getstatusoutput( \
-         'ls /tmp/ | grep ScribusUtilsTempJPG')
+    result = commands.getstatusoutput('ls %s | grep  %s' % (directory_tmp, ScribusUtilstempsJPGName.split('/')[-1]))
+    # deleting all temporary files
+    # getting the original size of the file
+    real_size_x= 0
+    real_size_y= 0
     image_number = 0
     if result[1] != '':
       # result[1] contains the output string from the command,
@@ -594,17 +644,57 @@
         addImage(form_page_id,temp_jpg,"background image")
         image_number += 1
     # deleting all temporary files
-    result = commands.getstatusoutput('rm -f /tmp/ScribusUtilsTemp*')
+    result = commands.getstatusoutput('rm -f /tmp/tmp*') # JPS-XXX Extremely dangerous
     # open page_0's final background picture to recover size_x and size_y
     final_image = getattr(skin_folder, object_names['page'] + '0')
-    size_x = final_image.getProperty('height')
-    size_y = final_image.getProperty('width')
-    # return size
-    #print size_x
-    #print size_y
-    return (size_x, size_y)
-
-
+    size_x = desired_height
+    size_y = desired_width
+    
+    return (size_x, size_y,real_size_x,real_size_y)
+
+  security.declarePublic('getPageattributes')
+  def getPageattributes (self,
+                    global_properties,
+	            pdf_file
+                    ):
+    import commands
+    from tempfile import NamedTemporaryFile
+    # opening new file on HDD to save PDF content
+    ScribusUtilsOriginalTempPDF= NamedTemporaryFile(mode= "w+b")
+    ScribusUtilsOriginaltempsPDFName= NamedTemporaryFile().name
+    
+    # going to the begining of the input file
+    
+    # saving content
+    temp_pdf = open(ScribusUtilsOriginaltempsPDFName,'w')
+    # going to the begining of the input file
+    pdf_file.seek(0)
+    # saving content
+    temp_pdf.write(pdf_file.read())
+    temp_pdf.close()	  
+    width_groups = []
+    height_groups = []
+    # launching first soft to convert from PDF to PPM
+    ScribusUtilsOriginaltempsPPM = NamedTemporaryFile(mode="w+b")
+    ScribusUtilsOriginaltempsPPMName = NamedTemporaryFile().name
+    original_result = commands.getstatusoutput('pdftoppm -r %s %s %s' % (72, ScribusUtilsOriginaltempsPDFName, ScribusUtilsOriginaltempsPPMName))
+    original_result= commands.getstatusoutput('identify %s' % (ScribusUtilsOriginaltempsPPMName + '*'))
+	 	  
+    pg_nbr = len(original_result[1].split('\n'))
+    real_size_x = {}
+    real_size_y = {}
+    for i in range(0,pg_nbr):
+      real_size_x[i]= \
+         float(original_result[1].split('\n')[i].split(' ')[2].split('x')[1])
+      real_size_y[i]= \
+         float(original_result[1].split('\n')[i].split(' ')[2].split('x')[0])
+    for page_iterator in range(global_properties['page']):  
+      actual_page_height = real_size_x[page_iterator]
+      actual_page_width = real_size_y[page_iterator]
+      width_groups.append(actual_page_width)
+      height_groups.append(actual_page_height)
+    return (width_groups,height_groups)
+    
   security.declarePublic('setPropertySheetAndDocument')
   def setPropertySheetAndDocument(self,
                        global_properties,
@@ -695,14 +785,16 @@
     # return dict
     return properties_css_dict
 
-
-
   security.declarePublic('setPageProperties')
   def setPageProperties(self
-          ,properties_css_dict
-          ,page_iterator
+          ,properties_css_dict,
+          page_iterator
           ,page_id
-          ,page_height):
+          ,page_height,
+	  page_width,
+	  original_page_width,
+	  original_page_height,
+	  width_groups,height_groups):
     """
     recover all CSS data relative to the current page and save these
     information in the output dict
@@ -710,6 +802,7 @@
     # Processing current page for CSS data
     # getting properties
     properties_css_page = {}
+    properties_page = {}
     properties_css_page['position'] = 'relative'
     # creating image class for background
     properties_css_background = {}
@@ -721,14 +814,34 @@
     if page_iterator == 0:
       # margin-top = 0 (first page)
       properties_css_page['margin-top'] = "0px"
+      properties_css_background['height'] = \
+        str(page_height) + 'px'
+      properties_css_background['width']= \
+        str (page_width) + 'px'
+      properties_page['actual_width'] = width_groups[page_iterator]
+      properties_page['actual_height'] = height_groups[page_iterator]
+      actual_width = width_groups[page_iterator]
+      actual_height = height_groups[page_iterator] 	
+      #properties_css_background['margin-top'] = \
+      #   str((y_pos -10))+ 'px'
+      #properties_css_background['margin-left']= \
+      #   str((x_pos- 5))+   'px'	
     else:
       # margin-top = page height
-      properties_css_page['margin-top'] = "%spx" % (page_height + 20)
+      properties_css_page['margin-top'] = "%spx" %(page_height + 20)
+      properties_page['actual_width'] = width_groups[page_iterator]
+      properties_page['actual_height'] = height_groups[page_iterator] 
+      actual_width = width_groups[page_iterator-1]
+      actual_height = height_groups[page_iterator -1]
+      properties_css_background['height'] = \
+        str(page_height) + 'px'
+      properties_css_background['width']= \
+        str (page_width) + 'px'
     # adding properties dict to global dicts
     properties_css_dict['head'][page_id] = properties_css_page
     properties_css_dict['head'][background_id] = properties_css_background
     # return updated dict
-    return properties_css_dict
+    return (properties_css_dict,properties_page,actual_width,actual_height)
 
 
 
@@ -739,25 +852,35 @@
             ,properties_css_dict
             ,field
             ,page_width
-            ,page_height
-            ,page_iterator
+            ,page_height,
+            page_iterator
             ,page_gap
-            ,keep_page):
+            ,keep_page,
+	  original_page_width,
+	  original_page_height,properties_page,actual_width,actual_height):
     """
     recover all CSS data relative to the current page_object (field)
     and save these informations in the output dict
     """
     (field_name, properties_field) = field
     print "   => %s : %s" % (field_name,properties_field['rendering'])
+    	    
     # updating field properties if necessary
     if keep_page == 1:
       # document format is 1.3.* and define object position from the top-left
       # corner of the first page, whereas the field position is expected to
       # be found from the current's page top left corner.
       # that's why Y position must be updated
+      
+      scaling_factor1= (page_width)/(properties_page['actual_width'])		
+      scaling_factor2= (page_height)/(properties_page['actual_height'])
+      
       properties_field['position_y'] = \
          str(float(properties_field['position_y']) - \
-         (page_height + page_gap)* page_iterator)
+         (actual_height + page_gap)* page_iterator)
+      
+
+			 
     # Processing object for CSS data
     # declaring dict containing all css data
     # _stand for general display
@@ -776,25 +899,35 @@
     properties_css_object_err_d['padding'] = '0px'
     # getting field height
     properties_css_object_stand['height'] = \
-        str(properties_field['size_y']) + 'px'
+        str(scaling_factor2 *float(properties_field['size_y'])) + 'px'
     properties_css_object_error['height'] = \
-        str(properties_field['size_y']) + 'px'
+        str(scaling_factor2 *float(properties_field['size_y'])) + 'px'
     # defining font-size from height - 2 (this value seems to have a good
     # rendering on Mozilla and Konqueror)
     # do not match for TextArea (as it is a multiline object)
     if properties_field['type'] != 'TextAreaField':
+      if float(properties_field['size_y']) > 8.0:	    
+        properties_css_object_stand['font-size'] = \
+          str((scaling_factor2 *float(properties_field['size_y']))-5.5 ) + 'px'
+        properties_css_object_error['font-size'] = \
+          str((scaling_factor2 *float(properties_field['size_y']))-5.5) + 'px'
+      else:
+	properties_css_object_stand['font-size'] = \
+          str((scaling_factor2 *float(properties_field['size_y']))-3.5 ) + 'px'
+        properties_css_object_error['font-size'] = \
+          str((scaling_factor2 *float(properties_field['size_y']))-3.5) + 'px'    
+    else:
       properties_css_object_stand['font-size'] = \
-        str(int(properties_field['size_y']) - 2) + 'px'
+        str(12) + 'px'
       properties_css_object_error['font-size'] = \
-        str(int(properties_field['size_y']) - 2) + 'px'
-    # getting field position
+        str(12) + 'px'
     properties_css_object_err_d['margin-left'] = str(page_width + 20 ) + 'px'
     properties_css_object_stand['margin-top'] = \
-        str(properties_field['position_y']) + 'px'
+      str((scaling_factor2 *float(properties_field['position_y']))) + 'px'
     properties_css_object_error['margin-top'] = \
-        str(properties_field['position_y']) + 'px'
+      str((scaling_factor2 *float(properties_field['position_y']))) + 'px'
     properties_css_object_err_d['margin-top'] = \
-        str(properties_field['position_y']) + 'px'
+      str((scaling_factor2 *float(properties_field['position_y']))) + 'px'
     # adding special text_color for text error
     properties_css_object_err_d['color'] = 'rgb(255,0,0)'
     # then getting additional properties
@@ -804,8 +937,11 @@
       # color = 'green' when error
       properties_css_object_stand['background'] = 'rgb(192,192,255)'
       properties_css_object_error['background'] = 'rgb(128,128,255)'
+    elif properties_field['type'] != 'TextAreaField':
+      properties_css_object_stand['background'] = '#F5F5DC'
+      properties_css_object_error['background'] = 'rgb(255,64,64)'      
     else:
-      properties_css_object_stand['background'] = '#F6FFFF'
+      properties_css_object_stand['background'] = '#F5F5DC'
       properties_css_object_error['background'] = 'rgb(255,64,64)'
 
     # add completed properties (in our case only the class rendering the text
@@ -819,13 +955,13 @@
       # single rendering (like StringField, TextArea, etc.).
       # Do not need any special treatment
       properties_css_object_stand['width'] = \
-        str(properties_field['size_x']) + 'px'
+        str(scaling_factor1 *float(properties_field['size_x'])) + 'px'
       properties_css_object_error['width'] = \
-        str(properties_field['size_x']) + 'px'
+        str(scaling_factor1 *float(properties_field['size_x'])) + 'px'
       properties_css_object_stand['margin-left'] = \
-        str(properties_field['position_x']) + 'px'
+        str((scaling_factor1 *float(properties_field['position_x']))) + 'px'
       properties_css_object_error['margin-left'] = \
-        str(properties_field['position_x']) + 'px'
+        str((scaling_factor1 *float(properties_field['position_x']))) + 'px'
       # in case of checkboxfield, '_class_2' is used because field is rendered
       # as two fields, the first one hidden. (supports xhtml_style)
       # UPDATE : modified because need to keep compatibility with html_style
@@ -836,7 +972,6 @@
       # adding all these properties to the global dicts
       properties_css_dict['standard'][field_id] = properties_css_object_stand
       properties_css_dict['error'][field_id] = properties_css_object_error
-
     else:
       sub_field_dict = {}
       field_dict = {}
@@ -853,16 +988,16 @@
         # processing main StringField
         field_dict[1] = {}
         field_dict[1]['width'] = \
-           str(int(properties_field['size_x']) / 2) + 'px'
+           str(scaling_factor1*(float(properties_field['size_x']) / 2)) + 'px'
         field_dict[1]['margin-left'] = \
-           str(properties_field['position_x']) + 'px'
+           str(scaling_factor1*float(properties_field['position_x'])) + 'px'
 
         # processing secondary input picture
         field_dict[2] = {}
-        field_dict[2]['width'] = str(int(properties_field['size_x']) /2) + 'px'
+        field_dict[2]['width'] = str(scaling_factor1*(float(properties_field['size_x']) /2)) + 'px'
         field_dict[2]['margin-left'] = \
-              str(int(properties_field['size_x']) /2  +\
-              int(properties_field['position_x'])) + 'px'
+              str(scaling_factor1*(float(properties_field['size_x']) /2  +\
+              float(properties_field['position_x']))) + 'px'
       elif properties_field['type'] == 'DateTimeField':
         # rendering DateTimeField, composed at least of three input
         # areas, and their order can be changed
@@ -885,54 +1020,54 @@
           print "   Option : Date Only"
           field_nb = 3
           # same as before but without hours and minutes
-          width_part = int(float(properties_field['size_x']) / 4)
+          width_part = int((float(properties_field['size_x']) / 4))
 
 
         print "  input_order=%s" % properties_field['input_order']
         # defining global field rendering (for Date), ignoring for the moment
         # the whole part about the time
         if properties_field['input_order'] in \
-               ['day/month/year','dmy','month/day/year','mdy']:
+             ['day/month/year','dmy','month/day/year','mdy']:
           # specified input order. must be dd/mm/yyyy or mm/dd/yyyy (year is
           # the last field).
           # processing first field
           field_dict[1] = {}
-          field_dict[1]['width'] = str(width_part) + 'px'
+          field_dict[1]['width'] = str(scaling_factor1*float(width_part)) + 'px'
           field_dict[1]['margin-left'] = \
-             str(properties_field['position_x']) + 'px'
+             str(scaling_factor1 *float(properties_field['position_x'])) + 'px'
 
           # processing second field
           field_dict[2] = {}
-          field_dict[2]['width'] = str(width_part) + 'px'
+          field_dict[2]['width'] = str(scaling_factor1*float(width_part)) + 'px'
           field_dict[2]['margin-left'] = \
-             str(int(properties_field['position_x']) + width_part) + 'px'
+             str(scaling_factor1 *(float(properties_field['position_x']) + width_part)) + 'px'
 
           # processing last field
           field_dict[3] = {}
-          field_dict[3]['width'] = str(width_part*2) + 'px'
+          field_dict[3]['width'] = str(scaling_factor1*float(width_part*2)) + 'px'
           field_dict[3]['margin-left'] = \
-             str(int(properties_field['position_x']) + width_part*2) + 'px'
+             str(scaling_factor1 *(float(properties_field['position_x']) + width_part*2)) + 'px'
         else:
           # all other cases, including default one (year/month/day)
           width_part = int(int(properties_field['size_x']) / 4)
 
           # processing year field
           field_dict[1] = {}
-          field_dict[1]['width'] = str(width_part *2) + 'px'
+          field_dict[1]['width'] = str(scaling_factor1*float(width_part *2)) + 'px'
           field_dict[1]['margin-left'] = \
-             str(properties_field['position_x']) + 'px'
+             str(scaling_factor1 *float(properties_field['position_x'])) + 'px'
 
           # processing second field (two digits only)
           field_dict[2] = {}
-          field_dict[2]['width'] = str(width_part) + 'px'
+          field_dict[2]['width'] = str(scaling_factor1*float(width_part)) + 'px'
           field_dict[2]['margin-left'] = \
-            str(int(properties_field['position_x']) + width_part*2) + 'px'
+            str(scaling_factor1 *(float(properties_field['position_x']) + width_part*2)) + 'px'
 
           # processing day field
           field_dict[3] = {}
-          field_dict[3]['width'] = str(width_part) + 'px'
+          field_dict[3]['width'] = str(scaling_factor1*float(width_part)) + 'px'
           field_dict[3]['margin-left'] = \
-            str(int(properties_field['position_x']) + width_part*3) + 'px'
+            str(scaling_factor1 *(float(properties_field['position_x']) + width_part*3)) + 'px'
 
 
         # rendering time if necessary
@@ -989,12 +1124,13 @@
         print "    class=%s" % class_name
         for prop_id in properties_css_dict['standard'][class_name].keys():
           print "      prop:%s=%s" % (prop_id,properties_css_dict['standard'][class_name][prop_id])
+	
       
     return properties_css_dict
 
-    
-    
-    
+  
+ 
+  
   security.declarePublic('setFinalProperties')
   def setFinalProperties(self
                         ,properties_css_dict
@@ -1215,23 +1351,22 @@
         return (returned_page_dict,keep_page,0)
 
         # end parsing document version 1.2.*
-        
+
       else:
         print " found Scribus Doucment format 1.3"
         # assuming version is compliant with 1.3.* specifications
 
-	keep_page = 1
-
-	
+        keep_page = 1
 
         # first of all getting DOCUMENT element to recover Scratch coordinates
         document_list = dom_root.getElementsByTagName("DOCUMENT")
         scratch_left = int(float(document_list[0].attributes["ScratchLeft"].value))
         scratch_top  = int(float(document_list[0].attributes["ScratchTop"].value))
-	page_gap = int(float(document_list[0].attributes["BORDERTOP"].value))
-
+        page_gap = int(float(document_list[0].attributes["BORDERTOP"].value))
+        scribus_page_width= int(float(document_list[0].attributes["PAGEWIDTH"].value))
+        scribus_page_height = \
+           int(float(document_list[0].attributes["PAGEHEIGHT"].value)) 
         print " DOCUMENT > scratch_left = %s      scratch_top = %s" % (scratch_left,scratch_top)
-        
         #page_list = dom_root.getElementsByTagName("PAGE")
         page_object_list = dom_root.getElementsByTagName("PAGEOBJECT")
 
@@ -1322,34 +1457,36 @@
       # nb attribte are added t othe end of the 'has nb' list
       nb_property_nbkey_list = []
       nb_property_nonbkey_list = []
-      
+
       # declaring output object
       returned_object_dict = {}
-      
+
       # if page_content.haskey('my_fax_field')
       # print "my_fax_field"
       for object_data in page_content:
         # iterating through 'PAGEOBJECT' of the page
         # id = object_name
         # content = object_content
+
         object_name = object_data['ANNAME']
         del object_data['ANNAME']
         object_content = object_data
-
+        multiline_field= 0
+        #multiline_field= object_content['ANFLAG']
         print "  => PAGEOBJECT = " + str(object_name)
         # recovering other attributes list (string format) from 'ANTOOLTIP'
         text_tooltipfield_properties = \
            sp.getObjectTooltipProperty('ANTOOLTIP','',object_name,object_content)
+        #recovering the page attributes
+
         #declaring output file
         tooltipfield_properties_dict = {}
         #splitting the different attributes
         tooltipfield_properties_list =  \
                     text_tooltipfield_properties.split('#')
-        
+
         print "      " + str(tooltipfield_properties_list)
-        
-        
-        
+
         # test if first argument is nb according to previous
         # naming-conventions i.e composed of three digits without
         # id 'nb:' written
@@ -1387,6 +1524,7 @@
         #and 'ANTOOLTIP'
         #
         object_properties = {} 
+	page_properties = {}
         # getting object position and size
         object_properties['position_x'] = \
               sp.getObjectTooltipProperty('XPOS',
@@ -1398,6 +1536,7 @@
                                           '0',
                                           object_name,
                                           object_content)
+					  
         object_properties['size_x'] = \
              sp.getObjectTooltipProperty('WIDTH',
                                          '100',
@@ -1405,10 +1544,11 @@
                                          object_content)
         object_properties['size_y'] = \
               sp.getObjectTooltipProperty('HEIGHT',
-                                          '17',
+                                           '17',
                                           object_name,
                                           object_content)
-
+				  
+       
         
         # converting values to integer-compliant to prevent errors
         # when using them for that converting from 'str' -> 'float'
@@ -1423,8 +1563,8 @@
               str(int(float(object_properties['size_x'])))
         object_properties['size_y'] = \
               str(int(float(object_properties['size_y'])))
-        
-        
+	
+       
         # getting object title
         # object title can only be user-specified in the 'tooltip' dict
         object_properties['title'] = \
@@ -1775,7 +1915,7 @@
     
     # returning final dict containing all the modified data
     print "  => end ScribusParser.getPropertiesConversion"
-    return returned_page_dict
+    return (returned_page_dict)
 
 
 
@@ -1794,6 +1934,8 @@
     global_properties = {}
     global_properties['object'] = global_object_dict
     global_properties['page'] = global_page_number
+    global_properties['page_width']= 595
+    global_properties['page_height']= 842
     # return final main dict
     return global_properties
 
@@ -1896,6 +2038,10 @@
   def getContentFile(self, file_descriptor):
     """ Get file content """
     return file_descriptor.read()
+  security.declareProtected('Import/Export objects', 'getFileOpen')
+  def getFileOpen(self, file_descriptor):
+    """ Get file content """
+    return file_descriptor.open('r')
   
 InitializeClass(ScribusParser)
 allow_class(ScribusParser)  




More information about the Erp5-report mailing list