[{"data":1,"prerenderedAt":1328},["ShallowReactive",2],{"docs-navigation:en":3,"content-page:docs:Qb1y_sX0eJf9d9WsNIyPtiQnPZE_Z_32q-uN8QRUPBE":133,"content-page-surround:docs:Qb1y_sX0eJf9d9WsNIyPtiQnPZE_Z_32q-uN8QRUPBE":1314,"i-logos:vue":1317,"i-logos:nuxt-icon":1322,"i-lucide:clipboard":1325},[4,25,73,121,127],{"title":5,"id":6,"canonicalKey":7,"locale":8,"draft":9,"icon":10,"sidebar":11,"path":12,"children":13},"Getting Started","content:docs:1.getting-started:.navigation.yml","1","en",false,"lucide:rocket","group","\u002Fdocs\u002Fgetting-started",[14,20],{"title":15,"id":16,"canonicalKey":17,"locale":8,"draft":9,"icon":18,"path":19},"Installation","content:docs:1.getting-started:2.installation.md","1\u002F2","lucide:download","\u002Fdocs\u002Fgetting-started\u002Finstallation",{"title":21,"id":22,"canonicalKey":23,"locale":8,"draft":9,"icon":10,"path":24},"Quickstart","content:docs:1.getting-started:3.quickstart.md","1\u002F3","\u002Fdocs\u002Fgetting-started\u002Fquickstart",{"title":26,"page":9,"canonicalKey":27,"locale":8,"id":28,"draft":9,"icon":29,"sidebar":11,"children":30},"Guides","2","content:docs:2.guides:.navigation.yml","lucide:compass",[31,37,43,49,55,61,67],{"title":32,"id":33,"canonicalKey":34,"locale":8,"draft":9,"icon":35,"path":36},"Authoring","content:docs:2.guides:1.authoring.md","2\u002F1","lucide:component","\u002Fdocs\u002Fguides\u002Fauthoring",{"title":38,"id":39,"canonicalKey":40,"locale":8,"draft":9,"icon":41,"path":42},"Contents, links & bookmarks","content:docs:2.guides:2.contents-links-bookmarks.md","2\u002F2","lucide:list-tree","\u002Fdocs\u002Fguides\u002Fcontents-links-bookmarks",{"title":44,"id":45,"canonicalKey":46,"locale":8,"draft":9,"icon":47,"path":48},"Images & fonts","content:docs:2.guides:3.images-and-fonts.md","2\u002F3","lucide:image","\u002Fdocs\u002Fguides\u002Fimages-and-fonts",{"title":50,"id":51,"canonicalKey":52,"locale":8,"draft":9,"icon":53,"path":54},"SVG graphics","content:docs:2.guides:4.svg-graphics.md","2\u002F4","lucide:shapes","\u002Fdocs\u002Fguides\u002Fsvg-graphics",{"title":56,"id":57,"canonicalKey":58,"locale":8,"draft":9,"icon":59,"path":60},"Errors & debugging","content:docs:2.guides:5.errors-and-debugging.md","2\u002F5","lucide:bug","\u002Fdocs\u002Fguides\u002Ferrors-and-debugging",{"title":62,"id":63,"canonicalKey":64,"locale":8,"draft":9,"icon":65,"path":66},"Testing your PDFs","content:docs:2.guides:6.testing.md","2\u002F6","lucide:flask-conical","\u002Fdocs\u002Fguides\u002Ftesting",{"title":68,"id":69,"canonicalKey":70,"locale":8,"draft":9,"icon":71,"path":72},"Production recipes","content:docs:2.guides:7.recipes.md","2\u002F7","lucide:notebook-tabs","\u002Fdocs\u002Fguides\u002Frecipes",{"title":74,"page":9,"canonicalKey":75,"locale":8,"id":76,"draft":9,"icon":77,"sidebar":11,"children":78},"Reference","3","content:docs:3.reference:.navigation.yml","lucide:book-marked",[79,85,91,97,103,109,115],{"title":80,"id":81,"canonicalKey":82,"locale":8,"draft":9,"icon":83,"path":84},"definePdf","content:docs:3.reference:1.define-pdf.md","3\u002F1","lucide:settings-2","\u002Fdocs\u002Freference\u002Fdefine-pdf",{"title":86,"id":87,"canonicalKey":88,"locale":8,"draft":9,"icon":89,"path":90},"The #pdf registry","content:docs:3.reference:2.registry.md","3\u002F2","lucide:braces","\u002Fdocs\u002Freference\u002Fregistry",{"title":92,"id":93,"canonicalKey":94,"locale":8,"draft":9,"icon":95,"path":96},"Module options","content:docs:3.reference:3.module-options.md","3\u002F3","lucide:sliders","\u002Fdocs\u002Freference\u002Fmodule-options",{"title":98,"id":99,"canonicalKey":100,"locale":8,"draft":9,"icon":101,"path":102},"Primitives","content:docs:3.reference:4.primitives.md","3\u002F4","lucide:box","\u002Fdocs\u002Freference\u002Fprimitives",{"title":104,"id":105,"canonicalKey":106,"locale":8,"draft":9,"icon":107,"path":108},"Composables","content:docs:3.reference:5.composables.md","3\u002F5","lucide:function-square","\u002Fdocs\u002Freference\u002Fcomposables",{"title":110,"id":111,"canonicalKey":112,"locale":8,"draft":9,"icon":113,"path":114},"Test utilities","content:docs:3.reference:6.test-utilities.md","3\u002F6","lucide:test-tube","\u002Fdocs\u002Freference\u002Ftest-utilities",{"title":116,"id":117,"canonicalKey":118,"locale":8,"draft":9,"icon":119,"path":120},"Styles","content:docs:3.reference:7.styles.md","3\u002F7","lucide:palette","\u002Fdocs\u002Freference\u002Fstyles",{"title":122,"id":123,"canonicalKey":124,"locale":8,"draft":9,"icon":125,"sidebar":11,"path":126},"Conformance & Philosophy","content:docs:4.conformance:.navigation.yml","4","lucide:scale","\u002Fdocs\u002Fconformance",{"title":128,"id":129,"canonicalKey":130,"locale":8,"draft":9,"icon":131,"sidebar":11,"path":132},"Examples","content:docs:5.examples:.navigation.yml","5","lucide:layout-grid","\u002Fdocs\u002Fexamples",{"title":44,"description":134,"icon":47,"body":135,"type":1300,"id":45,"canonicalKey":46,"draft":9,"partial":9,"locale":8,"collection":1301,"navigationFile":9,"file":1302,"resolvedRefs":1308,"route":1309,"resolution":1311},"Local asset and font roots, the validation boundary, and the opt-in remote allowlist with its security posture.",{"type":136,"children":137,"toc":1287},"root",[138,146,153,174,314,320,338,523,528,616,651,670,676,681,889,894,900,905,950,962,968,993,1005,1167,1174,1179,1267,1272],{"type":139,"tag":140,"props":141,"children":142},"element","p",{},[143],{"type":144,"value":145},"text","Images and fonts are resolved and embedded during the Nuxt build from explicit\nlocal roots. Remote fetching is off by default and, when enabled, is gated by an\noperator-owned allowlist. This is a fail-closed resource boundary, not a general\nfilesystem or network sandbox.",{"type":139,"tag":147,"props":148,"children":150},"h2",{"id":149},"local-images",[151],{"type":144,"value":152},"Local images",{"type":139,"tag":140,"props":154,"children":155},{},[156,158,164,166,172],{"type":144,"value":157},"Put PNG or JPEG files in ",{"type":139,"tag":159,"props":160,"children":161},"code",{},[162],{"type":144,"value":163},"pdfs\u002Fassets",{"type":144,"value":165}," and reference the path ",{"type":139,"tag":167,"props":168,"children":169},"strong",{},[170],{"type":144,"value":171},"relative to that\ndirectory",{"type":144,"value":173},":",{"type":139,"tag":175,"props":176,"children":180},"pre",{"language":177,"class":178,"tabindex":179},"vue","shiki shiki-themes light-plus dark-plus dark:dark-plus","0",[181],{"type":139,"tag":159,"props":182,"children":184},{"class":183},"language-vue",[185,203,205,226,227,305,306],{"type":139,"tag":186,"props":187,"children":190},"span",{"class":188,"style":189},"line","display: inline",[191,197],{"type":139,"tag":186,"props":192,"children":194},{"style":193},"color:#800000;--shiki-dark:#808080",[195],{"type":144,"value":196},"\u003C",{"type":139,"tag":186,"props":198,"children":200},{"style":199},"color:#800000;--shiki-dark:#569CD6",[201],{"type":144,"value":202},"PdfImage",{"type":144,"value":204},"\n",{"type":139,"tag":186,"props":206,"children":207},{"class":188,"style":189},[208,214,220],{"type":139,"tag":186,"props":209,"children":211},{"style":210},"color:#E50000;--shiki-dark:#9CDCFE",[212],{"type":144,"value":213},"  src",{"type":139,"tag":186,"props":215,"children":217},{"style":216},"color:#000000;--shiki-dark:#D4D4D4",[218],{"type":144,"value":219},"=",{"type":139,"tag":186,"props":221,"children":223},{"style":222},"color:#0000FF;--shiki-dark:#CE9178",[224],{"type":144,"value":225},"\"brand\u002Flogo.png\"",{"type":144,"value":204},{"type":139,"tag":186,"props":228,"children":229},{"class":188,"style":189},[230,235,240,244,249,254,260,266,271,276,282,286,291,296,301],{"type":139,"tag":186,"props":231,"children":232},{"style":216},[233],{"type":144,"value":234},"  :",{"type":139,"tag":186,"props":236,"children":237},{"style":210},[238],{"type":144,"value":239},"style",{"type":139,"tag":186,"props":241,"children":242},{"style":216},[243],{"type":144,"value":219},{"type":139,"tag":186,"props":245,"children":246},{"style":216},[247],{"type":144,"value":248},"\"",{"type":139,"tag":186,"props":250,"children":251},{"style":216},[252],{"type":144,"value":253},"{ ",{"type":139,"tag":186,"props":255,"children":257},{"style":256},"color:#001080;--shiki-dark:#9CDCFE",[258],{"type":144,"value":259},"height:",{"type":139,"tag":186,"props":261,"children":263},{"style":262},"color:#098658;--shiki-dark:#B5CEA8",[264],{"type":144,"value":265}," 40",{"type":139,"tag":186,"props":267,"children":268},{"style":216},[269],{"type":144,"value":270},", ",{"type":139,"tag":186,"props":272,"children":273},{"style":256},[274],{"type":144,"value":275},"objectFit:",{"type":139,"tag":186,"props":277,"children":279},{"style":278},"color:#A31515;--shiki-dark:#CE9178",[280],{"type":144,"value":281}," 'contain'",{"type":139,"tag":186,"props":283,"children":284},{"style":216},[285],{"type":144,"value":270},{"type":139,"tag":186,"props":287,"children":288},{"style":256},[289],{"type":144,"value":290},"width:",{"type":139,"tag":186,"props":292,"children":293},{"style":262},[294],{"type":144,"value":295}," 120",{"type":139,"tag":186,"props":297,"children":298},{"style":216},[299],{"type":144,"value":300}," }",{"type":139,"tag":186,"props":302,"children":303},{"style":216},[304],{"type":144,"value":248},{"type":144,"value":204},{"type":139,"tag":186,"props":307,"children":308},{"class":188,"style":189},[309],{"type":139,"tag":186,"props":310,"children":311},{"style":216},[312],{"type":144,"value":313},"\u002F>",{"type":139,"tag":147,"props":315,"children":317},{"id":316},"local-fonts",[318],{"type":144,"value":319},"Local fonts",{"type":139,"tag":140,"props":321,"children":322},{},[323,325,330,332,337],{"type":144,"value":324},"Put TTF or OTF files in ",{"type":139,"tag":159,"props":326,"children":327},{},[328],{"type":144,"value":329},"pdfs\u002Ffonts",{"type":144,"value":331}," and register each face in ",{"type":139,"tag":159,"props":333,"children":334},{},[335],{"type":144,"value":336},"nuxt.config.ts",{"type":144,"value":173},{"type":139,"tag":175,"props":339,"children":341},{"language":340,"filename":336,"class":178,"tabindex":179},"ts",[342],{"type":139,"tag":159,"props":343,"children":345},{"class":344},"language-ts",[346,371,372,395,396,409,410,423,424,442,443,460,461,478,479,496,497,505,506,514,515],{"type":139,"tag":186,"props":347,"children":348},{"class":188,"style":189},[349,355,360,366],{"type":139,"tag":186,"props":350,"children":352},{"style":351},"color:#AF00DB;--shiki-dark:#C586C0",[353],{"type":144,"value":354},"export",{"type":139,"tag":186,"props":356,"children":357},{"style":351},[358],{"type":144,"value":359}," default",{"type":139,"tag":186,"props":361,"children":363},{"style":362},"color:#795E26;--shiki-dark:#DCDCAA",[364],{"type":144,"value":365}," defineNuxtConfig",{"type":139,"tag":186,"props":367,"children":368},{"style":216},[369],{"type":144,"value":370},"({",{"type":144,"value":204},{"type":139,"tag":186,"props":373,"children":374},{"class":188,"style":189},[375,380,385,390],{"type":139,"tag":186,"props":376,"children":377},{"style":256},[378],{"type":144,"value":379},"  modules:",{"type":139,"tag":186,"props":381,"children":382},{"style":216},[383],{"type":144,"value":384}," [",{"type":139,"tag":186,"props":386,"children":387},{"style":278},[388],{"type":144,"value":389},"\"@lupinum\u002Fnuxt-pdf\"",{"type":139,"tag":186,"props":391,"children":392},{"style":216},[393],{"type":144,"value":394},"],",{"type":144,"value":204},{"type":139,"tag":186,"props":397,"children":398},{"class":188,"style":189},[399,404],{"type":139,"tag":186,"props":400,"children":401},{"style":256},[402],{"type":144,"value":403},"  pdf:",{"type":139,"tag":186,"props":405,"children":406},{"style":216},[407],{"type":144,"value":408}," {",{"type":144,"value":204},{"type":139,"tag":186,"props":411,"children":412},{"class":188,"style":189},[413,418],{"type":139,"tag":186,"props":414,"children":415},{"style":256},[416],{"type":144,"value":417},"    fonts:",{"type":139,"tag":186,"props":419,"children":420},{"style":216},[421],{"type":144,"value":422}," [{",{"type":144,"value":204},{"type":139,"tag":186,"props":425,"children":426},{"class":188,"style":189},[427,432,437],{"type":139,"tag":186,"props":428,"children":429},{"style":256},[430],{"type":144,"value":431},"      family:",{"type":139,"tag":186,"props":433,"children":434},{"style":278},[435],{"type":144,"value":436}," \"Invoice Sans\"",{"type":139,"tag":186,"props":438,"children":439},{"style":216},[440],{"type":144,"value":441},",",{"type":144,"value":204},{"type":139,"tag":186,"props":444,"children":445},{"class":188,"style":189},[446,451,456],{"type":139,"tag":186,"props":447,"children":448},{"style":256},[449],{"type":144,"value":450},"      src:",{"type":139,"tag":186,"props":452,"children":453},{"style":278},[454],{"type":144,"value":455}," \"InvoiceSans-Regular.ttf\"",{"type":139,"tag":186,"props":457,"children":458},{"style":216},[459],{"type":144,"value":441},{"type":144,"value":204},{"type":139,"tag":186,"props":462,"children":463},{"class":188,"style":189},[464,469,474],{"type":139,"tag":186,"props":465,"children":466},{"style":256},[467],{"type":144,"value":468},"      fontWeight:",{"type":139,"tag":186,"props":470,"children":471},{"style":262},[472],{"type":144,"value":473}," 400",{"type":139,"tag":186,"props":475,"children":476},{"style":216},[477],{"type":144,"value":441},{"type":144,"value":204},{"type":139,"tag":186,"props":480,"children":481},{"class":188,"style":189},[482,487,492],{"type":139,"tag":186,"props":483,"children":484},{"style":256},[485],{"type":144,"value":486},"      fontStyle:",{"type":139,"tag":186,"props":488,"children":489},{"style":278},[490],{"type":144,"value":491}," \"normal\"",{"type":139,"tag":186,"props":493,"children":494},{"style":216},[495],{"type":144,"value":441},{"type":144,"value":204},{"type":139,"tag":186,"props":498,"children":499},{"class":188,"style":189},[500],{"type":139,"tag":186,"props":501,"children":502},{"style":216},[503],{"type":144,"value":504},"    }],",{"type":144,"value":204},{"type":139,"tag":186,"props":507,"children":508},{"class":188,"style":189},[509],{"type":139,"tag":186,"props":510,"children":511},{"style":216},[512],{"type":144,"value":513},"  },",{"type":144,"value":204},{"type":139,"tag":186,"props":516,"children":517},{"class":188,"style":189},[518],{"type":139,"tag":186,"props":519,"children":520},{"style":216},[521],{"type":144,"value":522},"});",{"type":139,"tag":140,"props":524,"children":525},{},[526],{"type":144,"value":527},"Then use the family in a style object. Font inheritance flows through the tree,\nso setting it on the page covers the document:",{"type":139,"tag":175,"props":529,"children":530},{"language":177,"class":178,"tabindex":179},[531],{"type":139,"tag":159,"props":532,"children":533},{"class":183},[534,590,591,599,600],{"type":139,"tag":186,"props":535,"children":536},{"class":188,"style":189},[537,541,546,551,555,559,563,567,572,577,581,585],{"type":139,"tag":186,"props":538,"children":539},{"style":193},[540],{"type":144,"value":196},{"type":139,"tag":186,"props":542,"children":543},{"style":199},[544],{"type":144,"value":545},"PdfPage",{"type":139,"tag":186,"props":547,"children":548},{"style":216},[549],{"type":144,"value":550}," :",{"type":139,"tag":186,"props":552,"children":553},{"style":210},[554],{"type":144,"value":239},{"type":139,"tag":186,"props":556,"children":557},{"style":216},[558],{"type":144,"value":219},{"type":139,"tag":186,"props":560,"children":561},{"style":216},[562],{"type":144,"value":248},{"type":139,"tag":186,"props":564,"children":565},{"style":216},[566],{"type":144,"value":253},{"type":139,"tag":186,"props":568,"children":569},{"style":256},[570],{"type":144,"value":571},"fontFamily:",{"type":139,"tag":186,"props":573,"children":574},{"style":278},[575],{"type":144,"value":576}," 'Invoice Sans'",{"type":139,"tag":186,"props":578,"children":579},{"style":216},[580],{"type":144,"value":300},{"type":139,"tag":186,"props":582,"children":583},{"style":216},[584],{"type":144,"value":248},{"type":139,"tag":186,"props":586,"children":587},{"style":193},[588],{"type":144,"value":589},">",{"type":144,"value":204},{"type":139,"tag":186,"props":592,"children":593},{"class":188,"style":189},[594],{"type":139,"tag":186,"props":595,"children":596},{"style":216},[597],{"type":144,"value":598},"  \u003CPdfText>Invoice\u003C\u002FPdfText>",{"type":144,"value":204},{"type":139,"tag":186,"props":601,"children":602},{"class":188,"style":189},[603,608,612],{"type":139,"tag":186,"props":604,"children":605},{"style":193},[606],{"type":144,"value":607},"\u003C\u002F",{"type":139,"tag":186,"props":609,"children":610},{"style":199},[611],{"type":144,"value":545},{"type":139,"tag":186,"props":613,"children":614},{"style":193},[615],{"type":144,"value":589},{"type":139,"tag":140,"props":617,"children":618},{},[619,621,626,628,633,635,640,642,649],{"type":144,"value":620},"Register one entry per weight\u002Fstyle you use; ",{"type":139,"tag":159,"props":622,"children":623},{},[624],{"type":144,"value":625},"fontWeight",{"type":144,"value":627}," accepts a number or a\nnamed weight (",{"type":139,"tag":159,"props":629,"children":630},{},[631],{"type":144,"value":632},"\"bold\"",{"type":144,"value":634}," or ",{"type":139,"tag":159,"props":636,"children":637},{},[638],{"type":144,"value":639},"\"medium\"",{"type":144,"value":641},"). See the\n",{"type":139,"tag":643,"props":644,"children":646},"a",{"href":645},"$docs\u002Freference\u002Fmodule-options",[647],{"type":144,"value":648},"module options reference",{"type":144,"value":650}," for the full font\ndeclaration.",{"type":139,"tag":140,"props":652,"children":653},{},[654,656,661,663,668],{"type":144,"value":655},"Completed render diagnostics expose ",{"type":139,"tag":159,"props":657,"children":658},{},[659],{"type":144,"value":660},"registeredFontFaces",{"type":144,"value":662}," (family, weight, and\nstyle only), and the development preview lists the same safe facts. This proves\nwhich faces were configured; it deliberately does ",{"type":139,"tag":167,"props":664,"children":665},{},[666],{"type":144,"value":667},"not",{"type":144,"value":669}," claim that a missing\nglyph fell back or that every character exists in a face.",{"type":139,"tag":147,"props":671,"children":673},{"id":672},"typography-support-boundary",[674],{"type":144,"value":675},"Typography support boundary",{"type":139,"tag":140,"props":677,"children":678},{},[679],{"type":144,"value":680},"Every claim assumes the application embeds a font containing the required\nglyphs. The calibration fixture checks shaping, extraction, geometry, and a\nreviewed raster, not only whether rendering avoided an exception.",{"type":139,"tag":682,"props":683,"children":684},"table",{},[685,709],{"type":139,"tag":686,"props":687,"children":688},"thead",{},[689],{"type":139,"tag":690,"props":691,"children":692},"tr",{},[693,699,704],{"type":139,"tag":694,"props":695,"children":696},"th",{},[697],{"type":144,"value":698},"Text behavior",{"type":139,"tag":694,"props":700,"children":701},{},[702],{"type":144,"value":703},"Status",{"type":139,"tag":694,"props":705,"children":706},{},[707],{"type":144,"value":708},"Evidence and boundary",{"type":139,"tag":710,"props":711,"children":712},"tbody",{},[713,732,749,766,784,815,832,849,867],{"type":139,"tag":690,"props":714,"children":715},{},[716,722,727],{"type":139,"tag":717,"props":718,"children":719},"td",{},[720],{"type":144,"value":721},"Latin Extended, punctuation, currency",{"type":139,"tag":717,"props":723,"children":724},{},[725],{"type":144,"value":726},"Supported",{"type":139,"tag":717,"props":728,"children":729},{},[730],{"type":144,"value":731},"Render, extraction, wrapping, and raster evidence with Roboto",{"type":139,"tag":690,"props":733,"children":734},{},[735,740,744],{"type":139,"tag":717,"props":736,"children":737},{},[738],{"type":144,"value":739},"Greek and Cyrillic",{"type":139,"tag":717,"props":741,"children":742},{},[743],{"type":144,"value":726},{"type":139,"tag":717,"props":745,"children":746},{},[747],{"type":144,"value":748},"Representative sentences render and extract exactly with Roboto",{"type":139,"tag":690,"props":750,"children":751},{},[752,757,761],{"type":139,"tag":717,"props":753,"children":754},{},[755],{"type":144,"value":756},"Custom hyphenation",{"type":139,"tag":717,"props":758,"children":759},{},[760],{"type":144,"value":726},{"type":139,"tag":717,"props":762,"children":763},{},[764],{"type":144,"value":765},"Paired layout\u002Fraster conformance; application supplies the callback",{"type":139,"tag":690,"props":767,"children":768},{},[769,774,779],{"type":139,"tag":717,"props":770,"children":771},{},[772],{"type":144,"value":773},"CJK",{"type":139,"tag":717,"props":775,"children":776},{},[777],{"type":144,"value":778},"Experimental",{"type":139,"tag":717,"props":780,"children":781},{},[782],{"type":144,"value":783},"Representative Chinese\u002FJapanese text renders and extracts with a supplied Noto subset; broad font coverage and line-breaking policy remain application evidence",{"type":139,"tag":690,"props":785,"children":786},{},[787,792,796],{"type":139,"tag":717,"props":788,"children":789},{},[790],{"type":144,"value":791},"Combining marks",{"type":139,"tag":717,"props":793,"children":794},{},[795],{"type":144,"value":778},{"type":139,"tag":717,"props":797,"children":798},{},[799,801,806,808,813],{"type":144,"value":800},"Marks render correctly, but PDF extraction can detach or omit mark association (",{"type":139,"tag":159,"props":802,"children":803},{},[804],{"type":144,"value":805},"Ångström",{"type":144,"value":807}," extracts as ",{"type":139,"tag":159,"props":809,"children":810},{},[811],{"type":144,"value":812},"A ngstrom",{"type":144,"value":814},")",{"type":139,"tag":690,"props":816,"children":817},{},[818,823,827],{"type":139,"tag":717,"props":819,"children":820},{},[821],{"type":144,"value":822},"Arabic and mixed bidirectional text",{"type":139,"tag":717,"props":824,"children":825},{},[826],{"type":144,"value":778},{"type":139,"tag":717,"props":828,"children":829},{},[830],{"type":144,"value":831},"Representative Arabic shapes visually and reports an RTL run; extracted mixed-order text follows bidi ordering rather than the authored string",{"type":139,"tag":690,"props":833,"children":834},{},[835,840,844],{"type":139,"tag":717,"props":836,"children":837},{},[838],{"type":144,"value":839},"Variable fonts",{"type":139,"tag":717,"props":841,"children":842},{},[843],{"type":144,"value":778},{"type":139,"tag":717,"props":845,"children":846},{},[847],{"type":144,"value":848},"A Source Code variable TTF renders\u002Fextracts at its default instance; axis selection is not a public API",{"type":139,"tag":690,"props":850,"children":851},{},[852,857,862],{"type":139,"tag":717,"props":853,"children":854},{},[855],{"type":144,"value":856},"Emoji",{"type":139,"tag":717,"props":858,"children":859},{},[860],{"type":144,"value":861},"Unsupported",{"type":139,"tag":717,"props":863,"children":864},{},[865],{"type":144,"value":866},"Monochrome face emoji do not serialize faithfully through the pinned engine; use an admitted PNG or SVG asset instead",{"type":139,"tag":690,"props":868,"children":869},{},[870,875,879],{"type":139,"tag":717,"props":871,"children":872},{},[873],{"type":144,"value":874},"Font-family fallback chains",{"type":139,"tag":717,"props":876,"children":877},{},[878],{"type":144,"value":861},{"type":139,"tag":717,"props":880,"children":881},{},[882,887],{"type":139,"tag":159,"props":883,"children":884},{},[885],{"type":144,"value":886},"fontFamily",{"type":144,"value":888}," names one registered family; Nuxt PDF does not invent missing-glyph or fallback detection",{"type":139,"tag":140,"props":890,"children":891},{},[892],{"type":144,"value":893},"Use static faces for production documents unless your own semantic and raster\nsuite proves an experimental script\u002Ffont combination.",{"type":139,"tag":147,"props":895,"children":897},{"id":896},"the-validation-boundary",[898],{"type":144,"value":899},"The validation boundary",{"type":139,"tag":140,"props":901,"children":902},{},[903],{"type":144,"value":904},"Every configured resource is checked at build time. Resources are:",{"type":139,"tag":906,"props":907,"children":908},"ul",{},[909,920,930,940],{"type":139,"tag":910,"props":911,"children":912},"li",{},[913,918],{"type":139,"tag":167,"props":914,"children":915},{},[916],{"type":144,"value":917},"structurally checked",{"type":144,"value":919}," for PNG\u002FJPEG chunks, dimensions, and decoded pixels;\nTTF\u002FOTF signature, matching extension, SFNT directory bounds, and required\noutline tables;",{"type":139,"tag":910,"props":921,"children":922},{},[923,928],{"type":139,"tag":167,"props":924,"children":925},{},[926],{"type":144,"value":927},"size-checked",{"type":144,"value":929}," with limits of 10 MB for images and 5 MB for fonts;",{"type":139,"tag":910,"props":931,"children":932},{},[933,938],{"type":139,"tag":167,"props":934,"children":935},{},[936],{"type":144,"value":937},"realpath-contained",{"type":144,"value":939},", so resolved paths must stay inside the declared root; and",{"type":139,"tag":910,"props":941,"children":942},{},[943,948],{"type":139,"tag":167,"props":944,"children":945},{},[946],{"type":144,"value":947},"embedded into the server build",{"type":144,"value":949},", so the bytes travel in the build and there is\nno runtime filesystem read.",{"type":139,"tag":140,"props":951,"children":952},{},[953,955,960],{"type":144,"value":954},"Absolute paths, ",{"type":139,"tag":159,"props":956,"children":957},{},[958],{"type":144,"value":959},"..",{"type":144,"value":961}," traversal, symlink escapes, missing files, ambiguous\nsources, and unsupported URL schemes are all rejected. There is no runtime\nfilesystem fallback.",{"type":139,"tag":147,"props":963,"children":965},{"id":964},"opt-in-remote-images",[966],{"type":144,"value":967},"Opt-in remote images",{"type":139,"tag":140,"props":969,"children":970},{},[971,973,978,980,984,986,991],{"type":144,"value":972},"Remote images are ",{"type":139,"tag":167,"props":974,"children":975},{},[976],{"type":144,"value":977},"unsupported until you configure an allowlist",{"type":144,"value":979},". Remote\nfonts are always unsupported; keep fonts in ",{"type":139,"tag":159,"props":981,"children":982},{},[983],{"type":144,"value":329},{"type":144,"value":985}," so builds are\nreproducible. With ",{"type":139,"tag":159,"props":987,"children":988},{},[989],{"type":144,"value":990},"pdf.remote",{"type":144,"value":992}," absent the module performs zero network I\u002FO and\nevery URL source fails closed.",{"type":139,"tag":140,"props":994,"children":995},{},[996,998,1003],{"type":144,"value":997},"When an operator sets ",{"type":139,"tag":159,"props":999,"children":1000},{},[1001],{"type":144,"value":1002},"pdf.remote.allow",{"type":144,"value":1004},", the module fetches allowlisted images\nand converts them to validated bytes before\nlayout:",{"type":139,"tag":175,"props":1006,"children":1007},{"language":340,"filename":336,"class":178,"tabindex":179},[1008],{"type":139,"tag":159,"props":1009,"children":1010},{"class":344},[1011,1030,1031,1050,1051,1062,1063,1075,1076,1088,1089,1101,1102,1114,1115,1123,1124,1133,1134,1142,1143,1151,1152,1159,1160],{"type":139,"tag":186,"props":1012,"children":1013},{"class":188,"style":189},[1014,1018,1022,1026],{"type":139,"tag":186,"props":1015,"children":1016},{"style":351},[1017],{"type":144,"value":354},{"type":139,"tag":186,"props":1019,"children":1020},{"style":351},[1021],{"type":144,"value":359},{"type":139,"tag":186,"props":1023,"children":1024},{"style":362},[1025],{"type":144,"value":365},{"type":139,"tag":186,"props":1027,"children":1028},{"style":216},[1029],{"type":144,"value":370},{"type":144,"value":204},{"type":139,"tag":186,"props":1032,"children":1033},{"class":188,"style":189},[1034,1038,1042,1046],{"type":139,"tag":186,"props":1035,"children":1036},{"style":256},[1037],{"type":144,"value":379},{"type":139,"tag":186,"props":1039,"children":1040},{"style":216},[1041],{"type":144,"value":384},{"type":139,"tag":186,"props":1043,"children":1044},{"style":278},[1045],{"type":144,"value":389},{"type":139,"tag":186,"props":1047,"children":1048},{"style":216},[1049],{"type":144,"value":394},{"type":144,"value":204},{"type":139,"tag":186,"props":1052,"children":1053},{"class":188,"style":189},[1054,1058],{"type":139,"tag":186,"props":1055,"children":1056},{"style":256},[1057],{"type":144,"value":403},{"type":139,"tag":186,"props":1059,"children":1060},{"style":216},[1061],{"type":144,"value":408},{"type":144,"value":204},{"type":139,"tag":186,"props":1064,"children":1065},{"class":188,"style":189},[1066,1071],{"type":139,"tag":186,"props":1067,"children":1068},{"style":256},[1069],{"type":144,"value":1070},"    remote:",{"type":139,"tag":186,"props":1072,"children":1073},{"style":216},[1074],{"type":144,"value":408},{"type":144,"value":204},{"type":139,"tag":186,"props":1077,"children":1078},{"class":188,"style":189},[1079,1084],{"type":139,"tag":186,"props":1080,"children":1081},{"style":256},[1082],{"type":144,"value":1083},"      allow:",{"type":139,"tag":186,"props":1085,"children":1086},{"style":216},[1087],{"type":144,"value":384},{"type":144,"value":204},{"type":139,"tag":186,"props":1090,"children":1091},{"class":188,"style":189},[1092,1097],{"type":139,"tag":186,"props":1093,"children":1094},{"style":278},[1095],{"type":144,"value":1096},"        \"https:\u002F\u002Fcdn.example.com\u002Fbrand\u002F\"",{"type":139,"tag":186,"props":1098,"children":1099},{"style":216},[1100],{"type":144,"value":441},{"type":144,"value":204},{"type":139,"tag":186,"props":1103,"children":1104},{"class":188,"style":189},[1105,1110],{"type":139,"tag":186,"props":1106,"children":1107},{"style":278},[1108],{"type":144,"value":1109},"        \"https:\u002F\u002Fimages.example.com\u002Flogos\u002F\"",{"type":139,"tag":186,"props":1111,"children":1112},{"style":216},[1113],{"type":144,"value":441},{"type":144,"value":204},{"type":139,"tag":186,"props":1116,"children":1117},{"class":188,"style":189},[1118],{"type":139,"tag":186,"props":1119,"children":1120},{"style":216},[1121],{"type":144,"value":1122},"      ],",{"type":144,"value":204},{"type":139,"tag":186,"props":1125,"children":1126},{"class":188,"style":189},[1127],{"type":139,"tag":186,"props":1128,"children":1130},{"style":1129},"color:#008000;--shiki-dark:#6A9955",[1131],{"type":144,"value":1132},"      \u002F\u002F Optional per-hop timeout (default shown):",{"type":144,"value":204},{"type":139,"tag":186,"props":1135,"children":1136},{"class":188,"style":189},[1137],{"type":139,"tag":186,"props":1138,"children":1139},{"style":1129},[1140],{"type":144,"value":1141},"      \u002F\u002F timeoutMs: 10_000,",{"type":144,"value":204},{"type":139,"tag":186,"props":1144,"children":1145},{"class":188,"style":189},[1146],{"type":139,"tag":186,"props":1147,"children":1148},{"style":216},[1149],{"type":144,"value":1150},"    },",{"type":144,"value":204},{"type":139,"tag":186,"props":1153,"children":1154},{"class":188,"style":189},[1155],{"type":139,"tag":186,"props":1156,"children":1157},{"style":216},[1158],{"type":144,"value":513},{"type":144,"value":204},{"type":139,"tag":186,"props":1161,"children":1162},{"class":188,"style":189},[1163],{"type":139,"tag":186,"props":1164,"children":1165},{"style":216},[1166],{"type":144,"value":522},{"type":139,"tag":1168,"props":1169,"children":1171},"h3",{"id":1170},"opt-in-remote-images-the-security-posture",[1172],{"type":144,"value":1173},"The security posture",{"type":139,"tag":140,"props":1175,"children":1176},{},[1177],{"type":144,"value":1178},"The allowlist is the operator's trust decision, and the fetch path is\ndeliberately narrow:",{"type":139,"tag":906,"props":1180,"children":1181},{},[1182,1206,1216,1233,1250],{"type":139,"tag":910,"props":1183,"children":1184},{},[1185,1190,1192,1197,1199,1204],{"type":139,"tag":167,"props":1186,"children":1187},{},[1188],{"type":144,"value":1189},"Exact HTTPS prefixes only.",{"type":144,"value":1191}," Each entry must be an\n",{"type":139,"tag":159,"props":1193,"children":1194},{},[1195],{"type":144,"value":1196},"https:\u002F\u002Fhost\u002Fpath\u002F",{"type":144,"value":1198}," prefix with a trailing slash. Prefix entries reject\nqueries too; requested image URLs may carry a query, which is never shown in\nerrors. ",{"type":139,"tag":159,"props":1200,"children":1201},{},[1202],{"type":144,"value":1203},"http:\u002F\u002F",{"type":144,"value":1205},", wildcards, embedded credentials, fragments, and\nnon-matching hosts, ports, or paths are blocked.",{"type":139,"tag":910,"props":1207,"children":1208},{},[1209,1214],{"type":139,"tag":167,"props":1210,"children":1211},{},[1212],{"type":144,"value":1213},"Redirects re-checked per hop.",{"type":144,"value":1215}," Redirects are followed manually (bounded to\nthree) and the allowlist is re-checked on every hop, so an allowlisted host\ncannot redirect out of the allowlist.",{"type":139,"tag":910,"props":1217,"children":1218},{},[1219,1224,1226,1231],{"type":139,"tag":167,"props":1220,"children":1221},{},[1222],{"type":144,"value":1223},"One render budget.",{"type":144,"value":1225}," ",{"type":139,"tag":159,"props":1227,"children":1228},{},[1229],{"type":144,"value":1230},"pdf.limits",{"type":144,"value":1232}," owns per-image and aggregate source bytes,\ndecoded pixels, request count, concurrency, output bytes, and the whole-render\ndeadline. A fatal resource error aborts sibling requests.",{"type":139,"tag":910,"props":1234,"children":1235},{},[1236,1241,1243,1248],{"type":139,"tag":167,"props":1237,"children":1238},{},[1239],{"type":144,"value":1240},"Signature is authoritative.",{"type":144,"value":1242}," A deceptive ",{"type":139,"tag":159,"props":1244,"children":1245},{},[1246],{"type":144,"value":1247},"Content-Type",{"type":144,"value":1249}," cannot make\nnon-image bytes validate; PNG\u002FJPEG structure and dimensions are inspected\nbefore engine admission.",{"type":139,"tag":910,"props":1251,"children":1252},{},[1253,1258,1260,1265],{"type":139,"tag":167,"props":1254,"children":1255},{},[1256],{"type":144,"value":1257},"No credentials, no headers.",{"type":144,"value":1259}," Fetches are ",{"type":139,"tag":159,"props":1261,"children":1262},{},[1263],{"type":144,"value":1264},"GET",{"type":144,"value":1266}," only, send no request\nheaders, and carry no cookies or credentials, under a per-hop timeout.",{"type":139,"tag":140,"props":1268,"children":1269},{},[1270],{"type":144,"value":1271},"Remote images resolve at render time (deduplicated per render, no cross-render\ncache). Local fonts are validated and embedded at build time.",{"type":139,"tag":1273,"props":1274,"children":1276},"warning",{"icon":1275},"lucide:shield-alert",[1277,1279,1285],{"type":144,"value":1278},"Not claimed: authenticated fetches, request headers or bodies, proxies, and\nprivate-IP or DNS-rebinding protection beyond the allowlist. The allowlist\ncontrols ",{"type":139,"tag":1280,"props":1281,"children":1282},"em",{},[1283],{"type":144,"value":1284},"which hosts and paths",{"type":144,"value":1286}," the module can fetch. It is not an SSRF sandbox.",{"title":1288,"searchDepth":1289,"depth":1289,"links":1290},"",4,[1291,1293,1294,1295,1296],{"id":149,"depth":1292,"text":152},2,{"id":316,"depth":1292,"text":319},{"id":672,"depth":1292,"text":675},{"id":896,"depth":1292,"text":899},{"id":964,"depth":1292,"text":967,"children":1297},[1298],{"id":1170,"depth":1299,"text":1173},3,"markdown","docs",{"source":1303,"path":1304,"stem":1305,"dir":1306,"extension":1307},"content","docs\u002F2.guides\u002F3.images-and-fonts.md","docs\u002F2.guides\u002F3.images-and-fonts","guides","md",{"$docs\u002Freference\u002Fmodule-options":96},{"requestedPath":48,"resolvedPath":48,"alternates":1310},[],{"requested":1312,"resolved":1313,"usedFallback":9},{},{"locale":8},{"previous":1315,"next":1316},{"title":38,"id":39,"canonicalKey":40,"locale":8,"draft":9,"path":42},{"title":50,"id":51,"canonicalKey":52,"locale":8,"draft":9,"path":54},{"left":1318,"top":1318,"width":1319,"height":1320,"rotate":1318,"vFlip":9,"hFlip":9,"body":1321},0,256,221,"\u003Cpath fill=\"#41b883\" d=\"M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z\"\u002F>\u003Cpath fill=\"#41b883\" d=\"m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z\"\u002F>\u003Cpath fill=\"#35495e\" d=\"M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z\"\u002F>",{"left":1318,"top":1318,"width":1319,"height":1323,"rotate":1318,"vFlip":9,"hFlip":9,"body":1324},168,"\u003Cpath fill=\"#00dc82\" d=\"M143.618 167.029h95.166c3.023 0 5.992-.771 8.61-2.237a16.96 16.96 0 0 0 6.302-6.115a16.3 16.3 0 0 0 2.304-8.352c0-2.932-.799-5.811-2.312-8.35L189.778 34.6a16.97 16.97 0 0 0-6.301-6.113a17.6 17.6 0 0 0-8.608-2.238c-3.023 0-5.991.772-8.609 2.238a16.96 16.96 0 0 0-6.3 6.113l-16.342 27.473l-31.95-53.724a17 17 0 0 0-6.304-6.112A17.64 17.64 0 0 0 96.754 0c-3.022 0-5.992.772-8.61 2.237a17 17 0 0 0-6.303 6.112L2.31 141.975a16.3 16.3 0 0 0-2.31 8.35c0 2.932.793 5.813 2.304 8.352a16.96 16.96 0 0 0 6.302 6.115a17.6 17.6 0 0 0 8.61 2.237h59.737c23.669 0 41.123-10.084 53.134-29.758l29.159-48.983l15.618-26.215l46.874 78.742h-62.492zm-67.64-26.24l-41.688-.01L96.782 35.796l31.181 52.492l-20.877 35.084c-7.976 12.765-17.037 17.416-31.107 17.416\"\u002F>",{"left":1318,"top":1318,"width":1326,"height":1326,"rotate":1318,"vFlip":9,"hFlip":9,"body":1327},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Crect width=\"8\" height=\"4\" x=\"8\" y=\"2\" rx=\"1\" ry=\"1\"\u002F>\u003Cpath d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\u002F>\u003C\u002Fg>",1786511353615]