PDF 批量打印

vpgc 2010-03-17 10:46:01
批量打印文件夹内的PDF文件,PDF文件可能是不同幅面的。如:A0-A4。
关键问题是怎么控制打印的幅面。
或者C#下有什么控件可以实现这样的功能?请大家赐教。
...全文
1644 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerome2003 2010-12-07
  • 打赏
  • 举报
回复
将CAD图纸批量转换成PDF的功能,上海汉纳的批量打印功能就是解决这个问题的。他们的网页链接是http://www.uhanna.com/SC_GB/AutoCADBatchPlot_SC.html
vpgc 2010-03-24
  • 打赏
  • 举报
回复
多谢各位兄弟,先结贴。改天专门向 logxing请教。
logxing 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 vpgc 的回复:]
logxing 的需求和我的也差不多。一起问吧。呵呵
[/Quote]
我简单说下解决过程。
1,打印部分
方法1:可以调用adobe reader命令行打印,但会出现adobe reader窗口
方法2:使用pdfbox,里面有打印API
2,变更打印机的缺省papersize
这个必须使用win32api,用。net的printdocument之类的是解决不了的
3,拆分pdf
pdf里含有多页且大小不一致时,必须拆分,因为一个打印命令发出后,就不可能在结束前变更papersize了。因此要把pdf文件拆分成单页的存在临时目录里。
拆分可以使用itextsharp
4,获取打印机的papersize代码,即rawkind代码。不同的打印机编号是不一样的,所以这个步骤不可缺少。

流程
1,获取各大小rawkind号,比如A4=9
2,读入pdf,拆分。(可以用itextsharp)
3,读入拆分后的单页,获取大小(可以用itextsharp),如A4
4,变更打印机的缺省papersize的rawkind为9(win32api)
5,执行打印
6,检查打印队列是否为空(可以用WMI),只有空才可以继续循环,因为下一页papersize可能变了,修改papersize会影响队列里的所有任务。而且队列太多时有时打印任务会丢失。
vpgc 2010-03-17
  • 打赏
  • 举报
回复
logxing 的需求和我的也差不多。一起问吧。呵呵
logxing 2010-03-17
  • 打赏
  • 举报
回复
给客户解决了,但他们似乎根本没意识到这个不容易,郁闷,看在订单价格的面子上算了。
logxing 2010-03-17
  • 打赏
  • 举报
回复
嘿嘿,这个就是关键点了。
[Quote=引用 5 楼 lzsh0622 的回复:]
引用 2 楼 vpgc 的回复:
统一尺寸打印是没有问题的。
目的是 按照幅面实现批量打印。


道理很明白:

1 个PDF文件中,P1-30 是A4
P31 是A3,
P32-49是A4,
P50 是A0。

如果批量打印,打印机怎么送纸?
[/Quote]
lzsh0622 2010-03-17
  • 打赏
  • 举报
回复
一般是集中打印同幅面的, 单独打印少量大幅面的 ,手工整理一下资料。
lzsh0622 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 vpgc 的回复:]
统一尺寸打印是没有问题的。
目的是 按照幅面实现批量打印。
[/Quote]

道理很明白:

1 个PDF文件中,P1-30 是A4
P31 是A3,
P32-49是A4,
P50 是A0。

如果批量打印,打印机怎么送纸?
vpgc 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 logxing 的回复:]
楼主的要求和我最近做的相同,不会是我的客户的多手准备吧。。。
[/Quote]
呵呵,那你实现了告诉我一下。谢谢
logxing 2010-03-17
  • 打赏
  • 举报
回复
楼主的要求和我最近做的相同,不会是我的客户的多手准备吧。。。
vpgc 2010-03-17
  • 打赏
  • 举报
回复
统一尺寸打印是没有问题的。
目的是 按照幅面实现批量打印。
lzsh0622 2010-03-17
  • 打赏
  • 举报
回复
观注。

如果是程序动态生成的,可以合并到一个文件,这样能控制打印范围、显示打印进度。

如果方式需要调整最好打印先调整好方向,

如果幅面不同,可以设置按统一格式自动缩放,如统一按A4打印。

按原样打印A0-A4幅面,只能手工,送纸器做不到 A4、A3、A0自动换纸。

铛铛 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 vpgc 的回复:]
引用 16 楼 logxing 的回复:
引用 13 楼 vpgc 的回复:
用的adobe pdf reader来实现的打印。(axAcroPDF.Print)
这个控件的打印方法都没有对打印幅面的控制。另外就是如你说的会显示 adobe pdf 窗口。

不是用axAcroPDF,客户端不一定都装了acrobat,而且你用这个可能会引起版权问题。
我是说用adobe pdf rea……
[/Quote]
命令行??是cmd的命令行吗??透露一下,谢谢!!
vpgc 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 logxing 的回复:]
引用 13 楼 vpgc 的回复:
用的adobe pdf reader来实现的打印。(axAcroPDF.Print)
这个控件的打印方法都没有对打印幅面的控制。另外就是如你说的会显示 adobe pdf 窗口。

不是用axAcroPDF,客户端不一定都装了acrobat,而且你用这个可能会引起版权问题。
我是说用adobe pdf reader的命令行。

能控制打印幅面的控件……
[/Quote]

多谢 提醒。
铛铛 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 logxing 的回复:]
引用 9 楼 vpgc 的回复:
logxing 的需求和我的也差不多。一起问吧。呵呵

我简单说下解决过程。
1,打印部分
方法1:可以调用adobe reader命令行打印,但会出现adobe reader窗口
方法2:使用pdfbox,里面有打印API
2,变更打印机的缺省papersize
这个必须使用win32api,用。net的printdocument之类的是解决不了……
[/Quote]

pdfbox??具体解释一下,Adobe 没有这个组件阿
logxing 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vpgc 的回复:]
用的adobe pdf reader来实现的打印。(axAcroPDF.Print)
这个控件的打印方法都没有对打印幅面的控制。另外就是如你说的会显示 adobe pdf 窗口。
[/Quote]
不是用axAcroPDF,客户端不一定都装了acrobat,而且你用这个可能会引起版权问题。
我是说用adobe pdf reader的命令行。

能控制打印幅面的控件或类库就不用想了,要是真有我也不必用那么麻烦的实现了。
vpgc 2010-03-17
  • 打赏
  • 举报
回复
邮件已经发送。
也希望有其他高人相助。
铛铛 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 vpgc 的回复:]
用的adobe pdf reader来实现的打印。(axAcroPDF.Print)
这个控件的打印方法都没有对打印幅面的控制。另外就是如你说的会显示 adobe pdf 窗口。


另外就是找了个 PDFRender4NET 的控件,现在还没有研究明白怎么使用。
需要的话我发给你。
[/Quote]
发过来我瞧瞧,邮箱:zhaoxp@sipeng.cn
有什么进展就通知我,谢谢了
vpgc 2010-03-17
  • 打赏
  • 举报
回复
用的adobe pdf reader来实现的打印。(axAcroPDF.Print)
这个控件的打印方法都没有对打印幅面的控制。另外就是如你说的会显示 adobe pdf 窗口。


另外就是找了个 PDFRender4NET 的控件,现在还没有研究明白怎么使用。
需要的话我发给你。
铛铛 2010-03-17
  • 打赏
  • 举报
回复
我也在做这个,楼主你是用什么方法打印PDF文件的,方便告诉我一下吗?谢谢
加载更多回复(1)

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧