Files
OCRmyPDF/src/ocrmypdf/hocrtransform/backends/reportlab.py
T
2023-11-19 23:51:27 -08:00

83 lines
2.5 KiB
Python

from __future__ import annotations
import os
import warnings
from pathlib import Path
with warnings.catch_warnings():
# reportlab uses deprecated load_module
# shim can be removed when we require reportlab >= 3.7
warnings.filterwarnings(
'ignore', category=DeprecationWarning, message=r".*load_module.*"
)
from reportlab.lib.colors import black, cyan, green, magenta, red
from reportlab.lib.units import inch
from reportlab.pdfgen.canvas import Canvas
from reportlab.pdfgen.textobject import PDFTextObject
from ocrmypdf.hocrtransform.backends._base import Canvas as BaseCanvas
from ocrmypdf.hocrtransform.backends._base import Text as BaseText
class ReportlabCanvas(BaseCanvas):
def __init__(self, path, *, page_size):
super().__init__(path, page_size=page_size)
self._canvas = Canvas(os.fspath(path), pagesize=page_size, pageCompression=1)
def set_stroke_color(self, color):
self._canvas.setStrokeColor(color)
def set_fill_color(self, color):
self._canvas.setFillColor(color)
def set_line_width(self, width):
self._canvas.setLineWidth(width)
def line(self, x1, y1, x2, y2):
self._canvas.line(x1, y1, x2, y2)
def begin_text(self, x=0, y=0, direction=None):
return ReportlabText(self._canvas.beginText(x, y, direction))
def draw_text(self, text):
self._canvas.drawText(text._text)
def draw_image(self, image: Path, x, y, width, height):
self._canvas.drawImage(os.fspath(image), x, y, width, height)
def string_width(self, text, fontname, fontsize):
return self._canvas.stringWidth(text, fontname, fontsize)
def set_dashes(self, dashes):
self._canvas.setDash(*dashes)
def save(self):
self._canvas.showPage()
self._canvas.save()
class ReportlabText(BaseText):
def __init__(self, text: PDFTextObject):
self._text = text
def set_font(self, font, size):
self._text.setFont(font, size)
def set_render_mode(self, mode):
self._text.setTextRenderMode(mode)
def set_text_transform(self, a, b, c, d, e, f):
return self._text.setTextTransform(a, b, c, d, e, f)
def show(self, text):
return self._text.textOut(text)
def set_horiz_scale(self, scale):
return self._text.setHorizScale(scale)
def get_start_of_line(self):
return self._text.getStartOfLine()
def move_cursor(self, x, y):
return self._text.moveCursor(x, y)