Как я могу объединить две страницы PDF на одной странице?

Я ищу бесплатный инструмент, который позволяет переупорядочивать страницы документа PDF и объединять несколько страниц на листе. Первая часть (перестановка) легко решается многими инструментами (я использую PyPDF).

Проблема со вторым требованием: объединить две (или более) страницы в одну страницу. Например, возьмите две страницы (A и B), поверните их, масштабируйте и объедините в одну страницу, как показано ниже.

------       ------            ------
|     |      |      |          |     |
|  A  |      |  B   |          | a   |
|     |      |      |          |     |
|     |      |      |  --->    ------
|     |      |      |          |     |        
|     |      |      |          | b   |        
|     |      |      |          |     |        
------       ------            ------

Решение должно работать в Linux и, желательно, в Windows. Я ищу либо консольное приложение, либо библиотеку с привязками Python или Perl.

Изменить есть библиотека pdfnup, которая должна выполнять именно такое преобразование и является кросс-платформенным, однако я не могу его использовать из-за ошибки, похожей на это.


person Boris Gorelik    schedule 11.02.2009    source источник


Ответы (11)


Посмотрите этот ответ, в котором используется Многовалентный для наложения страниц PDF

person danio    schedule 13.02.2009

Это краткое изложение инструментов, которые я нашел для PDF (я хотел найти эквивалент psup и psbook)

  • Создание буклетов: pdfbook, pdf-tools (команда: pdfbklt)
  • Объединить файлы PDF: pdfmerge, pdfjam (команда: pdfjoin)
  • Повернуть страницы: pdfjam (команда: pdf90)
  • Несколько страниц на листе: pdfjam (команда: pdfnup)
  • Создание плакатов (несколько листов на странице): pdfposter

Из моего менеджера пакетов:

Создайте буклет формата A6:

pdfbook -2 -p a5 infile.pdf outfile.pdf

pdf-tools содержит:

  • pdfbklt: создание буклетов
  • pdfrevert: Удаляет один слой изменений в файле PDF, пытаясь максимально увеличить размер выходного файла (для учета линеаризованного PDF).
  • pdfstamp: Добавляет указанную строку в файл .pdf в файле с заданным расположением, шрифтом и размером.

Существует также многовалентный: http://multivalent.sourceforge.net/Tools/index.html

person Mildred    schedule 22.07.2010
comment
Новый дом для pdfmerge (кажется): github.com/dmaphy/pdfmerge - person Mildred; 02.07.2012
comment
После тестирования нескольких инструментов pdfjam был для меня определенно самым простым, быстрым и эффективным: pdfjam *.pdf --nup 2x1 --landscape --outfile output.pdf (от: superuser.com/a/750293/ 255048 ) - person Lucas Cimon; 04.12.2014

В Linux вы можете конвертировать PDF-файлы в Postscript и использовать psnup. Точный способ его вызова зависит от того, как именно вы хотите, чтобы страницы были собраны вместе, хотите ли вы, чтобы они были повернуты, какой размер (ы) бумаги вы хотите использовать и т. д., но это будет примерно так:

pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf

В зависимости от того, какие инструменты у вас есть, у вас может быть более эффективный способ сделать это — psnup, конечно, не единственный способ, но это относительно известная программа (во всяком случае, в Linux).

person David Z    schedule 11.02.2009
comment
Это должно быть pdf2ps infile.pdf infile.ps? - person Ian Mackinnon; 15.03.2011
comment
@Ian: Я верю, что ты прав, спасибо, что поймал это;) Я это исправлю. - person David Z; 15.03.2011

Если вы используете Linux, вы можете использовать BookletImposer для размещения нескольких страниц PDF на одной странице.

Для пользователей Ubuntu этот инструмент доступен в Ubuntu Software Center.

person Mohammad Javad Naderi    schedule 18.03.2013

В ответ на ваш вопрос вам понадобится инструмент «Наложение» PDF, который представляет собой причудливый способ сказать инструмент, который упорядочивает изображения страниц PDF в определенный массив для создания НОВОЙ отдельной страницы PDF. Представьте, что это что-то вроде набора газеты. Вы определяете массив слотов с определенным количеством столбцов в ширину и с определенным количеством строк в глубину на странице определенных фиксированных размеров (в см). Затем вы заполняете эти пустые слоты сверху вниз, слева направо страницами из исходного файла PDF. В случае OP они хотят создать одну страницу, состоящую из двух страниц 8,5x11, расположенных в массиве 1x2 (1 столбец, 2 строки). Их страницы будут добавлены в массив в следующем порядке: 1,2. Таким образом, вы помещаете первую страницу (страница 1 PDF-файла) в первый слот вашего массива (столбец 1, строка 1), а вторую страницу (страницу 2) — во второй слот (столбец 1, строка 2). ).

Как использовать инструмент, чтобы это произошло: Загрузите старую версию Multivalent. Обратите внимание, что автор удалил хорошие классы инструментов из последнего издания без объяснения причин, поэтому вам придется использовать более старый. Вот рабочая ссылка от 12 февраля: http://code.google.com/p/pdfsizeopt/downloads/detail?name=Multivalent20060102.jar Для простоты я переименовал файл jar в m.jar. Само собой разумеется, что вам нужно установить JRE, чтобы это работало, но я выложу его там. Добавьте m.jar в переменные среды Java Class Path (для сценариев) или запустите синтаксис командной строки с параметром -cp и относительным путем (показано ниже). Обратите внимание, я запустил его ИЗ командной строки в каталоге установки в моем примере ниже. В противном случае укажите абсолютный путь от корня (например, c:\1\bin\m.jar).

Вот пример, который выполнит именно то, о чем сообщил OP: C:\1\bin>java -cp m.jar tool.pdf.Impose -dim 1x2 -verbose -papersize "21,59x55,88 см" -layout "1,2 " имя_файла.pdf

Обратите внимание, что параметр -dim создает массив столбцов x строк. Здесь размер бумаги указывается в сантиметрах, но если вам нужны дюймы, просто умножьте дюймы на 2,54, чтобы получить сантиметры. Параметр -layout дает вам порядок, в котором вы хотите заполнить пустые слоты в вашем массиве, заполняя сверху вниз и слева направо. В этом случае нам нужна первая страница PDF-файла вверху и вторая страница внизу, поэтому наш аргумент равен «1,2». Последний аргумент — это ваш фактический исходный файл. Инструмент выведет файл с именем yourfilename-up.pdf, когда вы закончите.

Надеюсь, это поможет.

-Мэтт Цвейл

person Matt Zweil    schedule 05.02.2012

Проверьте исходный код PyPDF, особенно метод rotateClockwise(). Должно быть место, где написано содержимое страницы. Вставьте оператор «q» (состояние сохранения) и «cm» (с правильными параметрами для матрицы масштабирования) перед содержимым и оператор «Q» (состояние восстановления) после него.

См. документацию в формате PDF, где разъясняются операторы и структура страницы (прокрутите до внизу несколько полезных ссылок).

Не забудьте отправить патч в PyPDF :)

[EDIT] Вы также можете проверить исходники pdfjam, которые включают команду pdfnup.

person Aaron Digulla    schedule 11.02.2009

Это функция Perl, которую я использую для захвата каталога, полного файлов prn из стороннего приложения, и создания единого объединенного PDF-файла.

sub runMerged($)
{
    my($path) = @_;

    print "Generating merged PDFs for $path\n";

    my @files = sort(getFiles($path, ".prn\$"));
    if (scalar(@files))
    {
        open(MERGE, ">$path/merged.prn");
        for (my $i = 0; $i < scalar(@files); $i++)
        {
            print MERGE "^L\n" if ($i > 0);

            open(FN, "$path/" . $files[$i]);
            while (my $line = <FN>)
            {
                print MERGE $line;
            }
            close(FN);
        }

        chdir("$BASE_PATH/txt2pdf");
        print `./txt2pdf.pl $path/merged.prn`;
    }
}
person user44585    schedule 13.02.2009

У меня была аналогичная потребность на этой неделе. Но мне нужно было повторить каждую страницу А4 (альбомную) «дважды» на листе А3 (книжную), чтобы потом разрезать пополам.

Я нашел подключаемый модуль Acrobat с множеством функций спуска полос, который отлично подходил для моих нужд, а также с полнофункциональной 30-дневной пробной версией.

Надеюсь, это может быть полезно для кого-то еще.
http://www.pdfsnake.com/

person Putuko    schedule 30.09.2011

У меня была та же проблема, что и у вас, и вот что я сделал:

  1. Извлек все страницы в файле PDF в виде отдельного файла каждый
  2. В irfanView (с плагинами) я создал вертикальное «Панорамное» изображение.
  3. Перетащите файлы PDF в раздел изображений.
  4. Нажатие создано
  5. «Изображение» создается со всеми страницами, следующими друг за другом, как одно очень длинное вертикальное изображение.
  6. Вы можете экспортировать в PDF практически без потери качества.
  7. Наслаждаться
person J. Fernando N    schedule 09.02.2014

Вот скрипт для повторения страниц (например, A5, альбомная) дважды на листе, удвоенном по размеру (A4, портрет):

#!/bin/bash
INPUTFILE=$*
PAGENUM=`pdftk ${INPUTFILE} dump_data | grep NumberOfPages | cut -d : -f 2  | cut -d " " -f 2`
PAGES=`seq 1 ${PAGENUM}`
DUPAGES=`for i in ${PAGES} ; do echo $i $i | tr "\n" " " ; done`
OUTPUT1=`basename ${INPUTFILE} .pdf`.dup.pdf
OUTPUT2=`basename ${INPUTFILE} .pdf`.double.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT1}
pdfjam --nup 1x2 ${OUTPUT1} --outfile ${OUTPUT2}

Это не очень элегантно; это можно сделать без второго вызова pdftk, и это не работает с файлами, содержащими пробелы. Но он работает с многостраничными PDF-файлами.

person Seegras    schedule 07.08.2015

Используя Adobe Acrobat XI Pro, откройте 1-й документ. Отредактируйте, выберите «сделать снимок», затем щелкните в верхнем углу того, что вы хотите скопировать, и перетащите его в противоположный угол. Имейте открытый чистый лист в Paint. Нажмите на чистый лист в краске и нажмите V, чтобы вставить 1-й документ в чистый лист. Повторите для 2-го элемента, который вы хотите объединить на той же странице, за исключением того, что временно поместите 2-й элемент ПОД 1-м элементом в вашем листе краски. Затем перетащите второй элемент, чтобы расположить его в нужном месте на листе краски. Сохраните файл листа краски, и все готово!

person Mouse1999    schedule 09.02.2016
comment
Adobe Acrobat XI Pro не является бесплатным инструментом, не так ли? Это то, о чем просил ОП. - person mzjn; 09.02.2016
comment
Мы обычно не включаем людей в наши программы здесь. (во всяком случае вопрос не по теме) - person Toby Speight; 10.02.2016