对折双面打印资料

软件和网站开发以及相关技术探讨
回复
头像
百草谷居士
帖子: 3921
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

对折双面打印资料

#1

帖子 百草谷居士 » 2011-05-17 23:06

老婆参加医考,从网上购买了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
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
百草谷居士
帖子: 3921
注册时间: 2006-02-10 16:36
系统: Mint21.1/Deepin20.8

Re: 对折双面打印资料

#2

帖子 百草谷居士 » 2011-05-17 23:12

我觉得使用bash也许更好,哪位有空的话,拿bash写个让我学习学习。
debian 12 / 深度系统 20.9 / Mint 21.3

为何热衷于搞发行版的多,搞应用程序开发的少?Linux最多余的就是各种发行版,最缺的就是应用程序,特别是行业应用程序。
头像
Ubuntu与Linux
帖子: 1211
注册时间: 2010-06-09 19:57

Re: 对折双面打印资料

#3

帖子 Ubuntu与Linux » 2011-05-17 23:23

在linux能打印的人,是幸福的
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

Re: 对折双面打印资料

#4

帖子 anticlockwise » 2011-05-17 23:32

我觉得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)
回复