2009-02-11 3 views
24

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

Проблема заключается в следующем требовании: объединить две (или более) страницы в одну страницу. Например, возьмем две страницы (А и Б), вращать их, масштабировать и объединить в одну страницу, как этот

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

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

Edit есть pdfnup библиотеки, которая должна выполнять именно такую ​​трансформацию, и является кросс-платформенным, однако я не могу использовать его в связи с ошибкой, подобной this.

ответ

9

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

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

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

+0

Должно ли это быть 'pdf2ps infile.pdf infile.ps'? –

+0

@Ian: Я считаю, что ты прав, спасибо, что поймал это;) Я исправлю это. –

0

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

Для получения информации об операторах и структуре страницы см. PDF documentation (прокрутите вниз, чтобы найти полезные ссылки).

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

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

0

Это функция Perl я использую, чтобы захватить каталог полный PRN файлов из приложения 3 партии и создать единый объединенный 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`; 
    } 
} 
22

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

  • Создание буклетов: pdfbook, PDF-Tools (команда: pdfbklt)
  • Merge 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: добавляет данную строку в файл infile .pdf в данном месте, шрифте и размере.

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

+0

Новый дом для pdfmerge (кажется): https://github.com/dmaphy/pdfmerge – Mildred

+4

После тестирования нескольких инструментов 'pdfjam' был для меня окончательно самым простым, быстрым и эффективным:' pdfjam * .pdf --nup 2x1 --landscape --outfile output.pdf' (от: http://superuser.com/a/750293/255048) –

0

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

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

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

1

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

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

Вот пример, который будет выполнять именно то, что OP писал о: C: \ 1 \ Bin> Java -cp m.jar tool.pdf.Impose -dim 1х2 -verbose -papersize "21.59x55.88cm" - layout "1,2" yourfilename.pdf

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

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

Матф Zweil

2

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

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

0

Я была такая же проблема, как вы, и это то, что я сделал:

  1. Извлеченный все страницы в файл PDF в виде отдельного файла каждый
  2. В IrfanView (с помощью плагинов) Я создал Vertical «Панорамный» изображение
  3. Потянулись файлы в формате PDF к секции изображений
  4. Кликов созданного
  5. «образ» создается с всеми страницами следуют друг за другом, как один очень длинное вертикального изображение
  6. Вы можете экспортировать в PDF без потери качества.
  7. Наслаждайтесь
0

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

0

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

+1

Adobe Acrobat XI Pro - не бесплатный инструмент, не так ли? Это то, о чем попросил ОП. – mzjn

+0

Мы обычно не помещаем людей в наши программы здесь. (не то, что вопрос по теме, так или иначе) –

Смежные вопросы