PDF 문서 내에서 이미지를 활용하기 위해 이미지-PDF 변환기를 사용하는 경우가 많습니다. 온라인에는 다양한 옵션이 있지만 일부 옵션은 이미지 업로드가 필요하기 때문에 데이터 프라이버시 및 보안에 대한 우려가 있을 수 있습니다.
온라인에서 이미지를 PDF로 변환하는 또 다른 방법은 Python을 사용하여 오프라인 이미지-PDF 변환기를 만드는 것입니다. JPG 또는 PNG 형식의 여러 사진을 선택하면 각 사진의 원래 크기를 유지하면서 PDF 문서로 변환하기 전에 이미지의 미리보기를 볼 수 있습니다.
Tkinter, Pillow 및 ReportLab 모듈
Python의 기본 그래픽 사용자 인터페이스 라이브러리로 Tkinter를 사용하면 버튼, 레이블 및 텍스트 입력 필드와 같은 광범위한 위젯을 제공하여 음악 플레이어 또는 체중 변환 계산기를 포함한 애플리케이션을 쉽게 개발할 수 있습니다. Tkinter를 시스템에 통합하려면 명령줄 인터페이스로 이동하여 다음 명령어를 입력하면 됩니다.
pip install tkinter
Pillow 모듈은 크기 조정, 자르기, 필터링 등 이미지를 간단하게 조작할 수 있는 고급 Python 이미징 라이브러리입니다. 이 기능을 OpenAI API 및 DALL-E 2와 통합하여 사용자는 자연어 입력을 기반으로 시각적 콘텐츠를 생성할 수 있습니다.
Python에서 Pillow 패키지를 설치하려면 다음 명령을 실행하세요:
pip install Pillow
ReportLab은 코드를 통해 PDF 파일과 그래픽을 생성할 수 있는 다목적 Python 라이브러리입니다. 이 도구 모음을 사용하면 이미지, 텍스트 및 표를 통합한 문서를 만들 수 있으므로 보고서 작성 자동화에 이상적인 선택입니다. ReportLab은 전문적인 비즈니스 보고서, 송장, 증명서를 작성하는 데 사용할 수 있을 뿐만 아니라 해당 문서 위에 텍스트를 각인할 수도 있습니다. ReportLab에 액세스하려면 다음 단계를 따르세요:
pip install reportlab
이미지-PDF 변환기의 구조 정의
Python을 사용하여 이미지를 PDF 파일로 변환하는 도구를 구축하기 위한 전체 소스 코드는 앞서 언급한 GitHub 리포지토리를 통해 액세스할 수 있습니다.
다음 Python 코드는 tkinter 라이브러리를 사용하여 이미지 파일을 PDF 형식으로 변환하기 위한 그래픽 사용자 인터페이스(GUI)를 만드는 단계를 설명합니다. GUI는 ‘이미지 선택’과 ‘PDF로 변환’이라는 두 개의 버튼으로 구성되어 있습니다. 주요 기능은 ImageToPDFConverter 클래스에서 구현되며, 이 클래스는 종속성으로 PIL 및 ReportLab 라이브러리를 필요로 합니다.“`파이썬 tkinter를 tk로 임포트 tkinter에서 파일로그를 임포트합니다. import os 서브 프로세스 임포트 PIL에서 이미지, ImageTk를 가져옵니다. reportlab.pdfgen을 pdf로 가져오기 class ImageToPDFConverter: def __init__(self, master): # 필요한 모듈을 가져오고 클래스를 초기화합니다. self.root = master self.master = None self.images_
import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
from reportlab.lib.pagesizes import landscape
from reportlab.pdfgen import canvas
class ImageToPDFConverter:
def __init__(self, root):
self.root = root
self.image_paths = []
self.root.title("Image to PDF Converter")
self.root.geometry("750x600")
self.select_images_button = tk.Button(self.root, text="Select Images", command=self.select_images, font=("Helvetica", 12),)
self.select_images_button.pack(pady=10)
self.convert_to_pdf_button = tk.Button(self.root, text="Convert to PDF", command=self.convert_to_pdf,font=("Helvetica", 12),)
self.convert_to_pdf_button.pack(pady=10)
선택한 그림의 예비 보기를 표시하고 상위 창, 크기 및 높이를 할당하는 프레임워크를 설정합니다. 사방에 10단위 테두리로 둘러쌉니다.
self.select_images_label = tk.Label(self.root, text="Select Images", font=("Helvetica", 14))
self.select_images_label.pack(pady=10)
self.preview_frame = tk.Frame(self.root, width=380, height=200)
self.preview_frame.pack(pady=10)
이미지 선택 및 미리보기 생성
`select_images()` 메서드는 Tkinter 라이브러리의 `filedialog` 클래스를 사용하여 사용자가 지정된 디렉토리에서 여러 이미지를 선택할 수 있는 대화 상자를 엽니다. 선택한 이미지의 경로는 `images_path` 목록에 저장됩니다. 초기 디렉토리, 대화 상자에 표시되는 제목 및 선택 가능한 파일 형식이 이 메서드의 인수로 전달됩니다.
사용자가 선택한 사진의 각 경로를 순회하는 반복 도구가 정의됩니다. Pillow 라이브러리의 “open()” 함수를 사용하여 이미지 파일에 액세스하고 “resize()” 메서드를 사용하여 이미지에 지정된 최적의 크기를 지정합니다. 그런 다음 결과 PIL 이미지는 Tkinter와 함께 사용하기에 적합한 “PhotoImage” 객체로 변환됩니다. 레이블이 생성되어 이전에 설정된 미리 보기 프레임 내에 삽입되어 이미지를 표시합니다. 마지막으로 그리드 관리자를 사용하여 시각화를 3열 그리드 패턴으로 정렬합니다.
def select_images(self):
self.image_paths = filedialog.askopenfilenames(initialdir="/", title="Select Images", filetypes=(("Image Files", "*.jpg *.png"),))
for i, image_path in enumerate(self.image_paths):
image = Image.open(image_path)
image = self.resize_image(image, width=150, height=150)
photo = ImageTk.PhotoImage(image)
label = tk.Label(self.preview_frame, image=photo)
label.image = photo
label.grid(row=i // 3, column=i % 3, padx=10, pady=10)
`resize_image()` 함수는 원래 종횡비를 유지하면서 이미지의 크기를 조정하는 역할을 담당합니다. 이는 이미지의 가로 세로 비율을 계산하고 이를 사용하여 새로운 너비와 높이를 결정함으로써 이루어집니다. 그런 다음 파이썬 이미징 라이브러리(`PIL`)의 `resize()` 메서드를 사용하여 이중 선형 보간을 통해 종횡비를 유지하면서 이미지 크기를 조정합니다.
def resize_image(self, image, width, height):
aspect_ratio = min(width / float(image.size[0]), height / float(image.size[1]))
new_width = int(aspect_ratio * image.size[0])
new_height = int(aspect_ratio * image.size[1])
resized_image = image.resize((new_width, new_height), resample=Image.Resampling.BILINEAR)
return resized_image
이미지를 PDF로 변환
주어진 형식을 PDF(Portable Document Format)로 변환하는 것은 사용자 정의 함수인 `convert_to_pdf()`의 구현을 통해 이루어집니다. 이 함수는 `filedialog` 모듈을 사용하여 생성된 PDF 파일의 대상 경로를 사용자에게 요청합니다. 그 후 출력 파일의 기본 확장자와 파일 유형을 `.pdf`로 설정합니다. PDF 콘텐츠를 생성하기 위해 ReportLab의 `canvas` 모듈이 사용됩니다. 그런 다음 개별 이미지의 경로를 따라 이동하는 반복적 접근 방식을 사용하여 PDF에 가로 페이지를 그립니다. 각 이미지에 대해 치수를 가져와 PDF에서 해당 페이지의 치수로 설정합니다.마지막으로 이미지가 이전에 결정된 치수로 왼쪽 상단 모서리에서 그려져 PDF에 렌더링됩니다.
`showPage()` 메서드는 PDF(휴대용 문서 형식)를 다음 페이지로 쉽게 전환할 수 있도록 합니다. 이 작업을 실행하면 프로그램이 PDF를 저장하고 경로가 포함된 대화 상자를 표시합니다.
def convert_to_pdf(self):
pdf_path = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=(("PDF Files", "*.pdf"),))
c = canvas.Canvas(pdf_path, pagesize=landscape)
for image_path in self.image_paths:
image = Image.open(image_path)
width, height = image.size
c.setPageSize((width, height))
c.drawImage(image_path, 0, 0, width=width, height=height)
c.showPage()
c.save()
messagebox.showinfo("Conversion Successful", f"PDF saved at {pdf_path}")
부모 창을 포함한 Tkinter 그래픽 사용자 인터페이스의 초기화는 클래스 객체를 인스턴스화하고 생성자에게 Tkinter 루트 창을 인수로 전달하여 수행됩니다. 그 후 클래스 인스턴스에서 mainloop() 메서드가 호출되어 Tkinter 이벤트 루프가 활성화되고 Python이 창이 닫힐 때까지 GUI와의 사용자 상호 작용을 모니터링하도록 지시합니다.
if __name__ == "__main__":
root = tk.Tk()
app = ImageToPDFConverter(root)
root.mainloop()
이미지-PDF 변환기가 완전히 통합되어 작동이 가능하며 배포할 준비가 되었습니다.
Python을 사용하여 이미지를 PDF로 변환하는 예제 출력
애플리케이션을 실행하면 두 개의 토글 스위치와 빈 필드가 있는 그래픽 인터페이스가 나타나며, 시각적 콘텐츠를 선택하라는 메시지가 표시됩니다.
“이미지 선택” 버튼을 클릭하면 사용자에게 원하는 이미지를 선택하라는 새 창이 나타납니다. 사용자는 원하는 수의 이미지를 원하는 조합으로 선택할 수 있습니다.
선호하는 시각적 콘텐츠를 선택하면 이에 대한 샘플 표현이 표시됩니다.
“PDF로 변환” 버튼을 클릭하면 사용자는 결과 PDF 문서의 파일 이름과 폴더 위치를 지정할 수 있습니다. 변환 프로세스가 완료되면 PDF가 지정된 경로에 성공적으로 저장되었음을 나타내는 메시지 상자가 표시됩니다. PDF 파일을 열면 프로그램이 변환하는 동안 이미지의 원본 크기를 유지했음을 보여줍니다.
애플리케이션을 향상시키기 위해 구현할 수 있는 PDF 작업
개발 중인 소프트웨어를 사용하면 PDF 파일의 병합, 압축, 보호 및 잠금 해제 등 다양한 작업을 수행할 수 있는 기능을 갖춘 포괄적인 PDF 애플리케이션을 만들 수 있습니다. 또한 이 애플리케이션에는 사용자가 PDF를 여러 페이지로 나누고, 회전하고, 특정 페이지를 삭제하고, 순서를 정렬하고, 페이지 번호를 추가할 수 있는 기능도 포함되어 있습니다.
또는 문서 또는 PowerPoint 프레젠테이션을 PDF(Portable Document Format)로 변환할 때 다양한 파일 형식을 시도해 볼 수 있습니다. 이 프로세스를 보다 실용적으로 만들어주는 PyPDF2, PDFMiner, fpdf 및 pdfrw와 같은 여러 소프트웨어 모듈을 사용할 수 있습니다.