CHIqueen
PDF 에서 사진만빼서 다시 PDF 만들기 본문
스캐너 지잉지잉 너무 오래걸리고 귀찮아서 캠뭐시기 어플을 애용하고 있다.
하지만 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