From c57dc86cfb4256154312ee8efc949d3ca4391a1a Mon Sep 17 00:00:00 2001 From: "Jorj X. McKie" Date: Mon, 2 Oct 2023 06:39:36 -0400 Subject: [PATCH] Fixing #2703 (Discussion #2645) In some cases the matrix concatenation of TRM and CTM must be used to find the right font size. We previously only looked at TRM. --- fitz/helper-devices.i | 4 ++-- src/__init__.py | 4 ++-- src/extra.i | 4 ++-- tests/resources/test_2645_1.pdf | Bin 0 -> 18554 bytes tests/resources/test_2645_2.pdf | Bin 0 -> 13193 bytes tests/resources/test_2645_3.pdf | Bin 0 -> 13169 bytes tests/test_general.py | 15 +++++++++++++++ 7 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 tests/resources/test_2645_1.pdf create mode 100644 tests/resources/test_2645_2.pdf create mode 100644 tests/resources/test_2645_3.pdf diff --git a/fitz/helper-devices.i b/fitz/helper-devices.i index 949a70dac..7d9e92396 100644 --- a/fitz/helper-devices.i +++ b/fitz/helper-devices.i @@ -610,9 +610,9 @@ jm_trace_text_span(fz_context *ctx, PyObject *out, fz_text_span *span, int type, PyObject *chars = PyTuple_New(span->len); fz_matrix mat = fz_concat(span->trm, ctm); // text transformation matrix fz_point dir = fz_transform_vector(fz_make_point(1, 0), mat); // writing direction - dir = fz_normalize_vector(dir); + double fsize = sqrt(dir.x * dir.x + dir.y * dir.y); - double fsize = sqrt(fabs((double) span->trm.a * (double) span->trm.d)); // font size + dir = fz_normalize_vector(dir); double linewidth, adv, asc, dsc; double space_adv = 0; float x0, y0, x1, y1; diff --git a/src/__init__.py b/src/__init__.py index fcda0fbb1..970239096 100644 --- a/src/__init__.py +++ b/src/__init__.py @@ -17895,9 +17895,9 @@ def jm_trace_text_span(dev, span, type_, ctm, colorspace, color, alpha, seqno): mat = mupdf.fz_concat(span.trm(), ctm) # text transformation matrix dir = mupdf.fz_transform_vector(mupdf.fz_make_point(1, 0), mat) # writing direction - dir = mupdf.fz_normalize_vector(dir) + fsize = math.sqrt(dir.x * dir.x + dir.y * dir.y) # font size - fsize = math.sqrt(abs(span.trm().a * span.trm().d)) # font size + dir = mupdf.fz_normalize_vector(dir) space_adv = 0; asc = JM_font_ascender( span.font()) diff --git a/src/extra.i b/src/extra.i index 13a756530..f9ce90328 100644 --- a/src/extra.i +++ b/src/extra.i @@ -1997,9 +1997,9 @@ static void jm_trace_text_span( //double fsize = sqrt(fabs((double) span->trm.a * (double) span->trm.d)); fz_matrix mat = mupdf::ll_fz_concat(span->trm, ctm); // text transformation matrix fz_point dir = mupdf::ll_fz_transform_vector(mupdf::ll_fz_make_point(1, 0), mat); // writing direction - dir = mupdf::ll_fz_normalize_vector(dir); + double fsize = sqrt(dir.x * dir.x + dir.y * dir.y); // font size - double fsize = sqrt(fabs((double) span->trm.a * (double) span->trm.d)); // font size + dir = mupdf::ll_fz_normalize_vector(dir); // compute effective ascender / descender double asc = (double) JM_font_ascender(span->font); diff --git a/tests/resources/test_2645_1.pdf b/tests/resources/test_2645_1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5c177a094b1d76c531a370ce6794ea979c546a93 GIT binary patch literal 18554 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

5Xlgj9U;Z+h*UDt<53WVsAyoqF0 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 literal 0 HcmV?d00001 diff --git a/tests/resources/test_2645_2.pdf b/tests/resources/test_2645_2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0a9317a52d351c8e4a7bfbbf2443dc67333f51cf GIT binary patch literal 13193 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 literal 0 HcmV?d00001 diff --git a/tests/resources/test_2645_3.pdf b/tests/resources/test_2645_3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1990899885c1fb9ad9839cd3c0a617a80a25b91d GIT binary patch literal 13169 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