Як я можу конвертувати PDF-файл з 2 сторінок на сторінку в 1 сторону на сторінку?
Як я можу конвертувати PDF-файл з 2 сторінок на сторінку в 1 сторону на сторінку?
Відповіді:
Гаразд, проблему вже вирішили за допомогою Acrobat (повна версія, а не Reader). Але що робити, якщо у вас немає доступу до Acrobat? Чи можна це зробити і за допомогою Ghostscript та pdftk?
... і для задоволення від цього не давайте використовувати вхідний файл зі сторінками "подвоєння", а один із "високими рівнями". Насправді я отримав один такий PDF сьогодні електронною поштою. Це був флаєр, складений у схемі Лепорелло . Розмір аркуша мав формат 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 dpi. Отже, помножте на 10, щоб отримати збіг для PageOffset.-c "..............:
просить Ghostscript обробити даний фрагмент коду PostScript безпосередньо перед головним вхідним файлом (з яким потрібно слідувати -f
).<</PageOffset ....:
встановлює зміщення зображення сторінки на носії. (Зрозуміло, для лівих сторінок перехід на [0 0]
"реального ефекту" не має.)-f ...............:
обробити цей вхідний файл.Якого результату досяг остання команда?
Ось цей:
Output file: left-sections.pdf, page 1
+--------+ ^
| | |
| 5 | |
| |595 pt
| | |
| | |
| | |
+--------+ v
Output file: left-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,67x595.
Результат:
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ ^
| | | | | | | | | | | | |
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | |
| | | | | | | | | | | | 595 pt
| | | | | | | | | | | | |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
+--------+ +--------+ +--------+ +--------+ +--------+ +--------+ v
< 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt > < 280 pt >
f = open("order.dat","w")
for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i))
f.close()
Це створить файл order.dat з "A1 B1 A2 B2 ... A63 B63". Потім можна скопіювати і вставити його в pdftk
.
Просто була така ж проблема. Я натрапив на briss, інструмент Java-графічного інтерфейсу з відкритим кодом для розділення та обрізки сторінок PDF:
http://sourceforge.net/projects/briss/
Для мене це працювало дуже добре в Linux, хоча інтерфейс користувача не зовсім тривіальний. Він навіть працював у форматі PDF із деякими різними розмірами сторінок!
@peims, спасибі Ось покрокова версія вашого методу. Я спробував це у файлі, який хотів конвертувати для свого Kindle DX, і він відмінно працює:
Далі, використовуйте pdftk.exe (з http://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ), щоб переплести результати в один файл. Скопіюйте "pdftk.exe", "left.pdf" та "right.pdf" в "D: \", і виконайте:
Примітка: якщо ви скопіюєте файли на "C: \", це не працюватиме під Win 7 через дозволи безпеки. Якщо у вас немає D: \, тоді створіть каталог "C: \ x" для завершення операції.
Зазвичай ці результати будуть досить хорошими. Однак є ще два необов'язкові кроки для покращення виходу.
Ви можете скопіювати документ, а потім обрізати сторінки таким чином, щоб в одному файлі відображалися лише парні номери, а в іншому - непарні номери сторінок. Потім розділіть файли на одні сторінки та повторно комбінуйте, щоб зробити один документ з однієї сторони на сторінку ...
Це можна зробити, використовуючи ряд методів, наприклад:
Я використовую наступний сценарій для обробки сканованих книг на 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) ще не були згадані, перевірте їх, чи є у вас лекції fe pdfnup-ped, які ви хочете повернути у правильний PDF-презентацію ..