Быстрое объединение большого количества маленьких PDF-файлов

379
iBug

Я на Windows 10. У меня есть 2000 PDF-файлов, каждый из которых имеет две или три страницы (с ровно одной пустой страницей) и имеет размер всего 40 ~ 50 КБ, что в сумме составляет менее 100 МБ. Я хочу объединить все страницы во всех файлах в один файл PDF. В настоящее время я использую Acrobat DC → Инструменты → Объединить файлы. Я перетаскиваю все файлы в инструмент и нажимаю старт. После некоторой оценки я обнаружил, что для этого требуется более 12 часов (ноутбук Core i7-4710HQ, 16 ГБ ОЗУ и SSD). Это довольно непрактично для меня. Есть ли более быстрый способ?

0

2 ответа на вопрос

1
user1016274

Если вы хотите использовать 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 с. Выходные файлы не были одинакового размера, но отображались одинаково.

Мне не терпится использовать подсистему Windows для Linux (это моя повседневная рабочая платформа). Я попробую завтра. iBug 6 лет назад 0
Неплохо. Он закончил 2000 файлов PDF менее чем за полминуты. Я подожду несколько удобных решений, прежде чем принять этот ответ. iBug 6 лет назад 0
0
C0deDaedalus

Есть и другие альтернативы Acrobat, которые вы можете попробовать. Эти инструменты могут вам как-то помочь.

1. PDFSam

  • Объединять и разделять PDF-файл по заданным номерам страниц, по заданному уровню закладок или по файлам заданного размера
  • Извлечение страниц из PDF
  • Поворот файлов PDF, каждой страницы или только выбранных страниц
  • Объединяйте PDF-файлы вместе, беря страницы поочередно из одного и другого.

2. PDFMerge

  • Безопасное слияние и обработка файлов
  • Предоставляет онлайн-платформу для объединения PDF-файлов
  • Также доступна версия DEsktop

3. PDFtk

  • Простой, но очень мощный инструментарий
  • Поставляется с инструментом командной строки, который позволяет легко взаимодействовать с несколькими PDF-файлами в командной строке.

На данный момент я бы предложил вам использовать pdftk, так как это инструмент командной строки очень мощный и экономит массу времени и усилий.

Не стесняйтесь редактировать список с помощью любого другого инструмента.

Я бы использовал код Python по сравнению с инструментом командной строки. iBug 6 лет назад 0