Skip to content

Commit 9e1b894

Browse files
Merge pull request #312 from chinapandaman/PPF-311
PPF-311: fix comb text field right align x coordinate math
2 parents ca2860b + 6d84be1 commit 9e1b894

File tree

3 files changed

+14
-9
lines changed

3 files changed

+14
-9
lines changed

PyPDFForm/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
PyPDFForm = Wrapper
88
PyPDFForm2 = WrapperV2
99

10-
__version__ = "1.1.7"
10+
__version__ = "1.1.8"

PyPDFForm/core/template.py

+13-8
Original file line numberDiff line numberDiff line change
@@ -355,18 +355,22 @@ def assign_uuid(self, pdf: bytes) -> bytes:
355355
return Utils().generate_stream(pdf_file)
356356

357357
@staticmethod
358-
def get_character_x_paddings(
359-
element: "pdfrw.PdfDict", element_middleware: "ElementMiddleware"
360-
) -> List[float]:
361-
"""Returns paddings between characters for combed text fields."""
358+
def get_char_rect_width(element: "pdfrw.PdfDict", element_middleware: "ElementMiddleware") -> float:
359+
"""Returns rectangular width of each character for combed text fields."""
362360

363361
rect_width = abs(
364362
float(element[TemplateCoreConstants().annotation_rectangle_key][0])
365363
- float(element[TemplateCoreConstants().annotation_rectangle_key][2])
366364
)
367-
length = min(len(element_middleware.value or ""), element_middleware.max_length)
365+
return rect_width / element_middleware.max_length
366+
367+
def get_character_x_paddings(
368+
self, element: "pdfrw.PdfDict", element_middleware: "ElementMiddleware"
369+
) -> List[float]:
370+
"""Returns paddings between characters for combed text fields."""
368371

369-
char_rect_width = rect_width / element_middleware.max_length
372+
length = min(len(element_middleware.value or ""), element_middleware.max_length)
373+
char_rect_width = self.get_char_rect_width(element, element_middleware)
370374

371375
result = []
372376

@@ -384,9 +388,8 @@ def get_character_x_paddings(
384388

385389
return result
386390

387-
@staticmethod
388391
def get_draw_text_coordinates_v2(
389-
element: "pdfrw.PdfDict", element_middleware: "ElementMiddleware"
392+
self, element: "pdfrw.PdfDict", element_middleware: "ElementMiddleware"
390393
) -> Tuple[Union[float, int], Union[float, int]]:
391394
"""Returns coordinates to draw text at given a PDF form text element."""
392395

@@ -425,6 +428,8 @@ def get_draw_text_coordinates_v2(
425428
float(element[TemplateCoreConstants().annotation_rectangle_key][2])
426429
- string_width
427430
)
431+
if length > 0 and element_middleware.comb is True:
432+
x -= (self.get_char_rect_width(element, element_middleware) - stringWidth(element_middleware.value[-1], element_middleware.font, element_middleware.font_size)) / 2
428433

429434
string_height = element_middleware.font_size * 96 / 72
430435
height_mid_point = (

0 commit comments

Comments
 (0)