Как сдвинуть все страницы PDF-документа на один дюйм?

Я хочу сдвинуть все страницы существующего pdf-документа на один дюйм, чтобы они могли быть пробиты тремя отверстиями, не задев содержимое. Pdf-документы уже будут сгенерированы, поэтому изменение способа их создания невозможно.

похоже, iText может сделать это из предыдущий вопрос.

что такое эквивалентная библиотека (или способ сделать это) для C++ или Python?

Если это зависит от платформы, Мне нужен тот, который будет работать на Линукс.

обновление: подумал, что я опубликую небольшой сценарий, который я написал, чтобы сделать это, если кто-то еще найдет эту страницу и нуждается в ней.

рабочий код благодаря предложению Скотта Андерсона:

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

5 ответов


вы можете попробовать pyPdf:

http://pybrary.net/pyPdf/


Я могу подтвердить, что pyPdf действительно хорош и должен быть решением вашей проблемы.


два способа выполнить эту задачу в Linux

  1. используя ghostscript через программой gsview

    • посмотреть в свой /root или /главная скрытый файл .программой gsview.ini

    • перейти к разделу:

    [параметры pdfwrite]

    Options=

    Xoffset=0

    Yoffset=0

измените значения для оси X, установив удобное значение (значения находятся в точках postscript,1 дюйм = 72 поинтам)

так:

[параметры pdfwrite]

Options=

Xoffset=72

Yoffset=0

  • закрыть .программой gsview.ini

  • откройте файл pdf с помощью программой gsview

  • Файл / Конвертировать / pdfwrite

  • выберите странно страницы и печати в новый файл (вы можете назвать это как странно.формат PDF)

теперь повторите те же шаги для даже страницы

  • откройте файл pdf с помощью программой gsview

[параметры pdfwrite]

Options=

Xoffset=-72

Yoffset=0

  • Файл / Конвертировать / pdfwrite
  • выберите даже страницы и печати в новый файл (вы можете назвать это как даже.формат PDF)

теперь вам нужно смешать эти два pdf с нечетными и четными страницами

вы можете использовать:

в формате PDF Трансформер!--8-->

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 утилиты

  • 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-файл имеет pagesize 482x680 введите

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

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

тогда вы можете смешивать нечетные и даже в уникальном файле с уже процитированным

PDF Transformer


не полный ответ, но вы можете использовать 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.

Сначала установите pypdf2 через pip 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)