Конвертировать PDF 2 стороны на страницу в 1 сторону на страницу

Как я могу преобразовать PDF с 2 сторон на страницу в 1 сторону на страницу?

7 ответов

Решение

ОК, проблема уже была решена с помощью Acrobat (полная версия, а не Reader). Но что делать, если у вас нет доступа к Acrobat? Можно ли это сделать с помощью Ghostscript и pdftk?

Как решить эту проблему с помощью Ghostscript...

... и ради удовольствия, давайте не будем использовать входной файл со страницами "удвоение", а файл с "тройным повышением". На самом деле, я получил один такой PDF сегодня по электронной почте. Это была листовка, сложенная в схеме Лепорелло. Размер листа был A4 A4 (842pt x 595pt), и он был сложен и выложен так:

Front side to be printed, page 1 of PDF
+--------+--------+--------+   ^
|        |        |        |   |
|   5    |   6    |   1    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
         ^        ^
        fold     fold
         v        v
+--------+--------+--------+   ^
|        |        |        |   |
|   2    |   3    |   4    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->

Я хочу создать 1 PDF с 6 страницами, каждый из которых имеет необычный размер 280.67pt x 595 pt.

Первый шаг

Давайте сначала извлечем левые разделы из каждой входной страницы:

gswin32c.exe ^
    -o left-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [0 0]>> setpagedevice" ^
    -f myflyer.pdf

Что сделали эти параметры?

  • -o ...............: Имена выходного файла. Имплицитно также использует -dBATCH -dNOPAUSE -dSAFER,
  • -sDEVICE=pdfwrite : мы хотим PDF в качестве выходного формата.
  • -g................: устанавливает размер выходного носителя в пикселях. Стандартное разрешение pdfwrite - 720 точек на дюйм. Следовательно, умножьте на 10, чтобы получить соответствие для PageOffset.
  • -c "..............: просит Ghostscript обработать данный фрагмент кода PostScript непосредственно перед основным входным файлом (который должен следовать -f).
  • <</PageOffset ....: устанавливает смещение изображения страницы на носителе. (Конечно, для левых страниц сдвиг на [0 0] не имеет реального эффекта.)
  • -f ...............: обработать этот входной файл.

Какой результат достигла последняя команда?

Вот этот:

Output file: left-sections.pdf, page 1
+--------+  ^
|        |  |
|   5    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: right-sections.pdf, page 2
+--------+  ^
|        |  |
|   2    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Второй шаг

Теперь давайте сделаем аналогичную вещь для центральных секций:

gswin32c.exe ^
    -o center-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [280.67 0]>> setpagedevice" ^
    -f myflyer.pdf

Результат:

Output file: center-sections.pdf, page 1
+--------+  ^
|        |  |
|   6    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: center-sections.pdf, page 2
+--------+  ^
|        |  |
|   3    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Третий шаг

Последние, правильные разделы:

gswin32c.exe ^
    -o right-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [561.34 0]>> setpagedevice" ^
    -f myflyer.pdf

Результат:

Output file: right-sections.pdf, page 1
+--------+  ^
|        |  |
|   1    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: right-sections.pdf, page 2
+--------+  ^
|        |  |
|   4    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

Последний шаг

Теперь мы объединяем страницы в один файл:

pdftk.exe ^
  A=right-sections.pdf ^
  B=center-sections.pdf ^
  C=left-sections.pdf ^
  cat A1 B2 C2 A2 B1 C1 ^
  output single-files-input.pdf
  verbose

Готово. Вот желаемый результат. 6 разных страниц размером 280,67х595.

Результат:

+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   ^
|        |  |        |  |        |  |        |  |        |  |        |   |
|   1    |  |   2    |  |   3    |  |   4    |  |   5    |  |   6    |   |
|        |  |        |  |        |  |        |  |        |  |        | 595 pt
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   v
< 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt > 

Просто была такая же проблема. Я наткнулся на briss, Java-инструмент с открытым исходным кодом для разделения и обрезки PDF-страниц:

http://sourceforge.net/projects/briss/

Это хорошо сработало для меня в Linux, хотя пользовательский интерфейс не совсем тривиален. Он даже работал с PDF с несколькими страницами разного размера!

@peims, спасибо. Вот пошаговая версия вашего метода. Я попробовал это на файле, который я хотел преобразовать для моего Kindle DX, и он отлично работает:

  • Используйте полную версию Acrobat v9, чтобы обрезать левую часть страницы и сохранить ее как "left.pdf":
    • Используйте инструмент кадрирования, чтобы отметить левую сторону страницы.
    • Щелкните правой кнопкой мыши и выберите "Установить Cropbox".
    • Выберите "Document..Crop Pages" и примените обрезку ко всему документу.
  • Повторите с правой стороны страниц, сохраните как "right.pdf".
  • На этом этапе у вас есть два документа: "left.pdf" с левыми страницами и "right.pdf" с правыми страницами.

Затем используйте pdftk.exe (с http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/), чтобы объединить результаты в один файл. Скопируйте "pdftk.exe", "left.pdf" и "right.pdf" в "D:\" и выполните:

  • D:> pdftk D: \ left.pdf пакетный вывод% 05d_A.pdf
  • D:> pdftk D: \ right.pdf пакетный вывод% 05d_B.pdf
  • D:> pdftk * _?. pdf cat cat комбинированный.pdf

Примечание: если вы скопируете файлы в "C:\", это не будет работать в Win 7 из-за разрешений безопасности. Если у вас нет D:\, создайте каталог "C:\x" для завершения операции.

Эти результаты обычно были бы достаточно хорошими. Тем не менее, есть еще два дополнительных шага для улучшения вывода.

  • (необязательный последний шаг 1) На этом этапе документ огромен (мой документ увеличен с 7 МБ до 80 МБ), поэтому вы можете уменьшить размер файла, используя:
    • "Advanced..PDF Optimizer", или:
    • "Advanced..Preflight" с настройкой "Совместимо с Acrobat 5".
  • (необязательный последний шаг 2) Все страницы имеют разные размеры. Повторите обрезку на всех страницах, чтобы все было одинакового размера.

Вы можете продублировать документ, а затем обрезать страницы, чтобы в одном файле отображались только четные номера страниц, а в другом - только нечетные номера страниц. Затем разбейте файлы на отдельные страницы и рекомбинируйте, чтобы создать один документ с одной стороной на странице...

Вы можете сделать это с помощью ряда методов, например:

  1. Используйте инструмент обрезки Adobe Acrobat, чтобы обрезать одну сторону двойной страницы и применить обрезку ко всем страницам.
  2. Разделите файлы на отдельные страницы, используя команду "burst" в pdftoolkit
  3. Переименуйте файлы последовательно, используя инструмент переименования файлов (например, ReNamer)
  4. Перекомбинируйте страницы с помощью команды 'cat' в pdftoolkit

Я использую следующий скрипт для обработки отсканированных книг на Mac и Linux. Это может занять довольно много памяти.

#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder". 
#
# The second step is to take each page of the PDF and split this into two two pages, 
# because each page of the scanned document actually contains two pages of the book.
#
#

FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf

echo "Making a temporary copy of the input file."

cp $1 $FILE

#
# Start cropping
#

echo "Cropping the PDF"

# The first regex removes all boxes but CropBox. The second regex renames the  CropBox as MediaBox

perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE

echo "Validating the PDF"

#Run PDFTK to ensure that the file is OK

cat $FILE | pdftk - output $FILE2

#
# Done cropping, start splitting the pages
#

echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"

convert -density 200  $FILE2 -crop 50%x0 +repage $FILE3

#
# Done spliting, copy the result in a new file
#


mv $FILE3 $1.pages.pdf

Спасибо за отличную ссылку. Я был в подобной проблеме, но хотел поделиться тем, что работало для меня.

У меня был альбомно-ориентированный таблоид PDF с портретно-ориентированным текстом только на левой стороне. По сути 2-го таблоид отсутствует какой-либо контент на правой стороне страницы. Аналогичная отправная точка, но таблоид - 792 × 1224 (портрет), 1124 x 792 (пейзаж), и определение точки для необходимой мне 1/2 таблоида составило 612 х 792 балла.

"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"

Получил мне контент, в котором я нуждался, в портрете 8,5 x 11, гораздо более читаемом.

Что я понимаю, так это то, что PDF-файл, показывающий две страницы (бок о бок на одном листе), необходимо преобразовать в одну страницу на лист, в результате чего получается два листа PDF-файла. Другими словами, если на 15 листах всего тридцать страниц, нам нужно преобразовать PDF-файл в PDF-файл из тридцати листов, каждый из которых показывает одну страницу. Если это проблема, я использовал Adobe Acrobat XI PRO "инструмент извлечения страницы", указав номера страниц от 1 до 30

Krop (Python) и PDFscissors (Java) еще не упоминались, проверьте их, если у вас есть записи лекций в формате pdfnup-ped, которые вы хотите преобразовать обратно в надлежащую презентацию PDF..

http://arminstraub.com/software/krop

https://sites.google.com/site/pdfscissors/

Другие вопросы по тегам