Skip to content

Incorrect linewidth in elements returned by Page.get_texttrace() #4902

@6ftffyq3

Description

@6ftffyq3

Description of the bug

For text span type 1 (stroked) or 2 ("artificial" bold), the linewidth attribute of the corresponding elements returned by Page.get_texttrace() is always fixed to 0.05 * size (font size), regardless of the width of the stroke specified.

Here is an example PDF:
test.pdf

In the example PDF, the first text span is of type 2, which has two elements of type 0 and 1 in the list returned by Page.get_texttrace(). However, even though the width of stoke is defined by 2 Tr .4 w, the linewidth is fixed to 0.6 instead, which is 0.05 * size. I have verified that PDF viewers respect changes in the stoke width, but PyMuPDF always reports the same linewidth.

How to reproduce the bug

Open the PDF in PyMuPDF, call get_texttrace() on the first page. Below are the first two elements of the trace list:

trace[0]:

{'dir': (1.0, 0.0),
 'font': 'Fsnfu0',
 'wmode': 0,
 'flags': 4,
 'bidi_lvl': 0,
 'bidi_dir': 2,
 'ascender': 0.9390000104904175,
 'descender': -0.28200000524520874,
 'colorspace': 3,
 'color': (0.09997711330652237, 0.09997711330652237, 0.09997711330652237),
 'size': 12.0,
 'opacity': 1.0,
 'linewidth': 0.6000000000000001,
 'spacewidth': 2.4375,
 'type': 0,
 'bbox': (72.0250015258789,
          74.05152893066406,
          211.11915588378906,
          86.05152893066406),
 'layer': '',
 'seqno': 0,
 'chars': ((48,
            847,
            (72.0250015258789, 83.280029296875),
            (72.0250015258789,
             74.05152893066406,
             78.4351577758789,
             86.05152893066406)),
           (49,
            848,
            (78.51699829101562, 83.280029296875),
            (78.51699829101562,
             74.05152893066406,
             84.92715454101562,
             86.05152893066406)),
           (50,
            849,
            (85.00899505615234, 83.280029296875),
            (85.00899505615234,
             74.05152893066406,
             91.41915130615234,
             86.05152893066406)),
           (51,
            850,
            (91.50099182128906, 83.280029296875),
            (91.50099182128906,
             74.05152893066406,
             97.91114807128906,
             86.05152893066406)),
           (65,
            1,
            (97.99298858642578, 83.280029296875),
            (97.99298858642578,
             74.05152893066406,
             105.06525421142578,
             86.05152893066406)),
           (66,
            26,
            (104.9889907836914, 83.280029296875),
            (104.9889907836914,
             74.05152893066406,
             112.2370376586914,
             86.05152893066406)),
           (67,
            28,
            (112.23699188232422, 83.280029296875),
            (112.23699188232422,
             74.05152893066406,
             120.54558563232422,
             86.05152893066406)),
           (68,
            34,
            (120.49299621582031, 83.280029296875),
            (120.49299621582031,
             74.05152893066406,
             128.7254180908203,
             86.05152893066406)),
           (97,
            205,
            (128.72499084472656, 83.280029296875),
            (128.72499084472656,
             74.05152893066406,
             135.09999084472656,
             86.05152893066406)),
           (98,
            230,
            (134.98898315429688, 83.280029296875),
            (134.98898315429688,
             74.05152893066406,
             141.72140502929688,
             86.05152893066406)),
           (99,
            232,
            (141.72097778320312, 83.280029296875),
            (141.72097778320312,
             74.05152893066406,
             148.01980590820312,
             86.05152893066406)),
           (100,
            238,
            (148.02098083496094, 83.280029296875),
            (148.02098083496094,
             74.05152893066406,
             154.74754333496094,
             86.05152893066406)),
           (96,
            1244,
            (154.7529754638672, 83.280029296875),
            (154.7529754638672,
             74.05152893066406,
             161.3740692138672,
             86.05152893066406)),
           (126,
            1145,
            (161.4729766845703, 83.280029296875),
            (161.4729766845703,
             74.05152893066406,
             167.8831329345703,
             86.05152893066406)),
           (33,
            996,
            (167.96498107910156, 83.280029296875),
            (167.96498107910156,
             74.05152893066406,
             171.48060607910156,
             86.05152893066406)),
           (64,
            1068,
            (171.48098754882812, 83.280029296875),
            (171.48098754882812,
             74.05152893066406,
             182.21536254882812,
             86.05152893066406)),
           (35,
            1005,
            (181.968994140625, 83.280029296875),
            (181.968994140625,
             74.05152893066406,
             188.414306640625,
             86.05152893066406)),
           (36,
            1097,
            (188.46099853515625, 83.280029296875),
            (188.46099853515625,
             74.05152893066406,
             194.87115478515625,
             86.05152893066406)),
           (37,
            1159,
            (194.9530029296875, 83.280029296875),
            (194.9530029296875,
             74.05152893066406,
             204.8670654296875,
             86.05152893066406)),
           (94,
            1147,
            (204.70899963378906, 83.280029296875),
            (204.70899963378906,
             74.05152893066406,
             211.11915588378906,
             86.05152893066406)))}

trace[1]:

{'dir': (1.0, 0.0),
 'font': 'Fsnfu0',
 'wmode': 0,
 'flags': 4,
 'bidi_lvl': 0,
 'bidi_dir': 2,
 'ascender': 0.9390000104904175,
 'descender': -0.28200000524520874,
 'colorspace': 3,
 'color': (0.5999389886856079, 0.6000305414199829, 0.5999237298965454),
 'size': 12.0,
 'opacity': 1.0,
 'linewidth': 0.6000000000000001,
 'spacewidth': 2.4375,
 'type': 1,
 'bbox': (72.0250015258789,
          74.05152893066406,
          211.11915588378906,
          86.05152893066406),
 'layer': '',
 'seqno': 1,
 'chars': ((48,
            847,
            (72.0250015258789, 83.280029296875),
            (72.0250015258789,
             74.05152893066406,
             78.4351577758789,
             86.05152893066406)),
           (49,
            848,
            (78.51699829101562, 83.280029296875),
            (78.51699829101562,
             74.05152893066406,
             84.92715454101562,
             86.05152893066406)),
           (50,
            849,
            (85.00899505615234, 83.280029296875),
            (85.00899505615234,
             74.05152893066406,
             91.41915130615234,
             86.05152893066406)),
           (51,
            850,
            (91.50099182128906, 83.280029296875),
            (91.50099182128906,
             74.05152893066406,
             97.91114807128906,
             86.05152893066406)),
           (65,
            1,
            (97.99298858642578, 83.280029296875),
            (97.99298858642578,
             74.05152893066406,
             105.06525421142578,
             86.05152893066406)),
           (66,
            26,
            (104.9889907836914, 83.280029296875),
            (104.9889907836914,
             74.05152893066406,
             112.2370376586914,
             86.05152893066406)),
           (67,
            28,
            (112.23699188232422, 83.280029296875),
            (112.23699188232422,
             74.05152893066406,
             120.54558563232422,
             86.05152893066406)),
           (68,
            34,
            (120.49299621582031, 83.280029296875),
            (120.49299621582031,
             74.05152893066406,
             128.7254180908203,
             86.05152893066406)),
           (97,
            205,
            (128.72499084472656, 83.280029296875),
            (128.72499084472656,
             74.05152893066406,
             135.09999084472656,
             86.05152893066406)),
           (98,
            230,
            (134.98898315429688, 83.280029296875),
            (134.98898315429688,
             74.05152893066406,
             141.72140502929688,
             86.05152893066406)),
           (99,
            232,
            (141.72097778320312, 83.280029296875),
            (141.72097778320312,
             74.05152893066406,
             148.01980590820312,
             86.05152893066406)),
           (100,
            238,
            (148.02098083496094, 83.280029296875),
            (148.02098083496094,
             74.05152893066406,
             154.74754333496094,
             86.05152893066406)),
           (96,
            1244,
            (154.7529754638672, 83.280029296875),
            (154.7529754638672,
             74.05152893066406,
             161.3740692138672,
             86.05152893066406)),
           (126,
            1145,
            (161.4729766845703, 83.280029296875),
            (161.4729766845703,
             74.05152893066406,
             167.8831329345703,
             86.05152893066406)),
           (33,
            996,
            (167.96498107910156, 83.280029296875),
            (167.96498107910156,
             74.05152893066406,
             171.48060607910156,
             86.05152893066406)),
           (64,
            1068,
            (171.48098754882812, 83.280029296875),
            (171.48098754882812,
             74.05152893066406,
             182.21536254882812,
             86.05152893066406)),
           (35,
            1005,
            (181.968994140625, 83.280029296875),
            (181.968994140625,
             74.05152893066406,
             188.414306640625,
             86.05152893066406)),
           (36,
            1097,
            (188.46099853515625, 83.280029296875),
            (188.46099853515625,
             74.05152893066406,
             194.87115478515625,
             86.05152893066406)),
           (37,
            1159,
            (194.9530029296875, 83.280029296875),
            (194.9530029296875,
             74.05152893066406,
             204.8670654296875,
             86.05152893066406)),
           (94,
            1147,
            (204.70899963378906, 83.280029296875),
            (204.70899963378906,
             74.05152893066406,
             211.11915588378906,
             86.05152893066406)))}

Both of them report the linewidth as 0.6, but at least the type 1 span should report linewidth 0.4.

PyMuPDF version

1.27.1

Operating system

Windows

Python version

3.13

Metadata

Metadata

Assignees

Labels

upstream bugbug outside this package

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions