c++ 如何将PDF文档的所有页面向右移动一英寸?

iyfjxgzm  于 2023-02-14  发布在  其他
关注(0)|答案(5)|浏览(163)

我想将现有pdf文档的所有页面向右移动一英寸,这样它们就可以在不影响内容的情况下打三个孔。pdf文档已经生成,因此无法更改生成方式。
似乎iText可以从previous question完成此操作。
C++或Python的等价库(或实现方法)是什么?
如果它是平台相关的,我需要一个将在Linux上工作。

**更新:**我想我会发布一个小脚本,我写了这样做的情况下,其他人发现这个页面,并需要它。

工作代码感谢斯科特安德森的建议:
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()
igetnqfo

igetnqfo1#

你可以试试pypdf库。在2022年,PyPDF2被合并回了pypdf。

bgibtngc

bgibtngc2#

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

  • 使用ghostscript通过gsview
  • 在**/root/home中查找隐藏文件. gsview.ini**
  • 转至章节:
  • [pdf写入选项]*

选项=
X偏移= 0
Y偏移= 0
更改X轴的值,设置一个方便的值(值以附言点为单位,1英寸=72附言点
因此:

  • [pdf写入选项]*

选项=
X偏移= 72
Y偏移= 0

  • 关闭**. gsview. ini**
  • gsview打开pdf文件
      • 文件/转换/pdfwrite**
  • 选择前odd页并打印到一个新文件(你可以命名为odd. pdf

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

  • gsview打开pdf文件
  • [pdf写入选项]*

选项=
X偏移= -72
Y偏移= 0

      • 文件/转换/pdfwrite**
  • 选择前偶数页并打印到一个新文件(你可以命名为偶数. pdf

现在你需要到mix这两个pdf与奇数和偶数页
您可以使用:

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

    • 2::使用鼠标框**+pdftk
  • 第一步:使用pdftk将整个pdf文档分成两个pdf文件,只有奇数偶数

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

  • 现在带有podofobox,包含在podofo实用程序
  • 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用于偶数页
  • 宽度和高度以附言点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
然后你可以把奇数和偶数混合在一个唯一的文件中

xienkqul

xienkqul3#

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

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

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

sudo apt install pdfjam
jqjz2hbq

jqjz2hbq4#

这不是一个完整的答案,但您可以将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已经可以提供你所需要的了。

7uhlpewt

7uhlpewt5#

下面是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)

相关问题