如何将PDF文档的所有页面右移一英寸

How do you shift all pages of a PDF document right by one inch?

本文关键字:右移 PDF 文档      更新时间:2023-10-16

我想把现有pdf文档的所有页面右移一英寸,这样它们就可以在不触及内容的情况下打三孔。pdf文档将已经生成,所以改变它们的生成方式是不可能的。

从上一个问题看来,ittext可以做到这一点。

c++或Python的等效库(或方法)是什么?

如果它是平台依赖的,我需要一个可以在Linux上工作的。

更新:我想我会张贴一个小脚本,我写了这样做,以防有人发现这个页面,需要它。

感谢Scott Anderson的建议:

rightshift.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()

您可以试试pypdf库。2022年PyPDF2合并回pypdf。

Linux

中有两种执行此任务的方法
  1. using ghostscript through gsview

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

    • go to section:

    [pdfwrite选项]

    选项=

    Xoffset = 0

    Yoffset = 0

改变X轴的值,设置一个方便的值(值以附注点表示,1英寸 = 72附注点)

:

[pdfwrite选项]

选项=

Xoffset = 72

Yoffset = 0

  • 关闭.gsview.ini

  • 打开pdf文件gsview

  • 文件/转换/pdfwrite

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

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

    使用gsview打开pdf文件

[pdfwrite选项]

选项=

Xoffset = -72

Yoffset = 0

  • file/convert/pdfwrite
  • 选择第一个even页并打印到一个新文件(你可以命名为even.pdf)

现在你需要混合这两个PDF与奇数和偶数页

可以使用:

Pdf变压器

  • http://sourceforge.net/projects/pdf-transformer/

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,包含在 podofoutils

  • 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 for 偶数页

宽度和高度以附注点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变压器

  • http://sourceforge.net/projects/pdf-transformer/

对于pdfjam,将所有页面向右平移1英寸的命令为

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

转换后的文档保存到doc-pdfjam.pdf。对于其他选项,输入pdfjam --help。目前pdfjam需要一个类似unix的命令提示符(Linux、Mac或Cygwin)。在Ubuntu中,它可以通过

安装
sudo apt install pdfjam

不是一个完整的答案,但是你可以用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已经提供了你需要的东西

这是python3.x的修改版本。

首先通过pip install pypdf2安装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)