import base64
import io
import os
import pypdfium2 as pdfium
from openai import OpenAI
client = OpenAI(
api_key=os.environ["IONOS_API_TOKEN"],
base_url="https://openai.inference.de-txl.ionos.com/v1",
)
def pdf_page_to_base64(pdf_path: str, page_index: int, scale: float = 2.0) -> str:
doc = pdfium.PdfDocument(pdf_path)
bitmap = doc[page_index].render(scale=scale)
buf = io.BytesIO()
bitmap.to_pil().save(buf, format="PNG")
return base64.b64encode(buf.getvalue()).decode()
def extract_pdf(pdf_path: str, model: str) -> str:
doc = pdfium.PdfDocument(pdf_path)
parts = []
for i in range(len(doc)):
image_b64 = pdf_page_to_base64(pdf_path, i)
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{image_b64}"},
}
],
}
],
max_tokens=4096,
temperature=0.0,
)
parts.append(f"--- Page {i + 1} ---\n\n{response.choices[0].message.content}")
return "\n\n".join(parts)
print(extract_pdf("document.pdf", model="lightonai/LightOnOCR-2-1B"))