Как вы сдвигаете все страницы документа PDF на один дюйм? - PullRequest
8 голосов
/ 02 ноября 2011

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

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

Что такое эквивалентная библиотека (или способ сделать это) для 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()

Ответы [ 6 ]

4 голосов
/ 02 ноября 2011

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

4 голосов
/ 02 ноября 2011

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

http://pybrary.net/pyPdf/

3 голосов
/ 02 ноября 2011

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

  1. с использованием ghostscript впадина gsview

    • найдите в своем / root или / home скрытый файл .gsview.ini

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

    [pdfwrite Options]

    Опция =

    Xoffset = 0

    YOffset = 0

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

так:

[Параметры PDF]

Опция =

Xoffset = 72

YOffset = 0

  • закрыть .gsview.ini

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

  • file / convert / pdfwrite

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

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

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

[pdfwrite Options]

Опция =

Xoffset = -72

YOffset = 0

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

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

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

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 , включенным в podofo utils

  • 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

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

Pdf Transformer

2 голосов
/ 10 декабря 2018

При pdfjam команда для перевода всех страниц на 1 дюйм вправо равна

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

Преобразованный документ сохраняется в doc-pdfjam.pdf. Для дальнейших опций введите pdfjam --help. В настоящее время pdfjam требует Unix-подобную командную строку (Linux, Mac или Cygwin). В Ubuntu его можно установить с

sudo apt install pdfjam
1 голос
/ 02 ноября 2011

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

0 голосов
/ 30 июля 2017

Вот модифицированная версия для 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)
...