From 58b06352516efd75dadd2756dc943be5fc861847 Mon Sep 17 00:00:00 2001 From: charles Date: Thu, 26 Dec 2024 01:14:17 +0000 Subject: [PATCH] Fix: fix text position after translate --- pdf2zh/pdfinterp.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pdf2zh/pdfinterp.py b/pdf2zh/pdfinterp.py index 62ff4ed3..bca8f34b 100644 --- a/pdf2zh/pdfinterp.py +++ b/pdf2zh/pdfinterp.py @@ -269,8 +269,12 @@ def process_page(self, page: PDFPage) -> None: self.device.fontmap = self.fontmap ops_new = self.device.end_page(page) # 上面渲染的时候会根据 cropbox 减掉页面偏移得到真实坐标,这里输出的时候需要用 cm 把页面偏移加回来 + # 文字调整过后的位置是以经过 cm 变换后的坐标系为准的,所以需要把 cm 的变换加回去 + # 上面的 ctm 会在 render_contents 里面与 cm 进行计算,所以这里直接使用 self.ctm 的值 + (a, b, c, d, e, f) = self.ctm self.obj_patch[page.page_xref] = ( - f"q {ops_base}Q 1 0 0 1 {x0} {y0} cm {ops_new}" # ops_base 里可能有图,需要让 ops_new 里的文字覆盖在上面,使用 q/Q 重置位置矩阵 + f"q {ops_base}Q {a} 0 0 {d} {-e if a > 0 else e} {-f if d > 0 else f} cm {ops_new}" + # ops_base 里可能有图,需要让 ops_new 里的文字覆盖在上面,使用 q/Q 重置位置矩阵 ) for obj in page.contents: self.obj_patch[obj.objid] = ""