加载中…
个人资料
Odoo文档交流
Odoo文档交流
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,129,788
  • 关注人气:344
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

[转载]在windows下打印OpenERP工作流的方法

(2014-06-22 20:48:18)
标签:

转载

分类: Odoo问题解决
在OpenERP(即未来的Odoo)开发者模式的debug菜单中, 有一个菜单项“print workflow”, 在windows环境下使用这个菜单可能会存在一些问题。

如下是使用这个菜单中的一点经验。

【1】 安装 Ghostscript软件
软件下载地址:
http://downloads.ghostscript.com/public/gs914w32.exe
http://downloads.ghostscript.com/public/gs914w64.exe

该软件不自动修改环境变量,安装后,需要将它的lib目录和bin目录加入到环境变量中。
缺省安装情况下, 这两个目录的位置是:
c:Program Filesgsgs9.14lib
c:Program Filesgsgs9.14bin

【2】 安装 graphviz软件
软件下载地址:
http://www.graphviz.org/pub/graphviz/stable/windows/graphviz-2.38.msi

该软件不自动修改环境变量,安装后,需要将它的bin目录加入到环境变量中。
缺省安装情况下, 这个目录的位置是:
c:Program FilesGraphviz2.38bin

【3】修改文件 baseirworkflowprint_instance.py
在原文件中,下面这段代码在windows上, 不能正常地执行ps2pdf.bat
[转载]在windows下打印OpenERP工作流的方法

我们参照 report_webkitreport_webkit.py的做法, 将tools.exec_comman_pipe 换成了ubprocess.call
如下是修改后的代码
        if os.name == "nt":
            prog = 'ps2pdf.bat'
        else:
            prog = 'ps2pdf'
           
        #remark by laoliu
        #args = (prog, '-', '-')
        #input, output = tools.exec_command_pipe(*args)
        #input.write(ps_string)
        #input.close()
        #self.result = output.read()
        #output.close()
         
       
        #added by laoliu
        if os.name == "nt":
            tmp_dir = tempfile.gettempdir()
            tmp_fn =str(time.time());
            ps_file_fn  = os.path.join(tmp_dir, 'temp_'+str(time.time()) + '.ps')
            pdf_file_fn = os.path.join(tmp_dir, 'temp_'+str(time.time()) + '.pdf')
           
            ps_file = file(ps_file_fn, 'w')
            ps_file.write(ps_string)
            ps_file.close()   
           
            command = ['ps2pdf.bat']
            command.append(ps_file_fn)
            command.append(pdf_file_fn)
           
            stderr_fd, stderr_path = tempfile.mkstemp(text=True)
            try:
                status = subprocess.call(command, stderr=stderr_fd)
                os.close(stderr_fd) # ensure flush before reading
                stderr_fd = None # avoid closing again in finally block
                fobj = open(stderr_path, 'r')
                error_message = fobj.read()
                fobj.close()
                if not error_message:
                    error_message = _('No diagnosis message was provided')
                else:
                    error_message = _('The following diagnosis message was provided:n') + error_message
                if status :
                    raise except_osv(_('ps2pdf error' ),
                                 _("The command 'ps2pdf' failed with error code = %s. Message: %s") % (status, error_message))
           
                pdf_file = open(pdf_file_fn, "rb")
                self.result = pdf_file.read()
                pdf_file.close()
            finally:
                if stderr_fd is not None:
                    os.close(stderr_fd)
                try:
                    os.unlink(ps_file_fn)
                    os.unlink(pdf_file_fn)
                    os.unlink(stderr_path)
                except (OSError, IOError), exc:
                    _logger.error('cannot remove tempary file  %s',  exc)
           

        else:
            args = (prog, '-', '-')
            input, output = tools.exec_command_pipe(*args)
            input.write(ps_string)
            input.close()
            self.result = output.read()
            output.close()

        # end of laoliu add
        
        self.done = True

在这个py文件的开头,还需要导入一些python库
import tempfile
import time
import subprocess
from openerp.tools.translate import _

来自我的印象笔记 https://app.yinxiang.com/shard/s8/sh/5a19dd55-7039-4572-bdb8-f005ca85b8ba/8a8daeec274bfc68ca31ac107072ece4

0

  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有