Объединить файлы PDF
Я сделал обыск, и ничто, похоже, не было напрямую связано с этим вопросом. Возможно ли, используя Python, объединить отдельные PDF-файлы?
Предположим, мне нужно расширить это немного дальше. Я надеюсь, что вы пройдете через папки в каталоге и повторите эту процедуру.
- Как разблокировать «защищенный» (защищенный от чтения) PDF-файл в Python?
- Эффективный способ преобразования документа в формат PDF
- Matplotlib PDF backend медленный?
- python: pdf - установить пароль для печати, копирования, вставки параметров?
- Как создать PDF-файл, включая изображения и текст, из Python?
И я могу надавить свою удачу, но можно ли исключить страницу, содержащуюся в файлах PDF (мое поколение отчетов всегда создает дополнительную пустую страницу).
- Как установить ширину страницы?
- xhtml2pdf не вставляет Helvetica
- Django / django-easy-pdf: объект «NoneType» не имеет атрибута «encode»
- Объединение файлов PDF с помощью Python3
- Использование PyPDF2 для объединения файлов в несколько выходных файлов
6 Solutions collect form web for “Объединить файлы PDF”
Использовать Pypdf :
Библиотека Pure-Python, созданная в виде инструментария PDF. Он способен:
* разбиение документов по страницам,
* объединение документов по страницам,
(и многое другое)
Пример двух pdf-файлов, объединенных в один файл с pyPdf:
# Loading the pyPdf Library from pyPdf import PdfFileWriter, PdfFileReader # Creating a routine that appends files to the output file def append_pdf(input,output): [output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)] # Creating an object where pdf pages are appended to output = PdfFileWriter() # Appending two pdf-pages from two different files append_pdf(PdfFileReader(open("SamplePage1.pdf","rb")),output) append_pdf(PdfFileReader(open("SamplePage2.pdf","rb")),output) # Writing all the collected pages to a file output.write(open("CombinedPages.pdf","wb"))
В новой библиотеке PyPdf2 есть класс PdfMerger
, который можно использовать так.
пример:
from PyPDF2 import PdfFileMerger pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf'] merger = PdfFileMerger() for pdf in pdfs: merger.append(open(pdf, 'rb')) with open('result.pdf', 'wb') as fout: merger.write(fout)
Кажется, что метод append
требует ленивого файлового объекта. То есть, он не читает файл немедленно. Кажется, дождаться, пока не будет вызван метод write
. Если вы используете открытую область (т.е. with
), она добавляет пустые страницы в результирующий файл, так как входной файл закрывается в этой точке.
Самый простой способ избежать этого, если время работы файлового дескриптора – проблема, – передать строки имени файла append
и позволить ему обрабатывать время жизни файла.
т.е.
from PyPDF2 import PdfFileMerger pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf'] merger = PdfFileMerger() for pdf in pdfs: merger.append(pdf) merger.write("result.pdf")
вам нужно использовать python? если вам просто нужно объединить ваши pdf-файлы, я бы посмотрел на pdftk
Возможно ли, используя Python, объединить отдельные PDF-файлы?
Да.
Следующий пример объединяет все файлы в одной папке в один новый файл PDF:
#!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename)
по#!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename)
по#!/usr/bin/env python # -*- coding: utf-8 -*- from argparse import ArgumentParser from glob import glob from pyPdf import PdfFileReader, PdfFileWriter import os def merge(path, output_filename): output = PdfFileWriter() for pdffile in glob(path + os.sep + '*.pdf'): if pdffile == output_filename: continue print("Parse '%s'" % pdffile) document = PdfFileReader(open(pdffile, 'rb')) for i in range(document.getNumPages()): output.addPage(document.getPage(i)) print("Start writing '%s'" % output_filename) with open(output_filename, "wb") as f: output.write(f) if __name__ == "__main__": parser = ArgumentParser() # Add more options if you like parser.add_argument("-o", "--output", dest="output_filename", default="merged.pdf", help="write merged PDF to FILE", metavar="FILE") parser.add_argument("-p", "--path", dest="path", default=".", help="path of source PDF files") args = parser.parse_args() merge(args.path, args.output_filename)
здесь, http://pieceofpy.com/2009/03/05/concatenating-pdf-with-python/ , дает решение.
по аналогии:
from pyPdf import PdfFileWriter, PdfFileReader def append_pdf(input,output): [output.addPage(input.getPage(page_num)) for page_num in range(input.numPages)] output = PdfFileWriter() append_pdf(PdfFileReader(file("C:\\sample.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample1.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample2.pdf","rb")),output) append_pdf(PdfFileReader(file("c:\\sample3.pdf","rb")),output) output.write(file("c:\\combined.pdf","wb"))
Библиотека pdfrw
может сделать это довольно легко, предполагая, что вам не нужно сохранять закладки и аннотации, а ваши PDF-файлы не зашифрованы. cat.py
– пример сценария конкатенации, а subset.py
– примерный сценарий подмножества страниц.
Соответствующая часть скрипта конкатенации предполагает, что inputs
представляют собой список входных имен файлов, а outfn
– это имя выходного файла:
from pdfrw import PdfReader, PdfWriter writer = PdfWriter() for inpfn in inputs: writer.addpages(PdfReader(inpfn).pages) writer.write(outfn)
Как вы можете видеть из этого, было бы довольно легко оставить последнюю страницу, например, что-то вроде:
writer.addpages(PdfReader(inpfn).pages[:-1])
Отказ от ответственности: я являюсь основным автором pdfrw
.
- Может ли кто-нибудь рекомендовать хороший генератор FOSS PDF для Python?
- Скрипт для сжатия всех файлов PDF в каталоге
- .doc в pdf с использованием python
- pyPdf не удалось извлечь текст с некоторых страниц в моем PDF-файле
- Создавайте PDF-файлы из изображений и включая текст
- Преобразование PDF в ряд изображений с помощью Python
- Ширина линии matplotlib при сохранении PDF-файла
- Python tkinter сохранить холст как постскриптум и добавить в pdf
- Вставка PDF в Excel, Python
- Автоматическое преобразование PDF в изображения
- Как извлечь текстовые и текстовые координаты из PDF-файла?
- Matplotlib fill_between () не сохраняется правильно, как PDF с штриховки