pdf에서 jpeg로 페이지 추출
파이썬 코드에서 pdf의 특정 페이지를 jpeg 파일로 효율적으로 저장하는 방법은 무엇입니까? (사용 사례 : pdf-s가 업로드되고 각 페이지에 해당하는 jpeg-s가 스토어 인 파이썬 플라스크 웹 서버가 있습니다.)
이 솔루션 은 가깝지만 문제는 전체 페이지를 jpeg로 변환하지 않는다는 것입니다.
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 repo pdf2image 는 또한 사용 pdftoppm
하고 다른 설치가 필요하다고 언급 합니다.
pdftoppm은 실제 마법을 수행하는 소프트웨어입니다. poppler 라는 더 큰 패키지의 일부로 배포됩니다 . Windows 사용자는 Windows 용 poppler 를 설치해야합니다 . Mac 사용자는 Mac 용 poppler 를 설치해야합니다 . Linux 사용자는 pdftoppm이 배포판 (Ubuntu 및 Archlinux에서 테스트 됨)과 함께 사전 설치되어 있지 않은 경우
sudo apt install poppler-utils
.
다음은 Windows 용 적절한 설치입니다. http://blog.alivate.com.au/poppler-windows/
pdf2image
실제로 Python 라이브러리 (다른 답변에서 사용됨)는으로 시작 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
다음은 pdftoppm
(poppler라는 패키지에 포함 된)에 대한 Windows 설치 링크입니다 . http://blog.alivate.com.au/poppler-windows/
OS에 Poppler를 설치할 필요가 없습니다. 이것은 작동합니다 :
pip 설치 완드
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)
@gaurwraith, Windows 용 poppler를 설치하고 다음과 같이 pdftoppm.exe를 사용합니다.
http://blog.alivate.com.au/poppler-windows/ 에서 Poppler의 최신 바이너리 / dll이 포함 된 zip 파일을 다운로드 하고 프로그램 파일 폴더의 새 폴더에 압축을 풉니 다. 예 : "C : \ Program Files (x86) \ Poppler".
SYSTEM PATH 환경 변수에 "C : \ Program Files (x86) \ Poppler \ poppler-0.68.0 \ bin"을 추가합니다.
cmd 라인에서 pdf2image 모듈 설치-> "pip install pdf2image".
- 또는 사용자 Basj가 설명한대로 Python의 하위 프로세스 모듈을 사용하여 코드에서 pdftoppm.exe를 직접 실행합니다.
@vishvAs vAsuki,이 코드는 주어진 폴더에있는 하나 이상의 pdf의 모든 페이지에 대해 하위 프로세스 모듈을 통해 원하는 jpg를 생성해야합니다.
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")
이 간단한 솔루션 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)
pdf를 img로 변환하는 데 사용할 수있는 pdftojpg라는 유틸리티입니다.
여기에서 코드를 찾을 수 있습니다 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)
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 스크립트의 작은 부분입니다. 추가 된 pdf 파일 (전체)을 5 초마다 확인하여 처리합니다. 이것은 데모 장치 용이며, 마지막에 원격 서버에서 변환이 수행됩니다. 지금 .PNG로 변환하지만 .JPG도 가능합니다.
이 변환은 A4 형식의 전환과 함께 비디오, 두 개의 부드러운 스크롤 텍스트 및 로고 (세 가지 버전의 전환 포함)를 표시하여 Pi3를 최대 4x 100 % cpu-load로 설정합니다 ;-)
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')
참조 URL : https://stackoverflow.com/questions/46184239/extract-a-page-from-a-pdf-as-a-jpeg
'IT이야기' 카테고리의 다른 글
페이지로드 속도를 최적화하려면 모든 CSS 파일을 프로그래밍 방식으로 인라인 해야 할까? (0) | 2021.03.24 |
---|---|
asp.net 애플리케이션에서 C#7 활성화 (0) | 2021.03.24 |
.NET의 파일 확장자 및 MIME 유형 (0) | 2021.03.23 |
MVC2의 이미지 및 robots.txt에 "IController를 구현하지 않음"오류가 발생할 경우 (0) | 2021.03.23 |
Scala의 '::'연산자에 대하여 (0) | 2021.03.23 |