Problem
Page 1 of GENERAL SERVICES.pptx (#1220) is a bottom-anchored ctrTitle
placeholder holding one hard-broken 50pt Gill Sans MT paragraph at
<a:lnSpc><a:spcPct val="125000"/>. Its line advance matches a native
PowerPoint export, but the whole two-line block seats 6.85pt above it: our
block reserves 6.73pt more space below its last baseline than PowerPoint does,
and the bottom anchor pushes the excess upward.
No font substitution is involved — pdffonts reports GillSansMT-Bold
embedded on page 1 of both PDFs.
Measurement
mutool draw -F trace, page 1, in points from the page top:
| Quantity |
native PowerPoint |
office2pdf |
delta |
GENERAL SERVICES baseline |
234.960 |
228.114 |
-6.846 |
MARKETING PLAN baseline |
309.840 |
303.114 |
-6.726 |
| advance between them |
74.880 |
75.000 |
+0.120 |
| box bottom - last baseline |
15.874 |
22.600 |
+6.726 |
The advance is 1.25 x 1.2 x 50pt = 75.00pt, and the export's 74.88 is that
value on its 0.24pt device grid — so the pacing model is right and only the
reserve below the last baseline is wrong.
Subtracting the default bIns of 3.6pt, the descent below the last baseline is
12.274pt native (0.2455em at 50pt) against our 19.000pt (0.3800em). A fix
session should measure whether the spcPct percentage is reaching that descent;
A native one-factor probe already recorded for this project found that
<a:lnSpc><a:spcPct> resizes a line from the top and leaves the descent
below the baseline unchanged.
Source
ppt/slides/slide1.xml, <p:sp> id 2 (<p:ph type="ctrTitle"/>),
<a:off y="2008518"/> <a:ext cy="2128049"/> — box top 158.152pt, height
167.563pt, bottom 325.714pt:
<a:pPr><a:lnSpc><a:spcPct val="125000"/></a:lnSpc></a:pPr>
<a:r><a:rPr lang="en-US" sz="5000"/><a:t>GENERAL SERVICES</a:t></a:r>
<a:br><a:rPr lang="en-US" sz="5000"/></a:br>
<a:r><a:rPr lang="en-US" sz="5000"/><a:t>MARKETING PLAN</a:t></a:r>
<a:endParaRPr lang="en-US" sz="5000"/>
ppt/slideLayouts/slideLayout1.xml gives the placeholder
<a:bodyPr anchor="b"/> and <a:lvl1pPr algn="ctr"><a:lnSpc><a:spcPct val="125000"/></a:lnSpc><a:defRPr sz="6000">.
Reproduction
- Input: GENERAL SERVICES.pptx (SHA-256
17924ec3b27646a2c1b2bb711b845360b713cc7052b3cdde9df752f9ceded3a9), page 1.
- Reference: the cached native PowerPoint 16.113.1 export, SHA-256
adec062605a45f1b6884252e9f4e199dee2da029e975845c258f4a7c38c820e1, or a fresh
osascript scripts/macos/export_powerpoint_pdfs.applescript <out> native <staged.pptx>
from inside ~/Library/Containers/com.microsoft.Powerpoint/Data/probes/.
python3 scripts/compare_layout.py --audit --fine-shift 0.12 gt.pdf out.pdf
on the page-1 extract.
Expected
The bottom-anchored block reserves PowerPoint's descent below its last
baseline, so both title baselines land within the export's 0.24pt quantum.
Actual
Both baselines sit 6.7-6.9pt high because the reserve below the last baseline is
6.73pt too large.
Note on provenance
Found while fixing #1666, which corrected the style a <a:br> contributes to
the line it ends. Before that fix this page read -6.18pt rather than -6.85pt:
the break carried the layout's 60pt <a:defRPr> and its oversized box happened
to cancel 0.67pt of this deviation. The advance was, and remains, correct.
Following the precedent of #1862, this is filed from trace measurements rather
than a compare.jpg; a fix PR should add the side-by-side image the visual
contract asks for.
Related: #1220, #1666, #1254
Problem
Page 1 of
GENERAL SERVICES.pptx(#1220) is a bottom-anchoredctrTitleplaceholder holding one hard-broken 50pt Gill Sans MT paragraph at
<a:lnSpc><a:spcPct val="125000"/>. Its line advance matches a nativePowerPoint export, but the whole two-line block seats 6.85pt above it: our
block reserves 6.73pt more space below its last baseline than PowerPoint does,
and the bottom anchor pushes the excess upward.
No font substitution is involved —
pdffontsreportsGillSansMT-Boldembedded on page 1 of both PDFs.
Measurement
mutool draw -F trace, page 1, in points from the page top:GENERAL SERVICESbaselineMARKETING PLANbaselineThe advance is
1.25 x 1.2 x 50pt = 75.00pt, and the export's 74.88 is thatvalue on its 0.24pt device grid — so the pacing model is right and only the
reserve below the last baseline is wrong.
Subtracting the default
bInsof 3.6pt, the descent below the last baseline is12.274pt native (0.2455em at 50pt) against our 19.000pt (0.3800em). A fix
session should measure whether the
spcPctpercentage is reaching that descent;A native one-factor probe already recorded for this project found that
<a:lnSpc><a:spcPct>resizes a line from the top and leaves the descentbelow the baseline unchanged.
Source
ppt/slides/slide1.xml,<p:sp>id 2 (<p:ph type="ctrTitle"/>),<a:off y="2008518"/><a:ext cy="2128049"/>— box top 158.152pt, height167.563pt, bottom 325.714pt:
ppt/slideLayouts/slideLayout1.xmlgives the placeholder<a:bodyPr anchor="b"/>and<a:lvl1pPr algn="ctr"><a:lnSpc><a:spcPct val="125000"/></a:lnSpc><a:defRPr sz="6000">.Reproduction
17924ec3b27646a2c1b2bb711b845360b713cc7052b3cdde9df752f9ceded3a9), page 1.adec062605a45f1b6884252e9f4e199dee2da029e975845c258f4a7c38c820e1, or a freshosascript scripts/macos/export_powerpoint_pdfs.applescript <out> native <staged.pptx>from inside
~/Library/Containers/com.microsoft.Powerpoint/Data/probes/.python3 scripts/compare_layout.py --audit --fine-shift 0.12 gt.pdf out.pdfon the page-1 extract.
Expected
The bottom-anchored block reserves PowerPoint's descent below its last
baseline, so both title baselines land within the export's 0.24pt quantum.
Actual
Both baselines sit 6.7-6.9pt high because the reserve below the last baseline is
6.73pt too large.
Note on provenance
Found while fixing #1666, which corrected the style a
<a:br>contributes tothe line it ends. Before that fix this page read -6.18pt rather than -6.85pt:
the break carried the layout's 60pt
<a:defRPr>and its oversized box happenedto cancel 0.67pt of this deviation. The advance was, and remains, correct.
Following the precedent of #1862, this is filed from trace measurements rather
than a
compare.jpg; a fix PR should add the side-by-side image the visualcontract asks for.
Related: #1220, #1666, #1254