I have a PDF with a page size/dimension of 36 x 24 in. I would like to convert the PDF in JP2000 at 300 dpi.
I use the code below but for some reason dpi are always set to 72 dpi. Do you know what I am doing wrong?
from pdf2image import convert_from_path
from PIL import Image
import tempfile
import os
import pypdf
from pypdf import PdfReader
def get_pdf_page_size(pdf_path):
with open(pdf_path, 'rb') as f:
reader = pypdf.PdfReader(f)
page = reader.pages[0]
width = page.mediabox.width
height = page.mediabox.height
return width, height
def pdf_to_jp2(pdf_path, output_folder, dpi=300):
# Get PDF page size
pdf_width, pdf_height = get_pdf_page_size(pdf_path)
print(pdf_width, pdf_height)
# Convert PDF to PIL images
images = convert_from_path(pdf_path, dpi=dpi, size=(int(pdf_width), int(pdf_height)))
# Create output folder if it doesn't exist
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# Save each image as JP2 with the same dimensions as original PDF
for i, image in enumerate(images):
# Resize the image to match PDF dimensions
#jp2_image = image.resize((int(pdf_width), int(pdf_height)), resample=Image.LANCZOS)
# Save as JP2
jp2_path = os.path.join(output_folder, f'pz_{i+1}.jp2')
#jp2_image.save(jp2_path, 'JPEG2000', dpi=(dpi, dpi))
image.save(jp2_path, 'JPEG2000', dpi=(dpi, dpi))
print("Conversion complete.")
# Example usage:
pdf_file_path = r'C:gisp2023jp2pdfa1A203.pdf'
output_folder = r'C:gisp2023jp2pdfa1'
pdf_to_jp2(pdf_file_path, output_folder)