9

我想将现有 pdf 文档的所有页面向右移动一英寸,这样它们就可以在不打到内容的情况下打三个孔。pdf 文档已经生成,因此无法更改它们的生成方式。

看来 iText 可以从上一个问题中做到这一点。

什么是 C++ 或 Python 的等效库(或这样做的方式)?

如果它依赖于平台,我需要一个可以在 Linux 上运行的。

更新:我想我会发布一个我写的小脚本,以防其他人找到这个页面并需要它。

感谢 Scott Anderson 的建议,工作代码:

右移.py

#!/usr/bin/python2
import sys
import os
from  pyPdf import PdfFileReader, PdfFileWriter

#not sure what default user space units are. 
# just guessed until current document i was looking at worked
uToShift = 50;

if (len(sys.argv) < 3):
  print "Usage rightshift [in_file] [out_file]"
  sys.exit()

if not os.path.exists(sys.argv[1]):
  print "%s does not exist." % sys.argv[1]
  sys.exit()

pdfInput = PdfFileReader(file( sys.argv[1], "rb"))
pdfOutput = PdfFileWriter()

pages=pdfInput.getNumPages()

for i in range(0,pages):
  p = pdfInput.getPage(i)
  for box in (p.mediaBox, p.cropBox, p.bleedBox, p.trimBox, p.artBox):
    box.lowerLeft = (box.getLowerLeft_x() - uToShift, box.getLowerLeft_y())
    box.upperRight = (box.getUpperRight_x() - uToShift, box.getUpperRight_y())
  pdfOutput.addPage( p )

outputStream = file(sys.argv[2], "wb")
pdfOutput.write(outputStream)
outputStream.close()
4

5 回答 5

4

你可以试试pyPdf:

http://pybrary.net/pyPdf/

于 2011-11-01T22:49:18.113 回答
3

在Linux中执行此任务的两种方法

  1. 通过gsview使用ghostscript

    • /root/home中查找隐藏文件.gsview.ini

    • 转到部分:

    [pdf写入选项]

    选项=

    Xoffset=0

    Yoffset=0

更改 X 轴的值,确定一个方便的值(值以 postscript 点为单位,1 英寸= 72 postscript 点

所以:

[pdf写入选项]

选项=

Xoffset=72

Yoffset=0

  • 关闭.gsview.ini

  • 用gsview打开你的 pdf 文件

  • 文件/转换/pdfwrite

  • 选择第一个奇数页并打印到一个新文件(您可以将其命名为odd.pdf

现在对偶数页重复相同的步骤

  • 用gsview打开你的 pdf 文件

[pdf写入选项]

选项=

Xoffset=-72

Yoffset=0

  • 文件/转换/pdfwrite
  • 选择第一个偶数页并打印到一个新文件(您可以将其命名为even.pdf

现在您需要将这两个 pdf 与奇数页和偶数页混合

您可以使用:

Pdf 变压器

java -jar ./pdf-transformer-0.4.0.jar <INPUT_FILE_NAME1> <INPUT_FILE_NAME2> <OUTPUT_FILE_NAME> merge -j


2: : 使用podofobox + pdftk

  • 第一步:使用pdftk将整个 pdf 文档分成两个只有奇数页和偶数页的 pdf 文件

    pdftk file.pdf cat 1-endodd output odd.pdf && pdftk file.pdf cat 1-endeven output even.pdf

  • 现在使用podofobox,包含在podofo utils 中

  • http://podofo.sourceforge.net/about.html

  • podofobox file.pdf odd.pdf crop -3600 0 widht height对于奇数页

  • podofobox file.pdf even.pdf crop 3600 0 widht height偶数

宽度和高度在 postscript 点 x 100 中,可以通过pdfinfo找到

例如,如果您的 pdf 文件的页面大小为 482x680,那么您输入

./podofobox file.pdf odd.pdf crop -3600 0 48200 68000

./podofobox file.pdf even.pdf crop 3600 0 48200 68000

然后您可以将奇数和偶数混合在一个已引用的唯一文件中

Pdf 变压器

于 2011-11-02T00:11:23.900 回答
2

使用pdfjam,将所有页面向右平移 1 英寸的命令是

pdfjam --offset '1in 0in' doc.pdf 

转换后的文档保存到doc-pdfjam.pdf. 如需更多选项,请键入pdfjam --help。当前pdfjam需要类似 Unix 的命令提示符(Linux、Mac 或 Cygwin)。在 Ubuntu 中,它可以安装

sudo apt install pdfjam
于 2018-12-09T22:00:19.040 回答
1

不是完整的答案,但您可以将 LaTeX 与 pdfpages 一起使用: http ://www.ctan.org/tex-archive/macros/latex/contrib/pdfpages/

多个命令行 linux 工具也使用这种方法,例如 pdfjam 使用这种方法: http ://www2.warwick.ac.uk/fac/sci/statistics/staff/academic-research/firth/software/pdfjam

也许 pdfjam 已经可以提供你需要的东西了。

于 2011-11-01T22:49:51.647 回答
0

这是python3.x的修改版本。

首先通过安装pypdf2pip install pypdf2

import sys
import os
from PyPDF2 import PdfFileReader, PdfFileWriter

uToShift = 40; # amount to shift contents by. +ve shifts right

if (len(sys.argv) < 3):
  print ("Usage rightshift [in_file] [out_file]")
  sys.exit()

if not os.path.exists(sys.argv[1]):
  print ("%s does not exist." % sys.argv[1])
  sys.exit()

path=os.path.dirname(os.path.realpath(__file__))
with open(("%s\\%s" % (path, sys.argv[1])), "rb") as pdfin:
    with open(("%s\\%s" % (path, sys.argv[2])), "wb") as pdfout:
        pdfInput = PdfFileReader(pdfin)
        pdfOutput = PdfFileWriter()

        pages=pdfInput.getNumPages()

        for i in range(0,pages):
          p = pdfInput.getPage(i)
          for box in (p.mediaBox, p.cropBox, p.bleedBox, p.trimBox, p.artBox):
            box.lowerLeft = (box.getLowerLeft_x() - uToShift, box.getLowerLeft_y())
            box.upperRight = (box.getUpperRight_x() - uToShift, box.getUpperRight_y())
          pdfOutput.addPage( p )

        pdfOutput.write(pdfout)
于 2017-07-30T16:54:02.670 回答