Подтвердить что ты не робот

Извлечь страницу из PDF в формате JPEG

В коде python, как эффективно сохранить определенную страницу в pdf как файл jpeg? (Используйте случай: у меня есть веб-сервер на флизе python, где будут загружены pdf файлы, а jpeg-s, соответствующие каждой странице, - это магазины.)

Это решение близко, но проблема в том, что он не конвертирует всю страницу в jpeg.

4b9b3361

Ответ 1

Можно использовать библиотеку pdf2image.

Вы можете установить его просто используя,

pip install pdf2image

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

from pdf2image import convert_from_path
pages = convert_from_path('pdf_file', 500)

Сохранение страниц в формате jpeg

for page in pages:
    page.save('out.jpg', 'JPEG')

Изменение: в репозитории Github pdf2image также упоминается, что он использует pdftoppm и для этого требуются другие установки:

pdftoppm - это часть программного обеспечения, которое делает реальную магию. Он распространяется как часть большего пакета, называемого poppler. Пользователям Windows придется устанавливать poppler для Windows. Пользователям Mac придется устанавливать poppler для Mac. У пользователей Linux будет установлен pdftoppm с дистрибутивом (протестировано на Ubuntu и Archlinux), если это не так, запустите sudo apt install poppler-utils.

Вот правильная установка для Windows: http://blog.alivate.com.au/poppler-windows/

Ответ 2

Библиотека Python pdf2image (использованная в другом ответе) на самом деле не делает намного больше, чем просто запускает pdttoppm с subprocess.Popen, поэтому вот короткая версия, которая делает это напрямую:

PDFTOPPMPATH = r"D:\Documents\software\____PORTABLE\poppler-0.51\bin\pdftoppm.exe"
PDFFILE = "SKM_28718052212190.pdf"

import subprocess
subprocess.Popen('"%s" -png "%s" out' % (PDFTOPPMPATH, PDFFILE)) #have updated the values here

Вот ссылка на установку Windows для pdftoppm (содержится в пакете с именем poppler): http://blog.alivate.com.au/poppler-windows/

Ответ 3

Нет необходимости устанавливать Poppler в вашей ОС. Это будет работать:

пип установить палочку

from wand.image import Image

f = "somefile.pdf"
with(Image(filename=f, resolution=120)) as source: 
    images = source.sequence
    pages = len(images)
    for i in range(pages):
        n = i + 1
        newfilename = f[:-4] + str(n) + '.jpeg'
        Image(images[i]).save(filename=newfilename)

Ответ 4

@gaurwraith, установите poppler для Windows и используйте pdftoppm.exe следующим образом:

  1. Загрузите zip файл с последними бинарниками /dll Poppler с http://blog.alivate.com.au/poppler-windows/ и распакуйте в новую папку в папке с вашими программными файлами. Например: "C:\Program Files (x86)\Poppler".

  2. Добавьте "C:\Program Files (x86)\Poppler\poppler-0.68.0\bin" в переменную среды SYSTEM PATH.

  3. Из строки cmd установите модуль pdf2image → "pip install pdf2image".

  4. Или, альтернативно, непосредственно выполните pdftoppm.exe из вашего кода, используя модуль подпроцесса Python, как объяснил пользователь Basj.

@vishvAs vAsuki, этот код должен генерировать jpgs, который вы хотите, через модуль подпроцесса для всех страниц одного или нескольких PDF файлов в заданной папке:

import os, subprocess

pdf_dir = r"C:\yourPDFfolder"
os.chdir(pdf_dir)

pdftoppm_path = r"C:\Program Files (x86)\Poppler\poppler-0.68.0\bin\pdftoppm.exe"

for pdf_file in os.listdir(pdf_dir):

    if pdf_file.endswith(".pdf"):

        subprocess.Popen('"%s" -jpeg %s out' % (pdftoppm_path, pdf_file))

Или используя модуль pdf2image:

import os
from pdf2image import convert_from_path

pdf_dir = r"C:\yourPDFfolder"
os.chdir(pdf_dir)

    for pdf_file in os.listdir(pdf_dir):

        if pdf_file.endswith(".pdf"):

            pages = convert_from_path(pdf_file, 300)
            pdf_file = pdf_file[:-4]

            for page in pages:

               page.save("%s-page%d.jpg" % (pdf_file,pages.index(page)), "JPEG")

Ответ 5

Я нашел это простое решение, PyMuPDF, вывод в файл PNG

    import fitz
    pdffile = "infile.pdf"
    doc = fitz.open(pdffile)
    page = doc.loadPage(0) #number of page
    pix = page.getPixmap()
    output = "outfile.png"
    pix.writePNG(output)

Ответ 6

Их утилита называется pdftojpg, которая может быть использована для преобразования pdf в img

Вы можете найти здесь код https://github.com/pankajr141/pdf2jpg

from pdf2jpg import pdf2jpg
inputpath = r"D:\inputdir\pdf1.pdf"
outputpath = r"D:\outputdir"
# To convert single page
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="1")
print(result)

# To convert multiple pages
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="1,0,3")
print(result)

# to convert all pages
result = pdf2jpg.convert_pdf2jpg(inputpath, outputpath, pages="ALL")
print(result)

Ответ 7

from pdf2image import convert_from_path
import glob

pdf_dir = glob.glob(r'G:\personal\pdf\*')  #your pdf folder path
img_dir = "G:\\personal\\img\\"           #your dest img path

for pdf_ in pdf_dir:
    pages = convert_from_path(pdf_, 500)
    for page in pages:
        page.save(img_dir+pdf_.split("\\")[-1][:-3]+"jpg", 'JPEG')

Ответ 8

Я бы посоветовал вам использовать Aspose.PDF Cloud SDK для преобразования PDF в JPEG. Вот пример:

curl -v "https://api.aspose.cloud/v1.1/pdf/test.pdf/pages/1/convert/jpeg?outpath=test.jpeg" -X PUT -H "Content-Type: application/json" -H "Accept: application/json" -H "Authorization: ..."

Надеюсь, поможет. В противном случае, не стесняйтесь спрашивать меня.

Примечание: я работаю в качестве разработчика Evangelist в Aspose.

Ответ 9

Я использую (возможно) гораздо более простой вариант pdf2image:

cd $dir
for f in *.pdf
do
  if [ -f "${f}" ]; then
    n=$(echo "$f" | cut -f1 -d'.')
    pdftoppm -scale-to 1440 -png $f $conv/$n
    rm $f
    mv  $conv/*.png $dir
  fi
done

Это небольшая часть скрипта bash в цикле для использования узкого устройства приведения. Проверяет каждые 5 секунд на добавленные файлы PDF (все) и обрабатывает их. Это для демонстрационного устройства, в конце преобразование будет сделано на удаленном сервере. Теперь можно конвертировать в .PNG, но также возможен .JPG.

Это преобразование, вместе с переходами в формате А4, отображением видео, двумя текстами с плавной прокруткой и логотипом (с переходом в трех версиях) устанавливает Pi3 почти на 4x 100% загрузки процессора ;-)