`
shangjava
  • 浏览: 1229217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Redmine之报表应用研究

阅读更多

近来将RedMine的源代码下下来进行研究,主要目的是研究它的Report功能是如何实现的

目前研究结果总结为几点:

1)Remine界面上支持PDF,CSV,HTML输出,但没有单独的报表运行中心,只有在Issue及Gant界面有报表输出功能

2)新建两个用户a和b,a用户在创建时默认语言选择“English”,b用户选择"Chinese(Simple)",进行报表打印时发现第一个用户打印出来的PDF报表中文显示为乱码,第二个用户打印的PDF报表中文显示正常

对于以上两点,进行了代码跟踪,得出了以下结论

1)报表输出的代码写在IssuesController,关键代码如下:

代码中很清晰看到CSV、PDF 的输出调用的是 issues_to_csv,issues_to_pdf(Gant界面的报表调用的是gant_to_pdf)

从名字可猜测Redmine中的报表打印并不通用,只是针对特定的报表进行了固定的输出处理

issue_to_pdf,issues_to_pdf,gant_to_pdf都包含在pdf.rb中,代码如下:

而issues_to_csv包含在IssuesHelper中

由以上的代码可以得出结论:RedMine中只有甘特图、问题界面支持报表输出,而且不是每一个地方都支持PDF与CSV两种格式的

2)为什么默认语言类型不同的用户输出相同的报表会得到不一样的结果(关于中文乱码)

要解释这个问题,重点在pdf.rb中

RedMine中对PDF的输出用的是FPDF,FPDF中支持中文输出,它内嵌了GB、Big5字体,对于中文的输出需要做两步

1、在输出PDF之前设置输出字体为 GB或Big5

2、对于中文在输出之前进行字符集转换,从UTF-8转换成支持中文的字符集(如GBK,GB2312)

那么PDF是怎么做的呢?

首先,看以下代码:

对于默认语言为“English”的用户,登陆后观察current_language的值,发现为"en"

对于默认语言为"Chinese(Simple)"的用户,登陆后观察current_language的值,发现为"zh"

那么current_language的值是怎么得到的呢?

在Redmine中有些配置文件,其中涉及到default_language的设置,默认都设置为"en",尝试改为"zh",发现current_language的值没有发生改变

在研究了其他的源代码发现current_language的值与数据表users中的LANGUAGE字段关联

在ApplicationController中发现以下代码:

既然a用户和b用户因为默认语言不一样导致current_language不一样,那么如果在PDF.initilize中将current_language强制设置为"zh",是否就能得到一样的结果呢?测试结果发现,即使这样设置,a用户打印的PDF报表中文仍然是乱码,不同的是,乱码与之前的不一样。

问题到底出在哪呢?

继续研究,发现PDF中的Cell方法(FPDF输出的关键方法之一)中有这么一句:

原来在这里进行了字符集转换,那么a用户与b用户得到的 l(:general_pdf_encoding)是否用相同呢,测试发现,

a用户进入系统后得到的值为"ISO-8859-1"

b用户进入系统后得到的值为"gb18030"

单独FPDF输出报表进行测试,发现

在选择 GB 字体的情况下,

Iconv.conv("gb18030","UTF-8","测试")与 Iconv.conv("ISO-8859-1","UTF-8","测试")得到的结果不一样,前者是正常显示中文,后者则显示乱码

至此,以上两点疑问都得到了解释,这些就是到目前研究RedMine报表应用得到的结论

分享到:
评论

相关推荐

    Redmine在项目管理中的应用

    Redmine在项目管理中的应用

    linux下redmine之scrum插件

    现在,可以启动或重启Redmine服务以应用改动: ```bash bundle exec rake db:migrate RAILS_ENV=production sudo service apache2 restart # 或者其他web服务器,如nginx ``` 启动Redmine后,登录到你的Redmine...

    redmine自定义插件开发

    在编辑完插件信息后,需要重启应用服务,以便红矿系统加载新的插件。在浏览器输入http://localhost:3000/admin/plugins,登录后你将在插件列表看见你刚创建的一个新插件。 创建模组 在插件中,我们可以创建一个...

    BitNami的Redmine升级步骤

    Redmine是一款开源项目管理和追踪工具,广泛应用于各类项目管理场景中。对于使用BitNami发行版的用户来说,正确地进行Redmine的升级尤为关键。本文将详细介绍如何通过BitNami Stack迁移数据并升级Redmine的过程。 #...

    Redmine缺陷数量统计

    Redmine是一款开源的项目管理工具,它广泛应用于软件开发领域,提供缺陷跟踪、项目里程碑、时间跟踪、文档管理等功能。Bitnami则是一个提供多种开源应用程序预打包的平台,使得用户能够快速部署包括Redmine在内的...

    Redmine在项目管理中的应用.ppt

    Redmine在项目管理中的应用.ppt 普及介绍

    redmine

    4. **问题追踪**:Redmine的核心功能之一就是问题追踪。用户可以创建、分配、评论问题,通过状态跟踪其进度,如新建、开放、已解决、已关闭等。 5. **时间跟踪**:为了更好地管理项目时间和资源,Redmine允许用户...

    redmine_gitlab_hook plugin

    在实际应用中,Redmine GitLab Hook 插件还可以与其他 Redmine 插件集成,例如,与 GitLab Merge Request 集成,使得在 Redmine 中可以直接处理和追踪合并请求。此外,通过定制插件的配置,可以实现更复杂的逻辑,如...

    Redmine及SVN在项目管理中应用

    Redmine及SVN在项目管理中应用,bug流程基本管理

    Redmine API (Redmine 官方文档pdf版)

    通过了解不同资源的状态分类、如何指定内容类型以及如何进行认证等关键概念,开发人员可以有效地利用这个 API 来增强他们的应用程序,并与其他系统集成。希望本文能帮助您更好地理解 Redmine API 的工作原理,并激发...

    redmine中文使用手册

    Redmine是一款流行的开源问题跟踪系统,为团队管理提供了一整套解决方案,包括任务分配、进度监控、版本控制与BUG跟踪等。它支持多项目管理,能够处理各种类型的问题,如软件开发、维护、BUG修复以及日常任务跟踪。 ...

    redmine-java-api

    **标题解析:** "redmine-java-api" 是一个与Redmine项目管理软件相关的Java库,它提供了对Redmine REST API的访问。这个API使得开发者能够使用Java语言与Redmine服务器进行交互,执行各种操作,如创建、更新和管理...

    如何在局域网安装Redmine(原创)

    ### 如何在局域网安装Redmine(原创) #### Redmine简介 Redmine是一款基于Web的项目管理和跟踪工具,由Ruby on Rails (RoR)框架编写而成。它为团队提供了全面的功能,包括但不限于问题追踪、任务管理、版本控制...

    redmine 2.2.2

    3. **问题追踪**:Redmine 的核心功能之一是问题追踪,用户可以创建、分配、跟踪和关闭问题。每个问题都有状态、优先级、分类等属性,便于团队协作解决。 4. **版本控制集成**:Redmine 支持与多种版本控制系统(如...

    redmine scrum敏捷组件

    如果你是开发者或系统管理员,你可以研究这个包来了解其工作原理,或者按照文档配置到你的Redmine环境中。对于团队成员来说,熟悉Redmine Scrum组件的功能和操作将有助于提升团队的敏捷开发效率。

    redmine的三部曲 第一步安装redmine

    Redmine是一款基于Ruby on Rails框架开发的Web应用程序,支持多种数据库,如MySQL、PostgreSQL等。它的核心功能包括项目创建、任务分配、时间跟踪、版本控制集成以及邮件通知等,使得项目管理变得更为直观和高效。 ...

    redmine及SVN在项目管理中的应用

    将svn及redmine完美结合之后应用于项目管理中。

    redmine的一些教程

    3. **问题管理**:如何创建、更新、关闭问题,使用过滤器和报表来跟踪项目进展。 4. **文档协作**:创建、编辑和版本控制项目文档的步骤。 5. **通知与邮件提醒**:设置通知偏好,了解系统更新和活动。 三、...

Global site tag (gtag.js) - Google Analytics