当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 对折双面打印资料
帖子发表于 : 2011-05-17 23:06 
头像

注册: 2006-02-10 16:36
帖子: 2805
系统: Xubuntu14.04/Deepin
送出感谢: 15
接收感谢: 28
老婆参加医考,从网上购买了PDF的电子参考书,不过在计算机上看书究竟是件不方便的事情,于是要求我把书打印出来。一共有684页,要是单张打印也太费纸了,并且不好装订携带。于是想弄成在一页纸上打印双页内容,并且正反两面都打印出来。由于资料很厚,无法从中缝装订,于是 要求每张纸对折,比如两张纸对折后成 1,2,3,4,5,6,7,8这样的正常顺序。而两张纸其中一面是 1,4;5,8另一面是2,3;6,7。

开始使用windows下的福昕pdf阅读器进行打印,虽然福昕阅读器提供了在一页纸上进行双页,4页打印功能,并且也提供了偶数页、奇数页分别打印的功能但是没有这种对折顺序的打印模式。

后来安装了fineprint虚拟打印机,fineprint倒是提供了对折双面打印模式,叫做booklet模式。不过这种模式是从中缝将所有纸页装订到一起的,适合做小册子。

于是我转到了ubuntu平台,ubunbtu平台的打印功能本身就提供了在一页纸上进行双页,4页打印功能,并且也提供了偶数页、奇数页分别打印的功能。和福昕阅读器一样,没有提供对折打印模式。

怎么办呢?老婆的事情就是大事情,我操起了pdftk,首先将这本书分解成了一个一个的单页pdf文件,一个有684个文件。文件名如pg_0001.pdf,pg_0002.pdf,pg_0003.pdf……

然后,怎么把这些页面重新组合起来呢?刚好这两天在翻看python,就拿python写个脚本吧!脚本如下:
代码:
# -*- coding:utf-8 -*-
# 已经将一个PDF文件分割成一个一个单页文件,现在想让按照双面对折的方式打印
# 也就是一面按照 1,4,5,8,9  ,12
# 另一面按照       2,3,6,7,10,11 的顺序排列
#脚本生成了两个PDF文件,分别对应了正反两个页面。因为一般激光/喷墨打印机出纸后
#是打印面向下倒序叠着出纸的,所以脚本将第二个PDF成倒序排列。

import os

#cmdstr='pdftk pg_0001.pdf pg_0004.pdf cat output out1.pdf'
#正序生成第一面打印资料
fn=''
for i in range (1, 684,4):
    fn1='pg_'+str(i).rjust(4,'0')+'.pdf'
    fn2='pg_'+str(i+3).rjust(4,'0')+'.pdf'
    fn=fn+' '+fn1+' '+fn2
cmdstr='pdftk '+fn+' cat output out1.pdf'
print cmdstr
os.system(cmdstr)

#逆序生成另一面的打印资料
fn=''
for i in range (682,-2,-4):  #这个地方如果设成range(682,2,-4)则无法执行到i=2
    fn1='pg_'+str(i).rjust(4,'0')+'.pdf'
    fn2='pg_'+str(i+1).rjust(4,'0')+'.pdf'
    fn=fn+' '+fn2+' '+fn1 #这里将fn2置于fn1之前
cmdstr='pdftk '+fn+' cat output out2.pdf'
print cmdstr
os.system(cmdstr)

就待明天老婆实际打印看看效果如何了 :em11


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 对折双面打印资料
帖子发表于 : 2011-05-17 23:12 
头像

注册: 2006-02-10 16:36
帖子: 2805
系统: Xubuntu14.04/Deepin
送出感谢: 15
接收感谢: 28
我觉得使用bash也许更好,哪位有空的话,拿bash写个让我学习学习。


_________________
友帮拓,真难听。有没有接触官方的老大?给改了吧!
一直想找一个在linux下的Visual FoxPro/access桌面数据库。MUIBase还算是最相近的。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 对折双面打印资料
帖子发表于 : 2011-05-17 23:23 
头像

注册: 2010-06-09 19:57
帖子: 1211
送出感谢: 2
接收感谢: 9
在linux能打印的人,是幸福的


_________________
听歌


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 对折双面打印资料
帖子发表于 : 2011-05-17 23:32 
头像

注册: 2007-03-01 20:46
帖子: 2393
地址: 湖南长沙
送出感谢: 0 次
接收感谢: 0 次
我觉得Python还是这样写比较好,效率也更高~~只修改了正序的,逆序的也一样~~嘿嘿~~

代码:
# -*- coding:utf-8 -*-

import os

#cmdstr='pdftk pg_0001.pdf pg_0004.pdf cat output out1.pdf'
#正序生成第一面打印资料
tmpl = "pg_%s.pdf"
fn=" ".join(["%s %s" % (tmpl % str(i).rjust(4, '0'), tmpl % str(i+3).rjust(4, '0'))\
    for i in range(1, 684, 4)])
cmdstr='pdftk %s cat output out1.pdf' % fn
print cmdstr
os.system(cmdstr)


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译