Я на Windows 10. У меня есть 2000 PDF-файлов, каждый из которых имеет две или три страницы (с ровно одной пустой страницей) и имеет размер всего 40 ~ 50 КиБ, что в сумме составляет менее 100 МиБ. Я хочу объединить все страницы во всех файлах в один файл PDF. В настоящее время я использую Acrobat DC → Инструменты → Объединить файлы. Я перетаскиваю все файлы в инструмент и нажимаю старт. После некоторой оценки я обнаружил, что для этого требуется более 12 часов (ноутбук Core i7-4710HQ, 16 ГБ ОЗУ и SSD). Это довольно непрактично для меня. Есть ли более быстрый способ?
2 ответа
Если вы хотите использовать python, в этом предыдущем обсуждении обсуждается несколько сценариев python: https://stackoverflow.com/questions/3444645/merge-pdf-files
Благодаря тому, что библиотека Python PDF работает, все файлы открываются первыми, и только при записи выходного файла содержимое читается. Из-за этого следует ожидать высокого потребления памяти. Обходным путем будет разделить файлы на несколько папок.
Вы можете легко расширить этот сценарий, например, чтобы объединить все PDF-файлы в поддереве и всех его подпапках.
Эта программа поддерживает дополнительные флаги для подробного вывода и пропуска последней страницы каждого входного файла. Подстановочные знаки разрешены для шаблона входного файла.
from argparse import ArgumentParser
from glob import glob
from PyPDF2 import PdfFileReader, PdfFileWriter
def PDF_cat(files, output_filename, skiplastpage, verbose):
# First open all the files, then produce the output file, and
# finally close the input files. This is necessary because
# the data isn't read from the input files until the write
# operation. Thanks to
# https://stackoverflow.com/questions/6773631/problem-with-closing-_
# python-pypdf-writing-getting-a-valueerror-i-o-operation/6773733
writer = PdfFileWriter()
skip = 1 if skiplastpage else 0
# collect and open input files
inp = [open(f,'rb') for f in glob(files) if f != output_filename]
n = len(inp)
print 'merging %d files' % n
for i, fh in enumerate(inp, 1):
reader = PdfFileReader(fh)
for pg in range(reader.getNumPages() - skip):
writer.addPage(reader.getPage(pg))
if verbose: print '%d/%d %s' % (i, n, fh.name)
print('writing output file...')
with open(output_filename, 'wb') as fout:
writer.write(fout)
# finallly...
for fh in inp:
fh.close()
if __name__ == '__main__':
parser = ArgumentParser()
# add more options if you like
parser.add_argument('-o', '--output',
dest='output_filename',
help='write merged PDF files to FILE',
metavar='FILE')
parser.add_argument(dest='files',
help='PDF files to merge')
parser.add_argument('-s', '--skiplastpage',
dest='skiplastpage',
action='store_true',
help='skip last page of each merged PDF')
parser.add_argument('-v', '--verbose',
dest='verbose',
action='store_true',
help='show progress')
parser.set_defaults(output_filename='mergedPDFs.pdf', files='.\*.pdf',
skiplastpage=False, verbose=False)
args = parser.parse_args()
PDF_cat(args.files, args.output_filename, args.skiplastpage, args.verbose)
Быстрый тест: объединение 501 идентичных PDF-файлов размером 91 КБ каждый заняло у моего ноутбука 61 с, а с помощью PDFtk.exe - 83 с. Выходные файлы не были одинакового размера, но отображались одинаково.
Есть и другие альтернативы Acrobat, которые вы можете попробовать. Эти инструменты могут вам как-то помочь.
1. PDFSam
- Объединять и разделять PDF-файл по заданным номерам страниц, по заданному уровню закладок или по файлам заданного размера
- Извлечение страниц из PDF
- Поворот файлов PDF, каждой страницы или только выбранных страниц
- Объединяйте PDF-файлы вместе, беря страницы поочередно из одного и другого.
2. PDFMerge
- Безопасное слияние и обработка файлов
- Предоставляет онлайн-платформу для объединения PDF-файлов
- Также доступна версия DEsktop
3. Pdftk
- Простой, но очень мощный инструментарий
- Поставляется с инструментом командной строки, который позволяет легко взаимодействовать с несколькими PDF-файлами в командной строке.
На данный момент я бы предложил вам использовать pdftk, так как это инструмент командной строки очень мощный и экономит массу времени и усилий.
Не стесняйтесь редактировать список с помощью любого другого инструмента.