75 lines
2.3 KiB
Python
75 lines
2.3 KiB
Python
# SPDX-FileCopyrightText: 2023-2025 James R. Barlow
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
"""Simple CLI for testing HOCR to PDF conversion using fpdf2 renderer."""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
from ocrmypdf.font import MultiFontManager
|
|
from ocrmypdf.fpdf_renderer import DebugRenderOptions, Fpdf2PdfRenderer
|
|
from ocrmypdf.hocrtransform.hocr_parser import HocrParser
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description='Convert hocr file to PDF')
|
|
parser.add_argument(
|
|
'-b',
|
|
'--boundingboxes',
|
|
action="store_true",
|
|
default=False,
|
|
help='Show bounding boxes borders (debug mode)',
|
|
)
|
|
parser.add_argument(
|
|
'-r',
|
|
'--resolution',
|
|
type=int,
|
|
default=300,
|
|
help='Resolution of the image that was OCRed',
|
|
)
|
|
parser.add_argument(
|
|
'-i',
|
|
'--image',
|
|
default=None,
|
|
help='Path to the image to be placed above the text (not yet supported)',
|
|
)
|
|
parser.add_argument('hocrfile', help='Path to the hocr file to be parsed')
|
|
parser.add_argument('outputfile', help='Path to the PDF file to be generated')
|
|
args = parser.parse_args()
|
|
|
|
# Parse hOCR file
|
|
hocr_parser = HocrParser(args.hocrfile)
|
|
ocr_page = hocr_parser.parse()
|
|
|
|
# Use DPI from hOCR if available, otherwise use command-line resolution
|
|
dpi = ocr_page.dpi or args.resolution
|
|
|
|
# Setup debug render options if requested
|
|
debug_options = None
|
|
if args.boundingboxes:
|
|
debug_options = DebugRenderOptions(
|
|
render_line_bbox=True,
|
|
render_word_bbox=True,
|
|
render_baseline=True,
|
|
)
|
|
|
|
# Create multi-font manager with default font directory
|
|
font_dir = Path(__file__).parent.parent / "data"
|
|
multi_font_manager = MultiFontManager(font_dir)
|
|
|
|
# Render to PDF using fpdf2
|
|
renderer = Fpdf2PdfRenderer(
|
|
page=ocr_page,
|
|
dpi=dpi,
|
|
multi_font_manager=multi_font_manager,
|
|
invisible_text=not args.boundingboxes, # Visible text in debug mode
|
|
debug_render_options=debug_options,
|
|
)
|
|
renderer.render(Path(args.outputfile))
|
|
|
|
if args.image:
|
|
print(
|
|
f"Warning: Image overlay (--image {args.image}) is not yet supported "
|
|
"with the fpdf2 renderer."
|
|
)
|