Ответ 1
Отметьте этот ответ, который использует Multivalent для наложения PDF-страниц
Я ищу бесплатный инструмент, который позволяет повторно размещать страницы PDF-документа и объединять несколько страниц на листе. Первая часть (переустановка) легко решается многими инструментами (я использую PyPDF).
Проблема связана со вторым требованием: объединить две (или более) страницы в одну страницу. Например, возьмите две страницы (A и B), поверните их, масштабируйте и объедините на одну страницу, например,
------ ------ ------
| | | | | |
| A | | B | | a |
| | | | | |
| | | | ---> ------
| | | | | |
| | | | | b |
| | | | | |
------ ------ ------
Решение должно работать на Linux, а также на Windows. Я ищу либо консольное приложение, либо библиотеку с привязками Python или Perl.
Изменить есть библиотека pdfnup, которая должна выполнять именно этот вид преобразования, и является перекрестной -платформу, однако я не могу использовать ее из-за ошибки, похожей на this.
Отметьте этот ответ, который использует Multivalent для наложения PDF-страниц
Это резюме инструментов, которые я нашел для PDF (я хотел найти эквивалент psup и psbook)
От моего менеджера пакетов:
Создайте буклет A6:
pdfbook -2 -p a5 infile.pdf outfile.pdf
pdf-tools содержит:
Существует также многозначность: http://multivalent.sourceforge.net/Tools/index.html
В Linux вы можете конвертировать файлы PDF в Postscript и использовать psnup
. Точный способ его вызова зависит от того, как вы хотите, чтобы страницы были собраны вместе, хотите ли вы их поворачивать, какие размер (и) бумаги вы хотите использовать и т.д., Но это будет примерно так:
pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf
В зависимости от того, какие инструменты у вас есть, у вас может быть более эффективный способ сделать это. psnup
, конечно, не единственный способ, но это относительно известная программа (на Linux в любом случае).
Если вы используете Linux, вы можете использовать BookletImposer для размещения нескольких страниц PDF на одной странице.
Для пользователей Ubuntu этот инструмент доступен в программном центре Ubuntu.
В ответ на ваш вопрос вам понадобится инструмент PDF 'Imposition', который представляет собой причудливый способ сказать инструмент, который размещает изображения 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 1x2 -verbose -papersize "21.59x55.88cm" -layout "1,2" yourfilename.pdf
Примечание. Параметр -dim создает массив в столбцах x Rows. Здесь в сантиметрах указан параметр -papersize, но если вам нужны дюймы, просто умножьте дюймы на 2,54, чтобы получить cm. Параметр -layout дает вам заказ, который вы хотите заполнить пустыми слотами в вашем массиве, заполняя сверху вниз и слева направо. В этом случае мы хотим, чтобы страница одна из pdf сверху и вторая страница внизу, поэтому наш аргумент "1,2". Последним аргументом является ваш фактический исходный файл. Когда вы закончите, инструмент выведет файл с именем yourfilename-up.pdf.
Надеюсь, что это поможет.
-Matt Zweil
Проверьте исходный код PyPDF, особенно метод rotateClockwise(). Должно быть место, где написано содержание страницы. Вставьте оператор "q" (сохранить состояние) и "cm" (с правильными параметрами для матрицы масштабирования) перед содержимым и оператором "Q" (состояние восстановления).
См. PDF-документацию для объяснения операторов и структуры страницы (прокрутите вниз для некоторых полезных ссылок).
Не забудьте отправить патч в PyPDF:)
[EDIT] Вы также можете проверить pdfjam sources, которые включают в себя команду pdfnup.
Это функция 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`;
}
}
У меня была такая же потребность на этой неделе. Но мне нужно было повторить каждую страницу А4 (пейзаж) "дважды" на листе A3 (портрет), чтобы позже разрезать пополам.
Я нашел плагин Acrobat с множеством функций наложения, которые отлично подойдут для моих нужд и с полностью функциональной пробной версией 30 дней.
Надеюсь, это может быть полезно для кого-то еще.
http://www.pdfsnake.com/
У меня была такая же проблема, как и вы, и вот что я сделал:
Здесь a script для повторения страниц (например, 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 файлами.
Используя Adobe Acrobat XI Pro, откройте 1-й документ. Измените, выберите "сделать снимок", затем нажмите в верхнем углу того, что вы хотите скопировать, и перетащите в противоположный угол. У вас есть открытый чистый лист в Paint. Перейдите на чистый лист краски и управления V, чтобы вставить 1-й документ в чистый лист. Повторите для второго пункта, который вы хотите объединить на той же странице, за исключением того, что временно помещайте второй элемент под 1-й элемент на листе Paint. Затем перетащите второй элемент, чтобы поместить его туда, где он вам нужен, в листе краски. Сохраните файл с красками, и все готово!