使用pdftk为pdf加页码


1. 前言

在正式公文中对页码的设置是有要求的,即使内容是横版的情况下,页码的位置也要位竖版 页面的左下角或者右下角。使用 WPS 或者 Word 编辑文档时是无法直接达到要求,所以一 般需要删除所有页码,而后使用其他合适工具编辑页码。

以前我一般使用 Foxit PDF Editor 来编辑页码也算方便,现如今使用 Kylin OS ,购买的 正版的福昕PDF编辑器居然无法编辑 pdf 文件,着实有点雷人。通过研究,终于找到一种在 linux 系统下可行的方法,即 pdftk。

2. pdftk

使用 pdftk 编辑 pdf 用得最多主要是以下几种场合:

2.1. 合并

pdftk A=even.pdf B=odd.pdf shuffle A B output collated.pdf
#如果偶数页是倒序的
pdftk A=even.pdf B=odd.pdf shuffle A Bend-1 output collated.pdf

2.2. 旋转

#Rotate the first PDF page to 90 degrees clockwise
pdftk in.pdf cat 1east 2-end output out.pdf

#Rotate an entire PDF document to 180 degrees
pdftk in.pdf cat 1-endsouth output out.pdf

2.3. 加背景

# Pdftk 只使用背景 pdf 的第一页,应用于输入 pdf 的每一页上,页面会缩放和
# 旋转以适合输入 pdf 文件。

pdftk in.pdf background back.pdf output out.pdf

# 背景 pdf 的每一页应用于要处理文件的对应页上,如果输入 pdf 比背景 pdf 页数多,
# 背景 pdf 的最后一页会应用于输入 pdf 的剩余页上。

pdftk in.pdf multibackground back.pdf output out.pdf

2.4. 加遮罩

#与 background 相同,只是 stamp 放于前景
pdftk in.pdf stamp back.pdf output out.pdf
pdftk in.pdf multistamp back.pdf output out.pdf

背景和遮罩功能都可用于修改页码,前提是需要准备好作为背景和遮罩的 pdf 文件。

3. 准备页码文件

3.1. 使用 WPS 或者 Word

最简单的方法是使用 WPS 或者 Word 的另存为 pdf 功能制作一个相同页面大小的纵向排版 的只有页码的pdf 文件。优点是自由度高,页码设置效果可见。

3.2. 使用 PostScript 脚本及 ps2pdf

如果加页码的文件多或者页数多的情况,比如你有一个1000页以上的 Word 表格,想要生成 一个对应的竖页空白仅含页码的 pdf 就比较困难了,此时使用 PostScript 脚本的方式就 要方便很多。下面是一个 PostScript 文件模板:

%!PS
/pagewidth_by_mm 210 def
/pageheight_by_mm 297 def
/left_margin_by_mm 28 def
/right_margin_by_mm  pagewidth_by_mm 26 sub def
/bottom_start_by_mm 24 def
/fontsize 14 def
/maxpagenum 20 def 

/mm2inch {
    72 mul 25.4 div
} def

/height_start {
    bottom_start_by_mm mm2inch
} def 

/pagewidth {
    pagewidth_by_mm mm2inch
} def

/pageheight {
    pageheight_by_mm mm2inch
} def

/left_start {
    left_margin_by_mm mm2inch
} def

/right_margin {
    right_margin_by_mm mm2inch
} def

<< /PageSize [pagewidth pageheight] >> setpagedevice
(simsun.ttc) fontsize selectfont
%/Helvetica 12 selectfont

/glyphlist [ /zero /one /two /three /four /five /six /seven /eight /nine ] def

/tmpstr {
    6 string
} def

/len {
    10 tmpstr cvrs length 1 sub
} def 

/glypharray {
    6 array
} def 

/num2glyph {
    dup
    len -1 0 {
        pop
        dup
    } for len -1 0 {10 exch exp 2 -1 roll exch div floor cvi 10 mod glyphlist exch get glyphshow } for
} def 

/pstrlen {
    0 -50 moveto
    currentpoint
    pop
    exch
    /hyphenmonospace glyphshow
    num2glyph
    /hyphenmonospace glyphshow
    currentpoint
    pop
    exch
    sub
} def 

/mkpage {
    dup 
    dup
    2 mod 1 eq {
        pstrlen right_margin exch sub height_start moveto
    } {
        left_start height_start moveto
    } ifelse
    /hyphenmonospace glyphshow
    num2glyph
    /hyphenmonospace glyphshow
    showpage
} def

1 1 maxpagenum {
    mkpage 
} for 

使用方法是新建一个后缀为 ".ps" 的空文本文件,将代码复制后粘贴其中,而后根据需要 修改参数和字体,最后运行以下命令将其转换成 pdf 文件。

gs -P -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf input.ps 

关于 PostScript 学习体会见下一篇文章。


本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议 进行许可。

posted on 2024-05-26 22:38  YourTech-WuPeng  阅读(33)  评论(0编辑  收藏  举报

导航