💄(export) improve heading line height

Import heading line height mapping for PDF export
to match the one used in the doc.
This commit is contained in:
Anthony LC
2026-01-28 11:11:28 +01:00
parent 4588c71e8a
commit 235c1828e6
3 changed files with 59 additions and 53 deletions

View File

@@ -192,10 +192,10 @@ endobj
(react-pdf)
endobj
55 0 obj
(D:20260120141652Z)
(D:20260128100716Z)
endobj
56 0 obj
(chromium-1944-0-doc-export-override-content)
(chromium-8039-0-doc-export-override-content)
endobj
52 0 obj
<<
@@ -216,7 +216,7 @@ endobj
58 0 obj
<<
/Type /FontDescriptor
/FontName /NRSKJK+Inter18pt-Regular
/FontName /FDAZSC+Inter18pt-Regular
/Flags 4
/FontBBox [-742.1875 -323.242187 2579.589844 1109.375]
/ItalicAngle 0
@@ -232,7 +232,7 @@ endobj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /NRSKJK+Inter18pt-Regular
/BaseFont /FDAZSC+Inter18pt-Regular
/CIDSystemInfo <<
/Registry (Adobe)
/Ordering (Identity)
@@ -247,7 +247,7 @@ endobj
<<
/Type /Font
/Subtype /Type0
/BaseFont /NRSKJK+Inter18pt-Regular
/BaseFont /FDAZSC+Inter18pt-Regular
/Encoding /Identity-H
/DescendantFonts [59 0 R]
/ToUnicode 60 0 R
@@ -256,7 +256,7 @@ endobj
62 0 obj
<<
/Type /FontDescriptor
/FontName /XTJBQL+Inter18pt-Bold
/FontName /UEJHFC+Inter18pt-Bold
/Flags 4
/FontBBox [-790.527344 -334.472656 2580.566406 1114.746094]
/ItalicAngle 0
@@ -272,7 +272,7 @@ endobj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /XTJBQL+Inter18pt-Bold
/BaseFont /UEJHFC+Inter18pt-Bold
/CIDSystemInfo <<
/Registry (Adobe)
/Ordering (Identity)
@@ -287,7 +287,7 @@ endobj
<<
/Type /Font
/Subtype /Type0
/BaseFont /XTJBQL+Inter18pt-Bold
/BaseFont /UEJHFC+Inter18pt-Bold
/Encoding /Identity-H
/DescendantFonts [63 0 R]
/ToUnicode 64 0 R
@@ -296,7 +296,7 @@ endobj
66 0 obj
<<
/Type /FontDescriptor
/FontName /EDRVHV+Inter18pt-Italic
/FontName /EUMTON+Inter18pt-Italic
/Flags 68
/FontBBox [-747.558594 -323.242187 2595.703125 1109.375]
/ItalicAngle -9.398804
@@ -312,7 +312,7 @@ endobj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /EDRVHV+Inter18pt-Italic
/BaseFont /EUMTON+Inter18pt-Italic
/CIDSystemInfo <<
/Registry (Adobe)
/Ordering (Identity)
@@ -327,7 +327,7 @@ endobj
<<
/Type /Font
/Subtype /Type0
/BaseFont /EDRVHV+Inter18pt-Italic
/BaseFont /EUMTON+Inter18pt-Italic
/Encoding /Identity-H
/DescendantFonts [67 0 R]
/ToUnicode 68 0 R
@@ -336,7 +336,7 @@ endobj
70 0 obj
<<
/Type /FontDescriptor
/FontName /JIDLHQ+GeistMono-Regular
/FontName /HIJACG+GeistMono-Regular
/Flags 5
/FontBBox [-1738 -247 654 1012]
/ItalicAngle 0
@@ -352,7 +352,7 @@ endobj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /JIDLHQ+GeistMono-Regular
/BaseFont /HIJACG+GeistMono-Regular
/CIDSystemInfo <<
/Registry (Adobe)
/Ordering (Identity)
@@ -367,7 +367,7 @@ endobj
<<
/Type /Font
/Subtype /Type0
/BaseFont /JIDLHQ+GeistMono-Regular
/BaseFont /HIJACG+GeistMono-Regular
/Encoding /Identity-H
/DescendantFonts [71 0 R]
/ToUnicode 72 0 R
@@ -376,7 +376,7 @@ endobj
74 0 obj
<<
/Type /FontDescriptor
/FontName /SELAIX+Inter18pt-BoldItalic
/FontName /IKVFNP+Inter18pt-BoldItalic
/Flags 68
/FontBBox [-795.898437 -334.472656 2596.191406 1114.746094]
/ItalicAngle -9.398804
@@ -392,7 +392,7 @@ endobj
<<
/Type /Font
/Subtype /CIDFontType2
/BaseFont /SELAIX+Inter18pt-BoldItalic
/BaseFont /IKVFNP+Inter18pt-BoldItalic
/CIDSystemInfo <<
/Registry (Adobe)
/Ordering (Identity)
@@ -407,7 +407,7 @@ endobj
<<
/Type /Font
/Subtype /Type0
/BaseFont /SELAIX+Inter18pt-BoldItalic
/BaseFont /IKVFNP+Inter18pt-BoldItalic
/Encoding /Identity-H
/DescendantFonts [75 0 R]
/ToUnicode 76 0 R
@@ -692,21 +692,24 @@ endstream
endobj
6 0 obj
<<
/Length 1381
/Length 1393
/Filter /FlateDecode
>>
stream
xœíËnÜ6ð®¯à¾<>À‡¤m€
¤6ÐC<EFBFBD>C"ÛMm€Ö€ûû<C3BB>áCÒj¹»*°©³®-SšGÃá¼H<C2BC>Ptm€nÁ€ Q)°¢ßv mù¿tT¤(±`'€tûꇻÇ?ú»_ß½ýC§ÅCÿµ{õîÄï4êý8²!Û›×Y× ¸¹ï>¼V„¤†Ôti†š¥æ®Dp2QN &Ä+<2B>ZF´>@Bø+zs<7A>Ö|„+¡>Š›Ÿ»oH¼*€µÒ è‰ö>É^¯…¢¬— U<>
+r¡*©ŒíÑš¨ :åƒJ.qŽpîlÕÍI<C38D>BVâ&Jô^“TæX¬:jÄP}*ÄŸ›ª略`iINë6T©ZfçI?þÛ<E280BA>Ϋ¥¾­%íØ<C3AD>¢÷k´dTËäBKMZ:_5Âz¨ œ * JSýënÏ6ƒÛù#É£¢ðÎxeC@6Ö8ýÔºÓ
Ü“ìßxu ùδ@¤ÛìøËUªŪõªÔ·íET·bÑü÷Pmsz¬h¡]\3¹Ø ÓôòE±íèÅ(†ü˜n=#ÀäzÎï=<3D>L]é1ÝúÄqH÷ÚúîK÷ø:—E ËÖž”8<E2809D>Ô1ÑQ<C391>ÍÂõ<E28099>>Q±¬dï £i†üxìµáÎð€óÄd(`ÔuX—‡1»`H&~<03><1D>HàÐñˆfúq£» 8UqÌfÈ ³.ê<C383>^ÁÀã4·<34>ô”~ðm¥Èì˜ç‘f`&ø’»e
PæÛsõ_Ÿ9æPpKíŽK­fx]žó=w t©«ÖQzg]¡Äê™ é2ÁK¤n߬~ƒ¨ž<C2A8>×ÊV“rbc#¿ÛYZK¾ ™€oC§<43>°V¶+ËØ€•€9Œ¶ùâ„GœpÄoçøõŸÉ¶ý4J§U°ÍÜÖòSƒÇóÛe§otãäH8ÌÂ)aRá½åøf:ŒÐòÙwz¤Ù‡O¦Î¼‡Z>ç4jZ>køšË|ˆrÍlfK÷öšk`Þ<C39E>Û1
™+0×oéœø»»î>|$Ö·EñSñÈ{˜a?2í S;—± +¶Õ¥26-Wkšž³Rƒ1vM]¬áDéxÙ®¥Í3Êð9UsÂÑš@—2­4<C2AD>”Ë3à %¸ F%<12>W<EFBFBD>q\ xtB{—<>ÇÎ(Ì I¹:Ñ9ÚNmlrPGÓÜXpÂ¥l«˜µC"¢È@P#Î…Lg,³Nc mî?£9§· ¿µÉÒ0P$L8šéÊLЫ<;ZôŠÓôÎD§S1êæÒîêó3ê<00>["ÄT͉} :¦÷JcCäÓ­UiW»g<C2BB>vuX±g~ÚI0¾]CI¥£:}¬ÇG43Â'ž%3ðÙ ”Z1^ °´óÇòÓJ[?˾¸8h6 Ó1jÕ<6A>Ë+P$p&˜f$ر·Cø?·žv¹@ x»Öxôњ䲃ª±'rÆwáío%NZÚ“ê“_<E2809C>È`æ„O<—>;…šW ῌža¤_iÿÇ<C3BF>â_ är ¤ #JHeíZ9õ9ã²C¤<43>N<EFBFBD>ˤ¶m¸$Î1Šr:²ÄœúÝÏGX½Ç$£N#xóZ‡Whùì«àCvu³[u¿÷½=8ôƪ¨4E°üQsŽWTí)À9½ß9àÙ )³- ý/<2F>%Ùæž ӟφ̡= 9lTk=Æzû¬=&†Ö)U±\uíxOÁ ÜÌŽªöyÆ­Á¤#£Êb÷<>%<25>ZûÀt[n<>SŸSi{¶¢6>†ÅÃǰ“<ÛCïPÉgõñž¯Tð©Ÿ
xœíËnÜ6ð®¯àá›@àCÒ6@Rè!È!í¦€6@kÀýýÎ II+q³*°©µeJ³Ãáh8œ)
¯à-Z<>1)NôûîÏr€0ŽþKGE*¡¥.Ø  }ƾúáæþ<C3A6>þæ×woD׸ë¿v¯ÞÝ<C39E>øýG6dxs5ã:ëºBÎ?iZ\Ýv^+DbÓØLi›Ãæ/Dô2<C3B4>B™´ .ðÍQ:g} Œ‰B}W?w?^¡xUç¤Õ&ꈿP´÷,{½ŠrA6T¦¡+] UIe ˜ <CB9C>M
W!Z¡äççϦQ#´=©QÈJÜ%©C0Ö²Ê<)T‡ ªO…øsS•4.Éi]؆*UËìê'|w»3âyµÔ·µd<¹Q
a\Xk)¶”d¤WPñU¤…ÚÊ˨¢V†4êœøëfeœÑü¡„èRÉoƒr1j²Ö4ý4»y nQøï¼<<16>gZ!Tnöüå2ÕŽ‰bÓUêëöªMÚÛ°j $[€y´<79>Õ5g‰A ×Û§ sÔhXîäó…±ïðíZ ù1ÝzB`,Ês~ïq$wñcºõÌqà{m}÷¥ûM|<7C>KA"`À%ãgMN vLtq³°hI¨T­HV´}Áâ4äÇ}G¨u2@
. “¡€ÉÔa|Fì¢E™èÜw4Á¡£ fúq¡˜]¼ª8b3d<33>X—aUHfG¢ð+¸Ÿæ6 žøÝöYŠÌŽÁ<&˜<>™à ;yË 6êêË>S.aáÛ Õ29C6ðº8?Ùï-uh鹫
Iï|¡Ô9î5@Óob<6F>»C³ˆh9æ€ÓâI9<49>ÅÔ°# ¢M)/v.Ñ»½Ã%¥Û<C2A5> è6tëL$ór„<72>º‡ÑD_|ñ¾8â÷süŒúÅ]ÑdÛ7*ºfžk¹«Ã<C2AB>„M)ÆgœÏ#Ö,sDuQ Ë…ùžb Ox¡å³ïÌH³†O¢Î¼‡Z>ç4j-Ÿ5”Íe>F¹e6³|{I%2mÙÆí†Ï ˜Ë·¿t^üÝ]v>"ëë¢ÿ©¶¤Šü_˜ä=#·sɰaÛ]
gÛr»¦z' Xë¶”ÍÆ˜gïfÆù…=ýÌ4¥pJDÆ è9³áª#ˆ9>ÞbâË`R銄£
!h/Lð¸ï¬Ò´œÃ™Îc­´s쬧¹sà…LåNk¯Iˆ¤E¢q>f:ëˆ5<CB86>µ¸d~ÖPŽæ·hÇ5½Y›¥! HÈ8šèÊLtPyv¸ö<67>Lg¸°Òñæ³6ìêlí‰Ü}¤xÆ÷Jëb¢“°MéØ„çŸŽ­Z¦ããqâaç
@øv<C3B8>%•Iêôq <20>ìÌx>˜ä dw€XêÉt!ÀI0>@ÌOíþ,[L á¨õ´,Hoɦ<C389>ÂôQ  ÞFÛ ÿç&Ô®ÅpÄà¶Z<C2B6>ÝR«<ñ8ë·äGá%í<>.^:ÜÈš“Ÿ¯Ðxæ„<—>;ˆš—ñ¿ §q¤ßè éÉäã;9cÌLZ—¾íÄÁóßÃ:³Ì enû7hR£þuåde‰9õ»Ÿ<C2BB>pfÅ$£N#h³[‡Whùì«àCus\—`õ-?z¬S)bùªé[íV-¬Z)À}”½=8: /³-#Ä•-i‰vº2% úó™’=¶g´Çmk³÷`”}îÞãù;ö±ƒV,x©@;𤂸-˜<03>B<EFBFBD>­yÇmÁðqSe1k`I§à˜sËÀý·©Ï©´ÕÁ¯¨<C2AF>ŽsõñãÜIžýQÀÒ3³sºþÂÒÀ.
endstream
endobj
15 0 obj
<<
/Length 5411
/Length 5425
/Filter /FlateDecode
>>
stream
@@ -730,10 +733,8 @@ AZ
¨¡V;@ ÔP@ ¨¡²ÑÿÍSCEù;)ß•!±ü;p0áH&à`¦°¸&à`ºj(p0p0Ó­Kû}×Âw^ÅÀÍ'©HªˆÉŽ0Yû TGþ<>êHÕPÕPÕÑ
¶µ :Ê-wÑ ÌŒ¼¬ó€êÈf{òåÂumÀ0Ó¹ùw3ï¢:õ“ŽóÈç?¢Ét<C389>£<EFBFBD>sªïÿQ,ÿð¹/åÿðÿQûPþ#à?þ#à?þ£Ûò½\˜®æo]š/hmpP#ÅÄ*0IX ɱåZ€)–€ ˜ÌHÀŒÌHíC˜‘€ ˜‘š¢ÌHÀŒt˜éåÂuŽ/‰Ät) ¨ŸËò)]ðA)‰˜h( €1)€1 “ÜBŒIÀ˜ŒIíC“€1 “€1 “n˘¤Ë:0ÁGîʹVHß"í<>¸ôI@Ÿ„ƒ@ŸôI@ŸôI§ è“#è“€>éÁòðôö»ÐÑf7dÜÀšKÀšT2°&d1Àš¬IÀš¬IÀš¬IÀš¬I7eMz¹ŒhÒ}&ß|g'O¹ã˜bn¤ åÐ)­¿útJ©°<02>Ð)<01>Ð)­v€N 蔀N 蔀Né*:¥Ö/Üjìj;æ"<22>[ ¸•.À­´Çßš„·R¬À­Ô…Þ-§n¥Ã±n%àVn%àVêÀè[æVjú¬>šT YŠ$ Yš¥Y4K@³t¿[4K@³4K@³´<C2B3>
Ð,ÍÒU4KÑïçd¿(«ë<C2AB>QD“´«9î%ª{ñÚ_¿Çä!¼€ÆdguˆÑQÌÕ>~ÿ(5Amëy¸¾Õ/fý cÛÚ˜%ˆ}Ø>*wµºýa\úù¹|ÿÏÝðèí^»CÐË噣ÔÈHkOÊ­'] ¹H>(ÞaG°¥ËøÜ­CræÐ ú <®ð7‡bªÊj1å«Í†{|ž)9ðçd¯¥tð{¼äGíHõÀåÞ¬”¹¥I<C2A5>£ä Ç©¹<C2A9>,ÊÛrª¶º»R÷`.üÊ@Ábƒq&³S>
ÁB7Òÿ'…ihÁŒ1õÑ=ì<>™ûÀh(Üö<ÉÐø®—FD)òWëŸÏ¾“E
êF
KSóŒƒ><3E>Š&(pò¾¡ Y3”ÙƒÒÉj ºÛsôû áNÃéÝå ʲ»ËžßF¬Þ5.Fm½ÂüzÑ=p!¬'. ñT±¼ÑŽåðq¾‘ð£†ÞµpëÁwžàïJž^^”3zW´Ú7ç”~µü}¬„þxGØ{éÈø^:ÂßKGÄ{éˆ|¬Ž¼Ãê<C383>|Õú¯sn íOóºh+s4¯±v;5]|­;óÓu-ë$'ém¸Ç¨X ×»í¬Î±N=8wl æKƒºT7âœCà/óQÏ:'6<>´» Æ<>A¶1'¬ú¡\¹:nµï-òg÷Z89³ÿ)Ø@騨lñ¶®{Ê«öÏÖ¯Obþ4§}Úþ™ŒBŒóÁÿ†7×¾åŸàô1ï¼ý¾ÅË­ƒµžeFºÚFz¸û
O}ý
ÁB7Òÿ'…ihÁŒ1õÑ=ì<>™ûÀh(Üö<ɰx×Ë£*‰ù«õÏgßÉ"u#…¥©yÆAŸNEÄûΘJg
)((³/“Õ2t·çè÷AÂ<41>†Ó»Ë#$”ew—=¿<>æêÈûÅÆÈÆ<C388>˜Â‡0¿btëŠ l<e,o4d9|œïH$üǨ¡y-Ü‚ð¨'<27>æ4ü-D±öɱ±Ì(gö®xµoΩýjùúX‰ýñް÷Òñ½t„¿—Žˆ÷ÒùXy‡U<ùªõ_çjÜÜŸæuÑVèh^cí¶jº7[xæ'ìZÖIn¿o÷¨•«á|·<>ÕY#Ö©çŽÔ|yP—ìFœsüe>êY DØDÒî†?ÙÆœ¸ê‡reë¸9Ô¾·ÈŸÝkáäÌ>¨`¥£¢²ÅÛVVퟭ7_ŸÄü©Nû´ý3ç7ÿ ®}Ë?Áéc>Þy~‹—=Zk=ËŒtµ<74>ôpW÷?Löw
endstream
endobj
77 0 obj
@@ -1325,10 +1326,10 @@ xref
0000000059 00000 n
0000005563 00000 n
0000006178 00000 n
0000026254 00000 n
0000026266 00000 n
0000001770 00000 n
0000001585 00000 n
0000033101 00000 n
0000033127 00000 n
0000002627 00000 n
0000007053 00000 n
0000007208 00000 n
@@ -1336,24 +1337,24 @@ xref
0000000526 00000 n
0000000650 00000 n
0000000752 00000 n
0000032010 00000 n
0000032036 00000 n
0000000883 00000 n
0000000985 00000 n
0000001116 00000 n
0000001218 00000 n
0000001350 00000 n
0000001452 00000 n
0000037952 00000 n
0000045271 00000 n
0000054156 00000 n
0000062501 00000 n
0000071744 00000 n
0000080223 00000 n
0000082133 00000 n
0000037978 00000 n
0000045297 00000 n
0000054182 00000 n
0000062527 00000 n
0000071770 00000 n
0000080249 00000 n
0000082159 00000 n
0000024508 00000 n
0000002219 00000 n
0000002079 00000 n
0000091285 00000 n
0000091311 00000 n
0000007311 00000 n
0000007428 00000 n
0000007558 00000 n
@@ -1387,23 +1388,23 @@ xref
0000006330 00000 n
0000006609 00000 n
0000024118 00000 n
0000031739 00000 n
0000032307 00000 n
0000036923 00000 n
0000044355 00000 n
0000052437 00000 n
0000061643 00000 n
0000070822 00000 n
0000079503 00000 n
0000081429 00000 n
0000083219 00000 n
0000031765 00000 n
0000032333 00000 n
0000036949 00000 n
0000044381 00000 n
0000052463 00000 n
0000061669 00000 n
0000070848 00000 n
0000079529 00000 n
0000081455 00000 n
0000083245 00000 n
trailer
<<
/Size 87
/Root 3 0 R
/Info 52 0 R
/ID [<6a2a704b01cba44185a92d8d4bcaa9d7> <6a2a704b01cba44185a92d8d4bcaa9d7>]
/ID [<2f4ec8da7e87471807031f721b6c9ac2> <2f4ec8da7e87471807031f721b6c9ac2>]
>>
startxref
101700
101726
%%EOF

View File

@@ -397,7 +397,11 @@ export const comparePDFWithAssetFolder = async (download: Download) => {
expect(genPage.width).toBe(refPage.width);
expect(genPage.height).toBe(refPage.height);
try {
expect(genPage.data).toStrictEqual(refPage.data);
} catch {
throw new Error(`PDF page ${i + 1} screenshot does not match reference.`);
}
}
};

View File

@@ -57,6 +57,7 @@ export const blockMappingHeadingPDF: DocsExporterPDF['mappings']['blockMapping']
style={{
fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,
fontWeight: 700,
lineHeight: 1.25,
marginTop: `${fontSizeEM * MERGE_RATIO}px`,
marginBottom: `${fontSizeEM * MERGE_RATIO}px`,
}}