Foxtable(狐表)用户栏目专家坐堂 → bs页面在使用word模板进行套打时,如何将套打后的文件直接在客户端进行生成与保存呢?


  共有6469人关注过本帖树形打印复制链接

主题:bs页面在使用word模板进行套打时,如何将套打后的文件直接在客户端进行生成与保存呢?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
bs页面在使用word模板进行套打时,如何将套打后的文件直接在客户端进行生成与保存呢?  发帖心情 Post By:2022/9/1 11:25:00 [只看该作者]

bs页面在使用word模板进行套打时,如何将套打后的文件直接在客户端进行生成与保存呢?

红色部分代码有没有办法直接操作保存在bs页面打开的客户端中的指定目录下呢?

 

当前代码如下:


Dim tm As String = ProjectPath & "Attachments\" & e.Values("文书名") & ".doc" '指定模板文件

If FileSys.FileExists(tm) Then
        Dim time As String = Format(Date.now, "yyyyMMddHHmmssfffff")
        Dim f1 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc" '指定目标文件
        Dim f2 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf" '指定目标PDF文件

        Dim wrt As New WordReport(tm, f1)
        wrt.AddDataTable(e.Values("文书名"), "主数据源", "Sel ect * from {" & e.Values("文书名") & "} where guid = '" & e.Values("guid") & "' ")
        cmd.CommandText = "sel ect * from SYS_Dictionary where 字典值='是' and 分类='PDF预览'"
        Dim dt As DataTable = cmd.ExecuteReader()
        If dt.DataRows.Count > 0 Then
            wrt.Build()
            wrt.SaveToPDF(f2) '保存为PDF文件
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf")
        Else
            wrt.Build()
            'wrt.Show()
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc")
        End If
    Else
    e.WriteString(e.Values("文书名") & "存根联[文件不存在或已经被删除!]")
End If


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/1 11:32:00 [只看该作者]

这是不可能的。只能在服务器保存,然后在页面里提供下载的链接,点击后下载文件

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)这是不可能的。只能在服务器保存,然...  发帖心情 Post By:2022/9/1 11:43:00 [只看该作者]

那有点麻烦了   上述word模板套打  按照老师之前指导的加入毫秒  以及加入try 都没有能够正确避免弹出文件存在  然后需要另存为的提示!

一旦弹出另存为提示  然后页面就卡起了,因为后端必须要取消另存为保存才能让客户端继续使用,不然就一直卡起

 

因word模板太多,也不便于一个个的全部按照专业报表去设计!

 

 前端代码:

({
    button6: {
        text: '{{text}}',
        //系统自动匹配标题
        visible: true,
        click: function() { //按钮单击事件
            $.post("form385_getdata2.Ajax", {},
            function(res) {
                res = JSON.parse(res); //把后端传来的字符串转json对象
                if (res.空号文书值 == '是') {
                        $.post("form385_word.Ajax", {
                            guid: e.form.guid,
                            创建人: e.form.user.name,
                            文书名:"谈话通知书",
                        },
                        function(res) {
                            var a = document.createElement("a");
                            a.setAttribute("href", myurl + res);
                            a.setAttribute("target", "打印文书");
                            document.body.appendChild(a);
                            a.click();
                            a.remove();
                        })

                } else {
                    if (e.form.文号.value == '') {
                        e.form.alert("当前禁止打印没有生成文号的文书,请联系管理员审核!", "温馨提示");
                    } else {
                        $.post("form385_word.Ajax", {
                            guid: e.form.guid,
                            创建人: e.form.user.name,
                            文书名:"谈话通知书",
                        },
                        function(res) {
                            var a = document.createElement("a");
                            a.setAttribute("href", myurl + res);
                            a.setAttribute("target", "打印文书");
                            document.body.appendChild(a);
                            a.click();
                            a.remove();
                        })
                    }
                }
            })
        }
    }
})

 

 

后端代码:

Public Sub form385_word_Ajax(rq as Request) 'form202_excel_Ajax与前端函数对应,注意_Ajax和 .Ajax区别
 Dim e As RequestEventArgs = rq.e
Dim cmd As SQLCommand = rq.cmd
Dim tm As String = ProjectPath & "Attachments\" & e.Values("文书名") & ".doc" '指定模板文件

If FileSys.FileExists(tm) Then
 
    Try
        Dim time As String = Format(Date.now, "yyyyMMddHHmmssfffff")
        Dim f1 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc" '指定目标文件
        Dim f2 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf" '指定目标PDF文件
        Dim wrt As New WordReport(tm, f1)
        wrt.AddDataTable(e.Values("文书名"), "主数据源", "Se lect * from {" & e.Values("文书名") & "} where guid = '" & e.Values("guid") & "' ")
        cmd.CommandText = "sel ect * from SYS_Dictionary where 字典值='是' and 分类='PDF预览'"
        Dim dt As DataTable = cmd.ExecuteReader()
        If dt.DataRows.Count > 0 Then
            wrt.Build()
            wrt.SaveToPDF(f2) '保存为PDF文件
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf")
        Else
            wrt.Build()
            'wrt.Show()
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc")
        End If
    Catch ex As Exception
        Dim time As String = Format(Date.now, "yyyyMMddHHmmssfffff")
        Dim f1 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc" '指定目标文件
        Dim f2 As String = ProjectPath & "mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf" '指定目标PDF文件
        Dim wrt As New WordReport(tm, f1)
       
        wrt.AddDataTable(e.Values("文书名"), "主数据源", "Se lect * from {" & e.Values("文书名") & "} where guid = '" & e.Values("guid") & "' ")
        cmd.CommandText = "sele ct * from SYS_Dictionary where 字典值='是' and 分类='PDF预览'"
        Dim dt As DataTable = cmd.ExecuteReader()
        If dt.DataRows.Count > 0 Then
            wrt.Build()
            wrt.SaveToPDF(f2) '保存为PDF文件
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.pdf")
        Else
            wrt.Build()
            'wrt.Show()
            wrt.Quit() '退出
            e.WriteString("\mybaobiao\" & e.Values("文书名") & e.Values("创建人") & e.Values("guid") & time & "存根联.doc")
        End If
    End Try
Else
    e.WriteString(e.Values("文书名") & "存根联[文件不存在或已经被删除!]")
 
End If

End Sub

[此贴子已经被作者于2022/9/1 11:46:36编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/1 11:56:00 [只看该作者]

这个可能是word组件自己的问题了。高级开发指南一直不做BS的word报表示例,可能有这个原因在里面。


 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)这个可能是word组件自己的问题了。高...  发帖心情 Post By:2022/9/1 12:35:00 [只看该作者]

那有没有可替代的方法呢?

除了专业报表  excel以外,因为word模板较多,不便于一个个的制作!

 

有没有那种直接不需要安装word软件的操作方法呢?直接用word dll!

[此贴子已经被作者于2022/9/1 12:38:17编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/9/1 13:36:00 [只看该作者]

如果一定要使用word,又不安装word软件,只能考虑第三方的组件,比如Spire.Doc for .NET。但是就用不到Foxtable的模板功能了,需要自己开发一套word报表的功能,工作量不比改造为专业报表少

 回到顶部