Как сдвинуть все страницы 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 ответов
два способа выполнить эту задачу в Linux
-
используя 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 утилиты
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)