Foxtable(狐表)用户栏目专家坐堂 → 虚拟打印机打印问题


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

主题:虚拟打印机打印问题

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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
虚拟打印机打印问题  发帖心情 Post By:2017/7/12 16:51:00 [只看该作者]

以下内容是接着"Foxtable内容显示及Excel报表导出的内容显示问题" 话题中“有点甜”老师解答的与打印机设置有关来说的,如何使用虚拟打印机来实现直接打印的问题,由于主题有点不一样,所以就另起这一话题了;

 

我的目标是在以下窗口中添加一个“打印部件工艺”工艺的按钮,点击后可以实现根据左边目录树生成的结果可以直接打印,不用打印预览;

 
图片点击可在新窗口打开查看此主题相关图片如下:无标题0021.png
图片点击可在新窗口打开查看

具体实现步骤的,我的想法是这样的;
1、安装PDF虚拟打印机(DoPDF V7)


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看

2、根据预先设置好的Excel报表模版,导出对应部件的工艺报表;(代码如下)

 

    Dim r As Row  = Tables("MainSchedule").Current

    Dim Book As New XLS.Book(ProjectPath & "Attachments\工艺书(配料中心).xls") '打开模板

    Dim Sheet As XLS.Sheet = Book.Sheets(0)

    Dim filepath = "D:\reports\" & r("SrsNO") & "(办单号)工艺书.xls"

    Book.Build() '生成细节区

    Book.Save(filepath)'保存工作簿           

    '以下代码用于设置自动换行及调整行高(对合并单元格无效)

    Dim App As New MSExcel.Application

    Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)

    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)

    Dim Rg As MSExcel.Range = Ws.Cells

    Rg.WrapText = True

    Rg.EntireRow.AutoFit  '自动调整行高

    App.Visible = True

3、将导出的Excel报表(已设置自动换行及适应行高)用DoPDF V7虚拟打印机打印成PDF文件; 

Ws.PrintOut(Preview:=false,ActivePrinter:=" doPDF v7")

4、再用真实打印机直接打印已经生成的PDF文件;

 

这里我在测试的时候遇到以下两个问题,各位老师还请帮忙指导指导,谢谢;

1、每次用虚拟打印机的时候,都会弹出以下界面,有没有办法不让弹出以下界面,直接打印到对应的路径中 ? 


图片点击可在新窗口打开查看此主题相关图片如下:print.jpg
图片点击可在新窗口打开查看

 

2、如何用虚拟打印机打印出PDF文件时,通过代码设置打印质量为96 Dpi  ?

3、生成的PDF文如何通过Foxtable代码执行打印程序,不用打印预览 ?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/12 22:16:00 [只看该作者]

 打印机是无法控制的。

 

 换一个虚拟打印机呗 https://www.baidu.com/s?ie=UTF-8&wd=%E8%99%9A%E6%8B%9F%E6%89%93%E5%8D%B0%E6%9C%BA

 


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/7/13 10:03:00 [只看该作者]

如下图,用Var变量设置打印范围的表达式怎么写才是正确的 ?


图片点击可在新窗口打开查看此主题相关图片如下:截屏图片.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2017/7/13 10:03:05编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/13 10:19:00 [只看该作者]

条件,不能直接使用变量。

 

http://www.foxtable.com/webhelp/scr/2626.htm

 


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/7/14 14:20:00 [只看该作者]

针对以上问题,我出现打印多份的问题,怎么解决?具体情况如下

 

1、我用以下代码导出Excel报表,然后直接用PDF虚拟打印机,用96 dpi分辨率打印到“D:\reports”文件夹内;

Dim r As Row  = Tables("MainSchedule").Current
Dim rl As String = _userroles
Dim Book As New XLS.Book()
If rl.Contains("配料") Or rl.Contains("系统管理员") Then
    Book = New XLS.Book(ProjectPath & "Attachments\工艺书(配料中心).xls") '打开模板
Else
    Book = New XLS.Book(ProjectPath & "Attachments\工艺书(QA).xls") '打开模板
End If
Dim Sheet As XLS.Sheet = Book.Sheets(0)
If vars("ProcessPartName") <> "" Then
    If rl.Contains("配料") Or rl.Contains("系统管理员") Then
        Sheet(11,18).Value = "< SamplePart = '" & vars("ProcessPartName") & "'>"
    Else
        Sheet(6,18).Value = "< SamplePart = '" & vars("ProcessPartName") & "'>"
    End If
Else
    If rl.Contains("配料") Or rl.Contains("系统管理员") Then
        Sheet(11,18).Value = ""
    Else
        Sheet(6,18).Value = ""
    End If
End If
Dim filepath As String = "D:\reports\" & r("SrsNO") & "(" & vars("ProcessPartName") & ")工艺书.xls"
Book.Build() '生成细节区
Book.Save(filepath)'保存工作簿
'以下代码用于设置自动换行及调整行高(对合并单元格无效)
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(filepath)
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
Dim Rg As MSExcel.Range = Ws.Cells
Rg.WrapText = True
Rg.EntireRow.AutoFit  '自动调整行高
wb.saved = True
App.DisplayAlerts = False
App.Visible = True
If rl.Contains("配料") Or rl.Contains("系统管理员") Then
    Ws.PrintOut(Preview:=False,ActivePrinter:="doPDF v7")    '直接打印;
Else
    ws.PrintPreview()
End If
App.Quit

 
图片点击可在新窗口打开查看此主题相关图片如下:打印机设置界面.jpg
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:pdf虚拟打印机与实际默认打印机.jpg
图片点击可在新窗口打开查看

2、利用“文件监视器”监视“D:\reports”文件夹,并在FileCreated事件中添加以下代码;

Dim Proc As New Process
Proc.File = e.FullPath
Proc.Verb = "Print" '指定动作
Proc.Start()
ShowAppWindow("Adobe Reader",4)
ShowAppWindow(e.Name,5)

 
图片点击可在新窗口打开查看此主题相关图片如下:文件监视器.jpg
图片点击可在新窗口打开查看

结果,当用PDF虚拟打印机保存文件“D:\reports”文件夹后,实际打印机给我直接打印出3份相同的文件,是为什么?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/14 14:38:00 [只看该作者]

FileCreated事件加入代码,看弹出什么。

 

msgbox(e.FullPath)

 

你为什么要这样打印?直接打印不行?


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/7/14 15:09:00 [只看该作者]

主要是为了解决Excel打印不完整的问题;

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=101517&authorid=0&page=0&star=3

 

弹出三个这个。

 


图片点击可在新窗口打开查看此主题相关图片如下:123.jpg
图片点击可在新窗口打开查看

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/14 15:27:00 [只看该作者]

从源头处理吧。动态的调整每一行的行高。

 

Dim App As New MSExcel.Application
try
    Dim Wb As MSExcel.WorkBook = app.WorkBooks.open("C:\Users\dv rrxaI600 007\Downloads\br1706-03176(办单号)工艺书.xls")
    Dim Ws = wb.WorkSheets(1)
    Dim rg As MSExcel.Range = ws.UsedRange
   
    For i As Integer = 1 To rg.Rows.count       
        ws.Rows(i).RowHeight = ws.Rows(I).RowHeight + ws.Rows(I).RowHeight/2
    Next

    app.visible = True
catch ex As exception
    msgbox(ex.message)
    app.quit
End try

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/7/14 15:29:00 [只看该作者]

 回复7楼,也可以修改事件代码

 

static ptime As Date = Nothing
Dim sp As TimeSpan = Date.now - ptime
ptime = Date.now
If sp.TotalMilliseconds < 2000  Then '间隔2000毫秒
    Return
End If

 

Dim Proc As New Process
Proc.File = e.FullPath
Proc.Verb = "Print" '指定动作
Proc.Start()
ShowAppWindow("Adobe Reader",4)
ShowAppWindow(e.Name,5)


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2017/7/14 16:21:00 [只看该作者]

谢谢老师,决定按9楼的来做的,8楼的做法,虽然解决了行高不足的问题,但是对打印纸张却不是最经济的做法;

 回到顶部