관리 메뉴

CHIqueen

PDF 에서 사진만빼서 다시 PDF 만들기 본문

프로그래밍/Python

PDF 에서 사진만빼서 다시 PDF 만들기

CHIqueen 2020. 3. 13. 03:21

스캐너 지잉지잉 너무 오래걸리고 귀찮아서 캠뭐시기 어플을 애용하고 있다.

하지만 pdf로 변환하고 나면 밑에 있는 scan by ~ 가 다른 사람한테 전달할때 좀 그래서 전에 질문을 받은적이 있다....

 

그래서 이걸 없애 보려는데

 

다행히 스캔한거 위에 올려서 아예 이미지로 만들지 않아서 이미지랑 분리 할 수 있다.

 

 

라이브러리는 os, PyPDF2, img2pdf, PIL을 사용할 것이다.

 

(하나로 처리하면 좋지만 자료랑 doc이 너무 구리다)

 

import os
import PyPDF2
from img2pdf import convert
from PIL import Image

file_pdf = PyPDF2.PdfFileReader(open("test.pdf","rb"))
pages = file_pdf.getNumPages()
name = file_pdf.documentInfo.subject
for i in range(pages):
    page0 = file_pdf.getPage(i)
    if '/XObject' in page0['/Resources']:
        xObject = page0['/Resources']['/XObject'].getObject()
        for obj in xObject:
            if xObject[obj]['/Subtype'] == '/Image':
                data = xObject[obj]._data
                       
                img = open(str(i)+".jpg", "wb")
                img.write(data)
                img.close()
    else:
        print("No image found.")
    
for i in range(pages):
    image = Image.open(str(i)+".jpg")
    c = image.resize((827,1169))
    c.save(str(i)+".jpg","JPEG",quality=95)

with open(name+".pdf", "wb") as f:
    f.write(convert([str(i)+".jpg" for i in range(pages)]))
            
    
for i in range(pages):
    os.remove(str(i)+".jpg")

방식은 이러하다

pdf 파일 open -> 페이지 별로 xObject 찾음 -> 뽑음 -> 이미지를 A4에 크기 맞춤 -> 이미지를 모아 pdf로 저장

 

원래 data = xObject[obj]._data 이부분은 doc상으론 ._data가 아니라 .getData()로 가져오는건데 안되길래 스택오버플로 뒤져보다가 _data로 했길래 해봤더니 성공

 

이미지를 뽑아보고 그냥 pdf로 만들어보면 너무 큰것을 알 수 있다. 핸드폰으로 찍은 이미지다 보니까 몇천 * 몇천 사이즈 인데 이것도 그냥 크기를 줄여봤다.

정확하게 A4 사이즈 맞출려고 resize를 몇번 했는지 모르겠다.

 

PyPDF2랑 PIL로 PDF 만들 수 있는데 PyPDF2는 설명이 너무 구려서 패스 PIL은 어떻게 여러 이미지를 불러올지 고민하다 그냥 패스함

'프로그래밍 > Python' 카테고리의 다른 글

UMDCTF Fragile Foundations  (0) 2020.04.23
python 자료형별 시간복잡도  (0) 2020.04.11
백준 4344 평균은 넘겠지 한줄 풀이  (0) 2020.04.09
dict의 모든 value에 1씩 더하기  (0) 2020.04.05
Python hwp to pdf  (4) 2020.02.21
Comments