반려인에게 PDF 안에 있는 그림을 자동 추출해서 저장할 수 없냐는 의뢰를 받았다. 대가는 칭찬이다. 가보쟈고
✅ Summary
📍코드 짜기 전 이것저것
태블릿PC로 문서 위에 그림을 바로 그린 다음 이걸 PDF 문서로 저장해서 주기 때문에 Ctrl+C, V 버튼이 안먹혔다.
Acrobat Pro에서는 그림을 자동으로 인식해서 자를 수 있게 해주긴 하던데, 그럼 딱 그 PDF 내 그림 그대로를 자르기 때문에 확대하면 화질도 깨지고 폴더에 촤르르르 자동저장하는 기능도 못 쓰는 문제가 있었다.
코드 아예 모르는 사람도 사용할 수 있게 파일업로드 후 버튼 몇 번만 누르면 이미지 자동 캡쳐 후 폴더에 자동 저장될 수 있도록 기능을 구현해야겠다 생각했다. 그래서 Colab을 이용했다. 구글은 다들 많이 쓰니까
📍구현 순서
다행히 PDF 파일은 아래 사진같이 이미지의 위치가 지정되어 있는 형식으로 되어 있었다.

그래서
1. PDF 내 이미지들의 꼭지점 좌표 추출
2. 좌표 기반 자동 캡쳐하여 컴퓨터에 자동 다운로드
이렇게 구현해야겠다고 생각했다.
이 과정에서 제일 신경쓴 부분은
1. 버튼 몇 개만 눌러도 되게 하기
2. 화질 깨지지 않으면서 캡쳐부터 다운로드까지 시간 너무 오래걸리지 않기
였다.
✅ Code
📍좌표 추출
두 가지 GIT Code를 참고하여 좌표 추출 코드를 작성하였다.
https://github.com/youngminz/pdf-cooking-helper
GitHub - youngminz/pdf-cooking-helper: PDF 템플릿을 생성할 때 좌표 구하는 작업을 도와주는 도구입니다.
PDF 템플릿을 생성할 때 좌표 구하는 작업을 도와주는 도구입니다. Contribute to youngminz/pdf-cooking-helper development by creating an account on GitHub.
github.com
https://github.com/sangil6372/python-data-refine
GitHub - sangil6372/python-data-refine: pdf 에서 이미지 정보(bbox 좌표) 추출 및 저장하는 토이 프로젝트 입
pdf 에서 이미지 정보(bbox 좌표) 추출 및 저장하는 토이 프로젝트 입니다. Contribute to sangil6372/python-data-refine development by creating an account on GitHub.
github.com
📍자동 캡쳐 후 저장
pymupdf 라이브러리의 fitz 모듈 사용하였다.
코드는 아래와 같다.
import fitz
import os
from google.colab import files
import pandas as pd
import numpy as np
# 여기서 파일 업로드
uploaded = files.upload()
# PDF 파일 경로 (꼭 업로드한 PDF 파일 이름으로 바꾸기)
pdf_path = "/content/20250211.pdf"
# 해당 PDF에 맞게 추출한 좌표입니다. 건드리지 마세요.
crop_regions = [
(67.8, 91.5, 266.2, 204.5),
(67.8, 239.3, 266.2, 352),
(67.8, 386.5, 266.2, 499.5),
(67.8, 533.5, 266.2, 645.08),
(67.8, 679.5, 266.2, 792)
]
output_folder = "/content/save_images"
os.makedirs(output_folder, exist_ok=True)
doc = fitz.open(pdf_path)
# 만약 해상도를 높이고 싶으면 dpi=300 부분의 숫자를 높이세요.
# 높이면 시간은 더 소요될 수 있습니다.
for page_num in range(len(doc)):
page = doc[page_num]
for i, (x1, y1, x2, y2) in enumerate(crop_regions):
pix = page.get_pixmap(clip=(x1, y1, x2, y2), dpi=300)
output_path = os.path.join(output_folder, f"{page_num+1}-{i+1}.png")
pix.save(output_path)
doc.close()
print(f"이미지 저장 완료! 저장 경로: {output_folder}")
!zip -r save_images.zip /content/save_images
files.download("save_images.zip")
그러면 코드가 다 돌아가면 해당 ZIP 폴더가 자동으로 다운로드 되고, 아래 사진과 같이 PNG 파일로 잘 저장된 것을 볼 수 있다.
넘버링은 "페이지 번호-그 페이지 내에서 몇번째그림"으로 했다.

자동캡쳐 코드 돌아가고 ZIP파일로 다운로드되는 시간까지 32MB 파일 기준 3분?정도 소요된다. dpi 300 기준
두 가지 코드 구현하는데는 30~40분 정도 소요된 것 같다.
또 의뢰 수행하고 칭찬 받아야지.
반려인에게 PDF 안에 있는 그림을 자동 추출해서 저장할 수 없냐는 의뢰를 받았다. 대가는 칭찬이다. 가보쟈고
✅ Summary
📍코드 짜기 전 이것저것
태블릿PC로 문서 위에 그림을 바로 그린 다음 이걸 PDF 문서로 저장해서 주기 때문에 Ctrl+C, V 버튼이 안먹혔다.
Acrobat Pro에서는 그림을 자동으로 인식해서 자를 수 있게 해주긴 하던데, 그럼 딱 그 PDF 내 그림 그대로를 자르기 때문에 확대하면 화질도 깨지고 폴더에 촤르르르 자동저장하는 기능도 못 쓰는 문제가 있었다.
코드 아예 모르는 사람도 사용할 수 있게 파일업로드 후 버튼 몇 번만 누르면 이미지 자동 캡쳐 후 폴더에 자동 저장될 수 있도록 기능을 구현해야겠다 생각했다. 그래서 Colab을 이용했다. 구글은 다들 많이 쓰니까
📍구현 순서
다행히 PDF 파일은 아래 사진같이 이미지의 위치가 지정되어 있는 형식으로 되어 있었다.

그래서
1. PDF 내 이미지들의 꼭지점 좌표 추출
2. 좌표 기반 자동 캡쳐하여 컴퓨터에 자동 다운로드
이렇게 구현해야겠다고 생각했다.
이 과정에서 제일 신경쓴 부분은
1. 버튼 몇 개만 눌러도 되게 하기
2. 화질 깨지지 않으면서 캡쳐부터 다운로드까지 시간 너무 오래걸리지 않기
였다.
✅ Code
📍좌표 추출
두 가지 GIT Code를 참고하여 좌표 추출 코드를 작성하였다.
https://github.com/youngminz/pdf-cooking-helper
GitHub - youngminz/pdf-cooking-helper: PDF 템플릿을 생성할 때 좌표 구하는 작업을 도와주는 도구입니다.
PDF 템플릿을 생성할 때 좌표 구하는 작업을 도와주는 도구입니다. Contribute to youngminz/pdf-cooking-helper development by creating an account on GitHub.
github.com
https://github.com/sangil6372/python-data-refine
GitHub - sangil6372/python-data-refine: pdf 에서 이미지 정보(bbox 좌표) 추출 및 저장하는 토이 프로젝트 입
pdf 에서 이미지 정보(bbox 좌표) 추출 및 저장하는 토이 프로젝트 입니다. Contribute to sangil6372/python-data-refine development by creating an account on GitHub.
github.com
📍자동 캡쳐 후 저장
pymupdf 라이브러리의 fitz 모듈 사용하였다.
코드는 아래와 같다.
import fitz
import os
from google.colab import files
import pandas as pd
import numpy as np
# 여기서 파일 업로드
uploaded = files.upload()
# PDF 파일 경로 (꼭 업로드한 PDF 파일 이름으로 바꾸기)
pdf_path = "/content/20250211.pdf"
# 해당 PDF에 맞게 추출한 좌표입니다. 건드리지 마세요.
crop_regions = [
(67.8, 91.5, 266.2, 204.5),
(67.8, 239.3, 266.2, 352),
(67.8, 386.5, 266.2, 499.5),
(67.8, 533.5, 266.2, 645.08),
(67.8, 679.5, 266.2, 792)
]
output_folder = "/content/save_images"
os.makedirs(output_folder, exist_ok=True)
doc = fitz.open(pdf_path)
# 만약 해상도를 높이고 싶으면 dpi=300 부분의 숫자를 높이세요.
# 높이면 시간은 더 소요될 수 있습니다.
for page_num in range(len(doc)):
page = doc[page_num]
for i, (x1, y1, x2, y2) in enumerate(crop_regions):
pix = page.get_pixmap(clip=(x1, y1, x2, y2), dpi=300)
output_path = os.path.join(output_folder, f"{page_num+1}-{i+1}.png")
pix.save(output_path)
doc.close()
print(f"이미지 저장 완료! 저장 경로: {output_folder}")
!zip -r save_images.zip /content/save_images
files.download("save_images.zip")
그러면 코드가 다 돌아가면 해당 ZIP 폴더가 자동으로 다운로드 되고, 아래 사진과 같이 PNG 파일로 잘 저장된 것을 볼 수 있다.
넘버링은 "페이지 번호-그 페이지 내에서 몇번째그림"으로 했다.

자동캡쳐 코드 돌아가고 ZIP파일로 다운로드되는 시간까지 32MB 파일 기준 3분?정도 소요된다. dpi 300 기준
두 가지 코드 구현하는데는 30~40분 정도 소요된 것 같다.
또 의뢰 수행하고 칭찬 받아야지.