Як автоматично копіювати сторінки в PDF-файлах?


10

У мене дуже багато файлів PDF з 1 до 4 сторінок у кожному. Мені потрібно рішення, яке автоматично генерує новий файл для кожного з цих файлів. Нові файли повинні містити вміст вихідних файлів двічі (тобто сторінки від 1 до кінця, а потім знову ті ж самі сторінки в тому ж порядку).

Як я це досягну?


3
Поясніть, будь ласка, ми не можемо прочитати вашу думку. Який рахунок? Ви хочете генерувати новий pdf-файл, який містить кожну сторінку оригіналу двічі? У якому порядку? Ви хочете, щоб сторінка 1a йшла сторінка 1b, чи ви хочете спочатку всі 4 сторінки, а потім знову всі чотири сторінки? Яку операційну систему ви використовуєте? Який інструмент ви використовуєте для створення pdfs?
тердон

Відповіді:


15

Рішення для Windows з використанням PDFtk (який, здається, ви використовуєте відповідно до своїх тегів):

Це призведе до отримання PDF-сторінки зі сторінками 1-кінця, за якою знову-таки 1-кінець:

pdftk in.pdf cat 1-end 1-end output out.pdf

Якщо ви хочете, щоб кожна сторінка була продубльована разом (як в 1,1,2,2, ...), використовуйте наступний пакетний файл:

@echo off
set pages=
setlocal enabledelayedexpansion
for /f "tokens=2" %%a in ('pdftk in.pdf dump_data ^| find /i "NumberOfPages"') do for /l %%b in (1,1,%%a) do set pages=!pages! %%b %%b
pdftk in.pdf cat!pages! output out.pdf

Велике спасибі: "pdftk in.pdf cat 1-кінець 1-кінцевий вихід out.pdf" саме робить те, що мені потрібно. Єдине, чого не вистачає, це цикл, який забирає всі файли PDF з каталогу та створює всі нові файли. Я буду вдячний і запросити мою дружину на обід з зекономленого часу ;-)))
Marc

@Marc: Цикл легко досягти. Просто перейдіть до каталогу з PDF-файлами та в командному рядку for %a in (*.pdf) do @pdftk "%~a" cat 1-end 1-end output "%~na (Duplicated)%~xa". Для кожного in.pdf (ім'я може бути будь-яким) це призведе до відповідного (дублюється) .pdf . Насолоджуйтесь вечерею і не забудьте прийняти відповідь (натисніть зелену галочку зліва), якщо вона допомогла вам!
Каран

infinete завдяки вам - ви врятували моє життя! Я дуже вдячний за вашу допомогу!
Марк

2

Я можу запропонувати вам краще рішення, якщо ви відповісте на запитання в моєму коментарі, але заради вашої дружини, ось кілька пропозицій.

ImageMagick - це інструмент командного рядка між платформами для маніпулювання зображенням. Після того як ви встановите його, ви зможете використовувати його convertінструмент, щоб робити те, що ви хочете. Деталі залежать від вашої операційної системи. Я припускаю, що ви хочете дві копії всього файлу, а не кожну сторінку подвоювати.

  1. Linux / OSX / Unix тощо

    for n in *pdf; do convert -density 150 "$n" "$n" "$n"; done
    

    Це перезаписать наявні файли , можливо, спершу потрібно створити резервну копію.

  2. Windows. Це може бути трохи неправильним, я не використовую Windows, тому не можу перевірити його, але загальна ідея повинна бути приблизно такою

    for %f in (*.pdf) do (convert.exe %f %f %f)
    

У вашій forпетлі відсутня doneта, $nймовірно, її слід цитувати. Можливо, я пропускаю, як це convertпрацює, але що convertробити, коли три рази передаєш один і той же файл? Я зараз не можу перевірити це.
slhck

Дякую @slhck, ти маєш рацію в обох випадках як завжди. Загальний формат перетворення є convert infile1 infile2 ... infileN outfile. Отже, якщо ви передасте йому один і той самий файл тричі, він займе його вдвічі як вхід, а потім запише в той же файл, що і вихід. Це я зробив тест :).
тердон

О, круто, тоді я теж щось дізнався :)
slhck

Звучить добре для мене. Дуже дякую. Коментар вище: я дав цю першу спробу, і вона спрацювала прекрасно, тільки правий цикл, який я все ще шукаю .... ви можете мені знову допомогти? Заздалегідь дякую!
Марк

@ Marc вибач, я не впевнений, що ти маєш на увазі. Який коментар? Яка петля? Вікна чи башти?
тердон

2

Якщо ви хочете, щоб кожна сторінка дублювалася разом (як в 1,1,2,2, ...) в Linux, цей сценарій це зробить:

#!/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`
OUTPUT=`basename ${INPUTFILE} .pdf`.dup.pdf
pdftk ${INPUTFILE} cat ${DUPAGES} output ${OUTPUT}

0

Якщо у вас не встановлено pdftk, а poppler-utils, скористайтеся цією командою:

for f in *
do
    pdfjoin $f $f
done

Це особливо актуально для Fedora 21, де pdftk вже не доступний у сховищі.


0

Просте використання pdfunite. Це, мабуть, може бути спрощено за допомогою більше знань про сценарій.

Майте на увазі, що останній аргумент - це отриманий файл . Якщо ви забудете, що цей файл буде перезаписаний.

pdfunite 1.pdf 2.pdf 3.pdf 4.pdf result.pdf
pdfunite result.pdf result.pdf result.pdf 3-times-result.pdf

0

Для дублювання сторінок у PDF-файлі на 4 сторінки (1,1,2,2,3,3,4,4) в Linux з уже встановленою системою pdftk цей запис працював для мене в сценарії оболонки C:

pdftk output.pdf cat 1 1 2 2 3 3 4 4 output out.pdf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.