Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将PDF文档的所有页面向右移动一英寸?_C++_Python_Linux_Pdf_Pypdf - Fatal编程技术网

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

C++ 如何将PDF文档的所有页面向右移动一英寸?,c++,python,linux,pdf,pypdf,C++,Python,Linux,Pdf,Pypdf,我想将现有pdf文档的所有页面向右移动一英寸,这样就可以在不影响内容的情况下打三个孔。pdf文档将已生成,因此无法更改生成方式 看起来iText可以从一个服务器上执行此操作 < C++或Python的等价库(或方法)是什么?< /P> 如果它依赖于平台,我需要一个可以在Linux上工作的 更新:我想我会发布一个我写的小脚本,以防其他人找到这个页面并需要它 工作代码感谢Scott Anderson的建议: rightshift.py #!/usr/bin/python2 import sys im

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

看起来iText可以从一个服务器上执行此操作

< C++或Python的等价库(或方法)是什么?< /P> 如果它依赖于平台,我需要一个可以在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()
#/usr/bin/python2
导入系统
导入操作系统
从pyPdf导入PdfileReader、PdfileWriter
#不确定默认用户空间单位是什么。
#只是猜测,直到我看到的当前文档起作用
uToShift=50;
如果(len(sys.argv)<3):
打印“Usage rightshift[in_file][out_file]”
sys.exit()
如果操作系统路径不存在(sys.argv[1]):
打印“%s”不存在。“%sys.argv[1]
sys.exit()
pdfInput=PdfFileReader(文件(sys.argv[1],“rb”))
pdfOutput=PdfFileWriter()
pages=pdfInput.getNumPages()
对于范围内的i(0,页):
p=pdfInput.getPage(i)
对于输入框(p.mediaBox、p.cropBox、p.bleedBox、p.trimBox、p.artBox):
box.lowerLeft=(box.getLowerLeft_x()-uToShift,box.getLowerLeft_y())
box.upperRight=(box.getUpperRight\u x()-uToShift,box.getUpperRight\u y())
pdfOutput.addPage(第页)
outputStream=文件(sys.argv[2],“wb”)
pdfOutput.write(outputStream)
outputStream.close()
您可以尝试pyPdf:


不是完整答案,但您可以将LaTeX与pdfpages一起使用:

多个命令行linux工具也使用此方法,例如pdfjam使用以下方法:


也许pdfjam已经可以提供您所需要的了。

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

  • 使用GshotView中的重影脚本

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

    • 转到第节:

    [pdfwrite选项]

    选择权=

    Xoffset=0

    Yoffset=0

  • 更改X轴的值,设置一个方便的值(值以postscript点为单位,1英寸=72个postscript点)

    因此:

    [pdfwrite选项]

    选择权=

    Xoffset=72

    Yoffset=0

    • close.gsview.ini

    • 使用gsview打开您的pdf文件

    • 文件/convert/pdfwrite

    • 选择第一个奇数页并打印到新文件(您可以将其命名为odd.pdf)
    现在对偶数页重复相同的步骤

    • 使用gsview打开您的pdf文件
    [pdfwrite选项]

    选择权=

    Xoffset=-72

    Yoffset=0

    • 文件/convert/pdfwrite
    • 选择前偶数页并打印到新文件(您可以将其命名为偶数.pdf)
    现在,您需要将这两个pdf与奇数页和偶数页混合使用

    您可以使用:

    Pdf转换器

    java-jar./pdf-transformer-0.4.0.jar merge-j


    2::使用podofobox+pdftk

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

      pdftk file.pdf cat 1-endodd output odd.pdf和&pdftk file.pdf cat 1-endeven output偶数.pdf

    • 现在有了podofobox,包括在podofo utils中

    • podofobox file.pdf odd.pdf裁剪-3600宽高
      用于奇数页和

    • podofobox file.pdf偶数.pdf裁剪3600宽高
      偶数页

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

    e、 g.如果您的pdf文件的页面大小为482x680,则输入

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

    /podofobox file.pdf偶数.pdf裁剪3600 48200 68000

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

    Pdf转换器


      • 这里是python3.x的一个修改版本

        首先通过
        pip安装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)
        
        导入系统 导入操作系统 从PyPDF2导入PdfileReader、PdfileWriter uToShift=40;#移动内容的数量+右移 如果(len(sys.argv)<3): 打印(“用法右移[输入文件][输出文件]”) sys.exit() 如果操作系统路径不存在(sys.argv[1]): 打印(“%s”不存在。“%sys.argv[1]) sys.exit() path=os.path.dirname(os.path.realpath(_文件__)) 以open(“%s\\%s”%(路径,sys.argv[1]),“rb”)作为pdfin: 以open(“%s\\%s”%(路径,sys.argv[2]),“wb”)作为pdfout: pdfInput=PdfFileReader(pdfin) pdfOutput=PdfFileWriter() pages=pdfInput.getNumPages() 对于范围内的i(0,页): p=pdfInput.getPage(i) 对于输入框(p.mediaBox、p.cropBox、p.bleedBox、p.trimBox、p.artBox): box.lowerLeft=(box.getLowerLeft_x()-uToShift,box.getLowerLeft_y()) box.upperRight=(box.getUpperRight\u x()-uToShift,box.getUpperRight\u y()) pdfOutput.addPage(第页) pdfOutput.write(pdfout)
        使用
        pdfjam
        ,将所有页面向右平移1英寸的命令为

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

        sudo apt install pdfjam
        

        您的显示器有多重?您将打印机上的纸张导轨向左移动了一英寸。看起来有很多相关性和很大的学习曲线。对pdfjam的外部调用看起来是一个不错的选择。谢谢你的快速回答。如果你不知道它是;)然而,LaTeX是工具箱imho中的一个好工具。它非常适合从文本源快速创建PDF。那家属呢