首页  ·  知识 ·  云计算
動態轉換ASP.NET繁體CrystalReport報表(*.rpt)成簡體版
Rox  http://www.dotblogs.com.tw/rox/archive/2008/04/09/  综合  编辑:dezai  图片来源:网络
如何動態轉換ASP.NET 繁體Crystal Report報表(*.rpt)成簡體版? 在ASP.NET上使用Crystal Report設計的繁體報表, 如果能動態轉換成簡體, 就能省去

如何動態轉換ASP.NET 繁體Crystal Report報表(*.rpt)成簡體版?

在ASP.NET上使用Crystal Report設計的繁體報表,
如果能動態轉換成簡體, 就能省去同時維護繁體和簡體
二套系統的工作.

在輸出報表的VB中呼叫get_rpt function:


...
Dim reportDoc As New ReportDocument
reportDoc.Load(rptfun.get_rpt(Server.MapPath("xxx.rpt")))
...
 

rptfun.vb:


Imports CRAXDRT

Public Class rptfun
    Public Shared Function get_rpt(ByVal v_file As String) As String
        Dim v_cult As String = System.Configuration.ConfigurationSettings.AppSettings("Location").ToString()
        If v_cult = "zh-CN" Then
            Dim v1 As Integer = InStrRev(v_file, "\")
            Dim v2 As Integer = InStrRev(v_file, "\", v1 - 1)
            Dim v3 As Integer = v_file.Length
            Dim vc3 As String = Right(v_file, v3 - v1)
            Dim v_cnfile As String = Left(v_file, v2) + "temp_cn\" + vc3
            Return rpt2cn(v_file, v_cnfile)
        Else
            Return v_file
        End If
    End Function

    Public Shared Function rpt2cn(ByVal v_file As String, ByVal v_fileto As String) As String
        Dim oCR As New CRAXDRT.Application
        Dim oRpt As Report = oCR.OpenReport(v_file)
        Dim jj, kk, ll, pp As Integer
        For jj = 1 To oRpt.Areas.Count
            For kk = 1 To oRpt.Areas.Item(jj).Sections.Count
                For ll = 1 To oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Count
                    yy = oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll)
                    If yy.Kind = 2 Then
                        Dim v_objn As Integer = 0
                        Dim MTXT As String = Trim(yy.Text)
                        Dim MRPL As String = MTXT
                        If Len(MRPL) > 0 Then
                            MRPL = StrConv(MTXT, VbStrConv.SimplifiedChinese, 2052)
                        End If
                        If yy.FieldElements.Count > 0 Then
                            v_objn = yy.FieldElements.Count
                            Dim txtobj(v_objn, 3) As Object
                            For pp = 1 To v_objn
                                txtobj(pp, 1) = yy.FieldElements.Item(pp).FieldDefinition
                                txtobj(pp, 3) = yy.FieldElements.Item(pp).Font.bold
                            Next
                            Dim v_star As Integer = 1
                            For pp = 1 To v_objn
                                txtobj(pp, 2) = InStr(v_star, MRPL, "[]")
                                If txtobj(pp, 2) >= v_star Then
                                    v_star = txtobj(pp, 2) + 1
                                End If
                            Next
                            MRPL = Replace(MRPL, "[]", "")
                            oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll).settext(MRPL)
                            For pp = 1 To v_objn
                                yy.FieldElements.Add(txtobj(pp, 2), txtobj(pp, 1))
                            Next
                            oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll).Font.Name = "SimSun"
                            For pp = 1 To v_objn
                                yy.FieldElements.Item(pp).Font.bold = txtobj(pp, 3)
                            Next
                        Else
                            oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll).settext(MRPL)
                            oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll).Font.Name = "SimSun"
                        End If
                    End If
                    If yy.Kind = 1 Then
                        oRpt.Areas.Item(jj).Sections.Item(kk).ReportObjects.Item(ll).Font.Name = "SimSun"
                    End If
                Next
            Next
        Next
        oRpt.Save(v_fileto)
        Return v_fileto
    End Function
End Class
 

註:
   1. web.config 中定義 Location. ()
   2. ASP.NET 必須設定有寫入temp_cn目錄的權限.
   3. 加入參考:CRAXDRT.dll(Crystal Reports ActiveX Designer DLL)

 

本文作者:Rox 来源:http://www.dotblogs.com.tw/rox/archive/2008/04/09/
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读