[{"data":1,"prerenderedAt":1907},["ShallowReactive",2],{"blog-es-bold-italic-together":3},{"id":4,"title":5,"author":6,"body":10,"date":1876,"description":1877,"draft":1878,"extension":1879,"howTo":1880,"image":1898,"meta":1899,"navigation":146,"path":1900,"seo":1901,"stem":1902,"tags":1903,"updated":1898,"__hash__":1906},"blogEs/es/blog/013.bold-italic-together.md","¿Cómo uso negrita y cursiva juntas en gpdf?",{"name":7,"url":8,"avatar":9},"Taiki Noda","https://nadai.dev/en/about","https://nadai.dev/og-default.png",{"type":11,"value":12,"toc":1866},"minimark",[13,18,27,31,39,101,120,123,127,688,710,714,717,793,823,827,833,980,990,993,1601,1614,1618,1626,1738,1760,1787,1791,1824,1828,1831,1848,1862],[14,15,17],"h2",{"id":16},"la-pregunta-dicha-de-otra-forma","La pregunta, dicha de otra forma",[19,20,21,22,26],"p",{},"Quiero que una palabra —o una línea entera— aparezca al mismo tiempo ",[23,24,25],"strong",{},"en negrita y en cursiva"," dentro del PDF. ¿Cómo pongo ambos estilos a la vez y por qué a veces el resultado no se ve ni negrita ni cursiva?",[14,28,30],{"id":29},"la-respuesta-corta","La respuesta corta",[19,32,33,34,38],{},"Pasa ambas opciones en la misma llamada a ",[35,36,37],"code",{},"c.Text",":",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","c.Text(\"WARNING\", template.Bold(), template.Italic())\n","go","",[35,47,48],{"__ignoreMap":45},[49,50,53,57,61,65,68,71,75,77,80,83,85,88,91,93,95,98],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sTEyZ","c",[49,58,60],{"class":59},"sMK4o",".",[49,62,64],{"class":63},"s2Zo4","Text",[49,66,67],{"class":59},"(",[49,69,70],{"class":59},"\"",[49,72,74],{"class":73},"sfazB","WARNING",[49,76,70],{"class":59},[49,78,79],{"class":59},",",[49,81,82],{"class":55}," template",[49,84,60],{"class":59},[49,86,87],{"class":63},"Bold",[49,89,90],{"class":59},"(),",[49,92,82],{"class":55},[49,94,60],{"class":59},[49,96,97],{"class":63},"Italic",[49,99,100],{"class":59},"())\n",[19,102,103,104,107,108,111,112,115,116,119],{},"gpdf construye el ID de variante ",[35,105,106],{},"Family-BoldItalic"," y lo busca entre las fuentes registradas. Para las familias Adobe Standard 14 (Helvetica, Courier, Times) esto funciona tal cual: gpdf aliasea internamente ",[35,109,110],{},"-BoldItalic"," al nombre canónico ",[35,113,114],{},"-BoldOblique"," y usa las métricas AFM incorporadas. Con una fuente TrueType que registres tú, ",[23,117,118],{},"hay que registrar las cuatro variantes"," o la búsqueda cae en silencio a la familia base.",[19,121,122],{},"Ese segundo punto es donde viven la mayoría de los bugs.",[14,124,126],{"id":125},"código-funcional-helvetica-sin-registrar-fuentes","Código funcional (Helvetica, sin registrar fuentes)",[40,128,130],{"className":42,"code":129,"language":44,"meta":45,"style":45},"package main\n\nimport (\n    \"log\"\n    \"os\"\n\n    \"github.com/gpdf-dev/gpdf\"\n    \"github.com/gpdf-dev/gpdf/document\"\n    \"github.com/gpdf-dev/gpdf/template\"\n)\n\nfunc main() {\n    doc := gpdf.NewDocument(\n        gpdf.WithPageSize(gpdf.A4),\n        gpdf.WithMargins(document.UniformEdges(document.Mm(20))),\n    )\n\n    page := doc.AddPage()\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Text(\"Regular Helvetica.\")\n            c.Text(\"Bold only.\", template.Bold())\n            c.Text(\"Italic only.\", template.Italic())\n            c.Text(\"Bold and italic.\", template.Bold(), template.Italic())\n        })\n    })\n\n    data, err := doc.Generate()\n    if err != nil {\n        log.Fatal(err)\n    }\n    if err := os.WriteFile(\"emphasis.pdf\", data, 0o644); err != nil {\n        log.Fatal(err)\n    }\n}\n",[35,131,132,141,148,158,170,180,185,195,205,215,221,226,241,261,285,323,329,334,353,387,423,444,472,500,536,542,548,553,575,591,609,615,662,677,682],{"__ignoreMap":45},[49,133,134,137],{"class":51,"line":52},[49,135,136],{"class":59},"package",[49,138,140],{"class":139},"sBMFI"," main\n",[49,142,144],{"class":51,"line":143},2,[49,145,147],{"emptyLinePlaceholder":146},true,"\n",[49,149,151,155],{"class":51,"line":150},3,[49,152,154],{"class":153},"s7zQu","import",[49,156,157],{"class":59}," (\n",[49,159,161,164,167],{"class":51,"line":160},4,[49,162,163],{"class":59},"    \"",[49,165,166],{"class":139},"log",[49,168,169],{"class":59},"\"\n",[49,171,173,175,178],{"class":51,"line":172},5,[49,174,163],{"class":59},[49,176,177],{"class":139},"os",[49,179,169],{"class":59},[49,181,183],{"class":51,"line":182},6,[49,184,147],{"emptyLinePlaceholder":146},[49,186,188,190,193],{"class":51,"line":187},7,[49,189,163],{"class":59},[49,191,192],{"class":139},"github.com/gpdf-dev/gpdf",[49,194,169],{"class":59},[49,196,198,200,203],{"class":51,"line":197},8,[49,199,163],{"class":59},[49,201,202],{"class":139},"github.com/gpdf-dev/gpdf/document",[49,204,169],{"class":59},[49,206,208,210,213],{"class":51,"line":207},9,[49,209,163],{"class":59},[49,211,212],{"class":139},"github.com/gpdf-dev/gpdf/template",[49,214,169],{"class":59},[49,216,218],{"class":51,"line":217},10,[49,219,220],{"class":59},")\n",[49,222,224],{"class":51,"line":223},11,[49,225,147],{"emptyLinePlaceholder":146},[49,227,229,232,235,238],{"class":51,"line":228},12,[49,230,231],{"class":59},"func",[49,233,234],{"class":63}," main",[49,236,237],{"class":59},"()",[49,239,240],{"class":59}," {\n",[49,242,244,247,250,253,255,258],{"class":51,"line":243},13,[49,245,246],{"class":55},"    doc ",[49,248,249],{"class":59},":=",[49,251,252],{"class":55}," gpdf",[49,254,60],{"class":59},[49,256,257],{"class":63},"NewDocument",[49,259,260],{"class":59},"(\n",[49,262,264,267,269,272,274,277,279,282],{"class":51,"line":263},14,[49,265,266],{"class":55},"        gpdf",[49,268,60],{"class":59},[49,270,271],{"class":63},"WithPageSize",[49,273,67],{"class":59},[49,275,276],{"class":55},"gpdf",[49,278,60],{"class":59},[49,280,281],{"class":55},"A4",[49,283,284],{"class":59},"),\n",[49,286,288,290,292,295,297,300,302,305,307,309,311,314,316,320],{"class":51,"line":287},15,[49,289,266],{"class":55},[49,291,60],{"class":59},[49,293,294],{"class":63},"WithMargins",[49,296,67],{"class":59},[49,298,299],{"class":55},"document",[49,301,60],{"class":59},[49,303,304],{"class":63},"UniformEdges",[49,306,67],{"class":59},[49,308,299],{"class":55},[49,310,60],{"class":59},[49,312,313],{"class":63},"Mm",[49,315,67],{"class":59},[49,317,319],{"class":318},"sbssI","20",[49,321,322],{"class":59},"))),\n",[49,324,326],{"class":51,"line":325},16,[49,327,328],{"class":59},"    )\n",[49,330,332],{"class":51,"line":331},17,[49,333,147],{"emptyLinePlaceholder":146},[49,335,337,340,342,345,347,350],{"class":51,"line":336},18,[49,338,339],{"class":55},"    page ",[49,341,249],{"class":59},[49,343,344],{"class":55}," doc",[49,346,60],{"class":59},[49,348,349],{"class":63},"AddPage",[49,351,352],{"class":59},"()\n",[49,354,356,359,361,364,367,371,374,377,379,382,385],{"class":51,"line":355},19,[49,357,358],{"class":55},"    page",[49,360,60],{"class":59},[49,362,363],{"class":63},"AutoRow",[49,365,366],{"class":59},"(func(",[49,368,370],{"class":369},"sHdIc","r",[49,372,373],{"class":59}," *",[49,375,376],{"class":139},"template",[49,378,60],{"class":59},[49,380,381],{"class":139},"RowBuilder",[49,383,384],{"class":59},")",[49,386,240],{"class":59},[49,388,390,393,395,398,400,403,405,408,410,412,414,416,419,421],{"class":51,"line":389},20,[49,391,392],{"class":55},"        r",[49,394,60],{"class":59},[49,396,397],{"class":63},"Col",[49,399,67],{"class":59},[49,401,402],{"class":318},"12",[49,404,79],{"class":59},[49,406,407],{"class":59}," func(",[49,409,56],{"class":369},[49,411,373],{"class":59},[49,413,376],{"class":139},[49,415,60],{"class":59},[49,417,418],{"class":139},"ColBuilder",[49,420,384],{"class":59},[49,422,240],{"class":59},[49,424,426,429,431,433,435,437,440,442],{"class":51,"line":425},21,[49,427,428],{"class":55},"            c",[49,430,60],{"class":59},[49,432,64],{"class":63},[49,434,67],{"class":59},[49,436,70],{"class":59},[49,438,439],{"class":73},"Regular Helvetica.",[49,441,70],{"class":59},[49,443,220],{"class":59},[49,445,447,449,451,453,455,457,460,462,464,466,468,470],{"class":51,"line":446},22,[49,448,428],{"class":55},[49,450,60],{"class":59},[49,452,64],{"class":63},[49,454,67],{"class":59},[49,456,70],{"class":59},[49,458,459],{"class":73},"Bold only.",[49,461,70],{"class":59},[49,463,79],{"class":59},[49,465,82],{"class":55},[49,467,60],{"class":59},[49,469,87],{"class":63},[49,471,100],{"class":59},[49,473,475,477,479,481,483,485,488,490,492,494,496,498],{"class":51,"line":474},23,[49,476,428],{"class":55},[49,478,60],{"class":59},[49,480,64],{"class":63},[49,482,67],{"class":59},[49,484,70],{"class":59},[49,486,487],{"class":73},"Italic only.",[49,489,70],{"class":59},[49,491,79],{"class":59},[49,493,82],{"class":55},[49,495,60],{"class":59},[49,497,97],{"class":63},[49,499,100],{"class":59},[49,501,503,505,507,509,511,513,516,518,520,522,524,526,528,530,532,534],{"class":51,"line":502},24,[49,504,428],{"class":55},[49,506,60],{"class":59},[49,508,64],{"class":63},[49,510,67],{"class":59},[49,512,70],{"class":59},[49,514,515],{"class":73},"Bold and italic.",[49,517,70],{"class":59},[49,519,79],{"class":59},[49,521,82],{"class":55},[49,523,60],{"class":59},[49,525,87],{"class":63},[49,527,90],{"class":59},[49,529,82],{"class":55},[49,531,60],{"class":59},[49,533,97],{"class":63},[49,535,100],{"class":59},[49,537,539],{"class":51,"line":538},25,[49,540,541],{"class":59},"        })\n",[49,543,545],{"class":51,"line":544},26,[49,546,547],{"class":59},"    })\n",[49,549,551],{"class":51,"line":550},27,[49,552,147],{"emptyLinePlaceholder":146},[49,554,556,559,561,564,566,568,570,573],{"class":51,"line":555},28,[49,557,558],{"class":55},"    data",[49,560,79],{"class":59},[49,562,563],{"class":55}," err ",[49,565,249],{"class":59},[49,567,344],{"class":55},[49,569,60],{"class":59},[49,571,572],{"class":63},"Generate",[49,574,352],{"class":59},[49,576,578,581,583,586,589],{"class":51,"line":577},29,[49,579,580],{"class":153},"    if",[49,582,563],{"class":55},[49,584,585],{"class":59},"!=",[49,587,588],{"class":59}," nil",[49,590,240],{"class":59},[49,592,594,597,599,602,604,607],{"class":51,"line":593},30,[49,595,596],{"class":55},"        log",[49,598,60],{"class":59},[49,600,601],{"class":63},"Fatal",[49,603,67],{"class":59},[49,605,606],{"class":55},"err",[49,608,220],{"class":59},[49,610,612],{"class":51,"line":611},31,[49,613,614],{"class":59},"    }\n",[49,616,618,620,622,624,627,629,632,634,636,639,641,643,646,648,651,654,656,658,660],{"class":51,"line":617},32,[49,619,580],{"class":153},[49,621,563],{"class":55},[49,623,249],{"class":59},[49,625,626],{"class":55}," os",[49,628,60],{"class":59},[49,630,631],{"class":63},"WriteFile",[49,633,67],{"class":59},[49,635,70],{"class":59},[49,637,638],{"class":73},"emphasis.pdf",[49,640,70],{"class":59},[49,642,79],{"class":59},[49,644,645],{"class":55}," data",[49,647,79],{"class":59},[49,649,650],{"class":318}," 0o644",[49,652,653],{"class":59},");",[49,655,563],{"class":55},[49,657,585],{"class":59},[49,659,588],{"class":59},[49,661,240],{"class":59},[49,663,665,667,669,671,673,675],{"class":51,"line":664},33,[49,666,596],{"class":55},[49,668,60],{"class":59},[49,670,601],{"class":63},[49,672,67],{"class":59},[49,674,606],{"class":55},[49,676,220],{"class":59},[49,678,680],{"class":51,"line":679},34,[49,681,614],{"class":59},[49,683,685],{"class":51,"line":684},35,[49,686,687],{"class":59},"}\n",[19,689,690,691,694,695,698,699,698,702,705,706,709],{},"Cuatro líneas, cuatro estilos visibles. Ni una sola llamada a ",[35,692,693],{},"WithFont",". El PDF resultante referencia ",[35,696,697],{},"Helvetica",", ",[35,700,701],{},"Helvetica-Bold",[35,703,704],{},"Helvetica-Oblique"," y ",[35,707,708],{},"Helvetica-BoldOblique"," como entradas Type 1 no embebidas, y cualquier visor de PDF ya las tiene.",[14,711,713],{"id":712},"qué-hace-gpdf-en-realidad","Qué hace gpdf en realidad",[19,715,716],{},"El resolver compone el ID de variante a partir de los flags de estilo:",[718,719,720,740],"table",{},[721,722,723],"thead",{},[724,725,726,732,737],"tr",{},[727,728,729],"th",{},[35,730,731],{},"Bold()",[727,733,734],{},[35,735,736],{},"Italic()",[727,738,739],{},"ID de variante que se busca",[741,742,743,755,766,780],"tbody",{},[724,744,745,749,751],{},[746,747,748],"td",{},"no",[746,750,748],{},[746,752,753],{},[35,754,697],{},[724,756,757,760,762],{},[746,758,759],{},"sí",[746,761,748],{},[746,763,764],{},[35,765,701],{},[724,767,768,770,772],{},[746,769,748],{},[746,771,759],{},[746,773,774,777,778],{},[35,775,776],{},"Helvetica-Italic"," → alias a ",[35,779,704],{},[724,781,782,784,786],{},[746,783,759],{},[746,785,759],{},[746,787,788,777,791],{},[35,789,790],{},"Helvetica-BoldItalic",[35,792,708],{},[19,794,795,796,799,800,803,804,806,807,809,810,705,812,809,814,816,817,803,820,60],{},"El paso del alias es lo único que hace especial a Helvetica. ",[35,797,798],{},"buildFontVariantID"," siempre emite los sufijos genéricos ",[35,801,802],{},"-Italic"," / ",[35,805,110],{}," sin importar la familia; luego el hook de init de Standard 14 apunta ",[35,808,776],{}," a ",[35,811,704],{},[35,813,790],{},[35,815,708],{},", de modo que las métricas coinciden con lo que dibuja el visor. Courier recibe el mismo tratamiento. Times no necesita alias porque su nombre canónico ya es ",[35,818,819],{},"Times-Italic",[35,821,822],{},"Times-BoldItalic",[14,824,826],{"id":825},"la-trampa-las-fuentes-truetype-necesitan-las-cuatro-registros","La trampa: las fuentes TrueType necesitan las cuatro registros",[19,828,829,830,832],{},"Aquí es donde los documentos CJK se rompen en silencio. Si registras Noto Sans JP pero olvidas una variante, el hueco que falta ",[23,831,748],{}," pasa por Bold o Italic como consuelo: cae directo a la familia base.",[40,834,836],{"className":42,"code":835,"language":44,"meta":45,"style":45},"// Parece bien. No lo está.\ndoc := gpdf.NewDocument(\n    gpdf.WithFont(\"NotoSansJP\", regular),\n    gpdf.WithFont(\"NotoSansJP-Bold\", bold),\n    gpdf.WithDefaultFont(\"NotoSansJP\", 12),\n)\n\n// Esto se dibuja en NotoSansJP normal: ni negrita ni cursiva.\nc.Text(\"強調したい\", template.Bold(), template.Italic())\n",[35,837,838,844,859,884,908,932,936,940,945],{"__ignoreMap":45},[49,839,840],{"class":51,"line":52},[49,841,843],{"class":842},"sHwdD","// Parece bien. No lo está.\n",[49,845,846,849,851,853,855,857],{"class":51,"line":143},[49,847,848],{"class":55},"doc ",[49,850,249],{"class":59},[49,852,252],{"class":55},[49,854,60],{"class":59},[49,856,257],{"class":63},[49,858,260],{"class":59},[49,860,861,864,866,868,870,872,875,877,879,882],{"class":51,"line":150},[49,862,863],{"class":55},"    gpdf",[49,865,60],{"class":59},[49,867,693],{"class":63},[49,869,67],{"class":59},[49,871,70],{"class":59},[49,873,874],{"class":73},"NotoSansJP",[49,876,70],{"class":59},[49,878,79],{"class":59},[49,880,881],{"class":55}," regular",[49,883,284],{"class":59},[49,885,886,888,890,892,894,896,899,901,903,906],{"class":51,"line":160},[49,887,863],{"class":55},[49,889,60],{"class":59},[49,891,693],{"class":63},[49,893,67],{"class":59},[49,895,70],{"class":59},[49,897,898],{"class":73},"NotoSansJP-Bold",[49,900,70],{"class":59},[49,902,79],{"class":59},[49,904,905],{"class":55}," bold",[49,907,284],{"class":59},[49,909,910,912,914,917,919,921,923,925,927,930],{"class":51,"line":172},[49,911,863],{"class":55},[49,913,60],{"class":59},[49,915,916],{"class":63},"WithDefaultFont",[49,918,67],{"class":59},[49,920,70],{"class":59},[49,922,874],{"class":73},[49,924,70],{"class":59},[49,926,79],{"class":59},[49,928,929],{"class":318}," 12",[49,931,284],{"class":59},[49,933,934],{"class":51,"line":182},[49,935,220],{"class":59},[49,937,938],{"class":51,"line":187},[49,939,147],{"emptyLinePlaceholder":146},[49,941,942],{"class":51,"line":197},[49,943,944],{"class":842},"// Esto se dibuja en NotoSansJP normal: ni negrita ni cursiva.\n",[49,946,947,949,951,953,955,957,960,962,964,966,968,970,972,974,976,978],{"class":51,"line":207},[49,948,56],{"class":55},[49,950,60],{"class":59},[49,952,64],{"class":63},[49,954,67],{"class":59},[49,956,70],{"class":59},[49,958,959],{"class":73},"強調したい",[49,961,70],{"class":59},[49,963,79],{"class":59},[49,965,82],{"class":55},[49,967,60],{"class":59},[49,969,87],{"class":63},[49,971,90],{"class":59},[49,973,82],{"class":55},[49,975,60],{"class":59},[49,977,97],{"class":63},[49,979,100],{"class":59},[19,981,982,983,986,987,989],{},"La razón está en el resolver. Primero busca ",[35,984,985],{},"NotoSansJP-BoldItalic",", falla y cae a exactamente una cosa: la familia base ",[35,988,874],{},". No hay paso intermedio que pruebe con la versión en negrita como consuelo. Pediste bold-italic, recibiste regular.",[19,991,992],{},"El arreglo es registrar cada variante que vayas a usar:",[40,994,996],{"className":42,"code":995,"language":44,"meta":45,"style":45},"package main\n\nimport (\n    \"log\"\n    \"os\"\n\n    \"github.com/gpdf-dev/gpdf\"\n    \"github.com/gpdf-dev/gpdf/document\"\n    \"github.com/gpdf-dev/gpdf/template\"\n)\n\nfunc main() {\n    regular := mustRead(\"NotoSansJP-Regular.ttf\")\n    bold := mustRead(\"NotoSansJP-Bold.ttf\")\n    italic := mustRead(\"NotoSansJP-Italic.ttf\")\n    boldItalic := mustRead(\"NotoSansJP-BoldItalic.ttf\")\n\n    doc := gpdf.NewDocument(\n        gpdf.WithPageSize(gpdf.A4),\n        gpdf.WithFont(\"NotoSansJP\", regular),\n        gpdf.WithFont(\"NotoSansJP-Bold\", bold),\n        gpdf.WithFont(\"NotoSansJP-Italic\", italic),\n        gpdf.WithFont(\"NotoSansJP-BoldItalic\", boldItalic),\n        gpdf.WithDefaultFont(\"NotoSansJP\", 12),\n    )\n\n    page := doc.AddPage()\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Text(\"Texto normal\")\n            c.Text(\"énfasis\", template.Bold(), template.Italic())\n        })\n    })\n\n    data, _ := doc.Generate()\n    os.WriteFile(\"jp-emphasis.pdf\", data, 0o644)\n}\n\nfunc mustRead(path string) []byte {\n    b, err := os.ReadFile(path)\n    if err != nil { log.Fatal(err) }\n    return b\n}\n",[35,997,998,1004,1008,1014,1022,1030,1034,1042,1050,1058,1062,1066,1076,1097,1117,1137,1157,1161,1175,1193,1215,1237,1261,1284,1306,1310,1314,1328,1352,1382,1401,1436,1440,1444,1448,1467,1496,1501,1506,1532,1557,1587,1596],{"__ignoreMap":45},[49,999,1000,1002],{"class":51,"line":52},[49,1001,136],{"class":59},[49,1003,140],{"class":139},[49,1005,1006],{"class":51,"line":143},[49,1007,147],{"emptyLinePlaceholder":146},[49,1009,1010,1012],{"class":51,"line":150},[49,1011,154],{"class":153},[49,1013,157],{"class":59},[49,1015,1016,1018,1020],{"class":51,"line":160},[49,1017,163],{"class":59},[49,1019,166],{"class":139},[49,1021,169],{"class":59},[49,1023,1024,1026,1028],{"class":51,"line":172},[49,1025,163],{"class":59},[49,1027,177],{"class":139},[49,1029,169],{"class":59},[49,1031,1032],{"class":51,"line":182},[49,1033,147],{"emptyLinePlaceholder":146},[49,1035,1036,1038,1040],{"class":51,"line":187},[49,1037,163],{"class":59},[49,1039,192],{"class":139},[49,1041,169],{"class":59},[49,1043,1044,1046,1048],{"class":51,"line":197},[49,1045,163],{"class":59},[49,1047,202],{"class":139},[49,1049,169],{"class":59},[49,1051,1052,1054,1056],{"class":51,"line":207},[49,1053,163],{"class":59},[49,1055,212],{"class":139},[49,1057,169],{"class":59},[49,1059,1060],{"class":51,"line":217},[49,1061,220],{"class":59},[49,1063,1064],{"class":51,"line":223},[49,1065,147],{"emptyLinePlaceholder":146},[49,1067,1068,1070,1072,1074],{"class":51,"line":228},[49,1069,231],{"class":59},[49,1071,234],{"class":63},[49,1073,237],{"class":59},[49,1075,240],{"class":59},[49,1077,1078,1081,1083,1086,1088,1090,1093,1095],{"class":51,"line":243},[49,1079,1080],{"class":55},"    regular ",[49,1082,249],{"class":59},[49,1084,1085],{"class":63}," mustRead",[49,1087,67],{"class":59},[49,1089,70],{"class":59},[49,1091,1092],{"class":73},"NotoSansJP-Regular.ttf",[49,1094,70],{"class":59},[49,1096,220],{"class":59},[49,1098,1099,1102,1104,1106,1108,1110,1113,1115],{"class":51,"line":263},[49,1100,1101],{"class":55},"    bold ",[49,1103,249],{"class":59},[49,1105,1085],{"class":63},[49,1107,67],{"class":59},[49,1109,70],{"class":59},[49,1111,1112],{"class":73},"NotoSansJP-Bold.ttf",[49,1114,70],{"class":59},[49,1116,220],{"class":59},[49,1118,1119,1122,1124,1126,1128,1130,1133,1135],{"class":51,"line":287},[49,1120,1121],{"class":55},"    italic ",[49,1123,249],{"class":59},[49,1125,1085],{"class":63},[49,1127,67],{"class":59},[49,1129,70],{"class":59},[49,1131,1132],{"class":73},"NotoSansJP-Italic.ttf",[49,1134,70],{"class":59},[49,1136,220],{"class":59},[49,1138,1139,1142,1144,1146,1148,1150,1153,1155],{"class":51,"line":325},[49,1140,1141],{"class":55},"    boldItalic ",[49,1143,249],{"class":59},[49,1145,1085],{"class":63},[49,1147,67],{"class":59},[49,1149,70],{"class":59},[49,1151,1152],{"class":73},"NotoSansJP-BoldItalic.ttf",[49,1154,70],{"class":59},[49,1156,220],{"class":59},[49,1158,1159],{"class":51,"line":331},[49,1160,147],{"emptyLinePlaceholder":146},[49,1162,1163,1165,1167,1169,1171,1173],{"class":51,"line":336},[49,1164,246],{"class":55},[49,1166,249],{"class":59},[49,1168,252],{"class":55},[49,1170,60],{"class":59},[49,1172,257],{"class":63},[49,1174,260],{"class":59},[49,1176,1177,1179,1181,1183,1185,1187,1189,1191],{"class":51,"line":355},[49,1178,266],{"class":55},[49,1180,60],{"class":59},[49,1182,271],{"class":63},[49,1184,67],{"class":59},[49,1186,276],{"class":55},[49,1188,60],{"class":59},[49,1190,281],{"class":55},[49,1192,284],{"class":59},[49,1194,1195,1197,1199,1201,1203,1205,1207,1209,1211,1213],{"class":51,"line":389},[49,1196,266],{"class":55},[49,1198,60],{"class":59},[49,1200,693],{"class":63},[49,1202,67],{"class":59},[49,1204,70],{"class":59},[49,1206,874],{"class":73},[49,1208,70],{"class":59},[49,1210,79],{"class":59},[49,1212,881],{"class":55},[49,1214,284],{"class":59},[49,1216,1217,1219,1221,1223,1225,1227,1229,1231,1233,1235],{"class":51,"line":425},[49,1218,266],{"class":55},[49,1220,60],{"class":59},[49,1222,693],{"class":63},[49,1224,67],{"class":59},[49,1226,70],{"class":59},[49,1228,898],{"class":73},[49,1230,70],{"class":59},[49,1232,79],{"class":59},[49,1234,905],{"class":55},[49,1236,284],{"class":59},[49,1238,1239,1241,1243,1245,1247,1249,1252,1254,1256,1259],{"class":51,"line":446},[49,1240,266],{"class":55},[49,1242,60],{"class":59},[49,1244,693],{"class":63},[49,1246,67],{"class":59},[49,1248,70],{"class":59},[49,1250,1251],{"class":73},"NotoSansJP-Italic",[49,1253,70],{"class":59},[49,1255,79],{"class":59},[49,1257,1258],{"class":55}," italic",[49,1260,284],{"class":59},[49,1262,1263,1265,1267,1269,1271,1273,1275,1277,1279,1282],{"class":51,"line":474},[49,1264,266],{"class":55},[49,1266,60],{"class":59},[49,1268,693],{"class":63},[49,1270,67],{"class":59},[49,1272,70],{"class":59},[49,1274,985],{"class":73},[49,1276,70],{"class":59},[49,1278,79],{"class":59},[49,1280,1281],{"class":55}," boldItalic",[49,1283,284],{"class":59},[49,1285,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304],{"class":51,"line":502},[49,1287,266],{"class":55},[49,1289,60],{"class":59},[49,1291,916],{"class":63},[49,1293,67],{"class":59},[49,1295,70],{"class":59},[49,1297,874],{"class":73},[49,1299,70],{"class":59},[49,1301,79],{"class":59},[49,1303,929],{"class":318},[49,1305,284],{"class":59},[49,1307,1308],{"class":51,"line":538},[49,1309,328],{"class":59},[49,1311,1312],{"class":51,"line":544},[49,1313,147],{"emptyLinePlaceholder":146},[49,1315,1316,1318,1320,1322,1324,1326],{"class":51,"line":550},[49,1317,339],{"class":55},[49,1319,249],{"class":59},[49,1321,344],{"class":55},[49,1323,60],{"class":59},[49,1325,349],{"class":63},[49,1327,352],{"class":59},[49,1329,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350],{"class":51,"line":555},[49,1331,358],{"class":55},[49,1333,60],{"class":59},[49,1335,363],{"class":63},[49,1337,366],{"class":59},[49,1339,370],{"class":369},[49,1341,373],{"class":59},[49,1343,376],{"class":139},[49,1345,60],{"class":59},[49,1347,381],{"class":139},[49,1349,384],{"class":59},[49,1351,240],{"class":59},[49,1353,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380],{"class":51,"line":577},[49,1355,392],{"class":55},[49,1357,60],{"class":59},[49,1359,397],{"class":63},[49,1361,67],{"class":59},[49,1363,402],{"class":318},[49,1365,79],{"class":59},[49,1367,407],{"class":59},[49,1369,56],{"class":369},[49,1371,373],{"class":59},[49,1373,376],{"class":139},[49,1375,60],{"class":59},[49,1377,418],{"class":139},[49,1379,384],{"class":59},[49,1381,240],{"class":59},[49,1383,1384,1386,1388,1390,1392,1394,1397,1399],{"class":51,"line":593},[49,1385,428],{"class":55},[49,1387,60],{"class":59},[49,1389,64],{"class":63},[49,1391,67],{"class":59},[49,1393,70],{"class":59},[49,1395,1396],{"class":73},"Texto normal",[49,1398,70],{"class":59},[49,1400,220],{"class":59},[49,1402,1403,1405,1407,1409,1411,1413,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434],{"class":51,"line":611},[49,1404,428],{"class":55},[49,1406,60],{"class":59},[49,1408,64],{"class":63},[49,1410,67],{"class":59},[49,1412,70],{"class":59},[49,1414,1415],{"class":73},"énfasis",[49,1417,70],{"class":59},[49,1419,79],{"class":59},[49,1421,82],{"class":55},[49,1423,60],{"class":59},[49,1425,87],{"class":63},[49,1427,90],{"class":59},[49,1429,82],{"class":55},[49,1431,60],{"class":59},[49,1433,97],{"class":63},[49,1435,100],{"class":59},[49,1437,1438],{"class":51,"line":617},[49,1439,541],{"class":59},[49,1441,1442],{"class":51,"line":664},[49,1443,547],{"class":59},[49,1445,1446],{"class":51,"line":679},[49,1447,147],{"emptyLinePlaceholder":146},[49,1449,1450,1452,1454,1457,1459,1461,1463,1465],{"class":51,"line":684},[49,1451,558],{"class":55},[49,1453,79],{"class":59},[49,1455,1456],{"class":55}," _ ",[49,1458,249],{"class":59},[49,1460,344],{"class":55},[49,1462,60],{"class":59},[49,1464,572],{"class":63},[49,1466,352],{"class":59},[49,1468,1470,1473,1475,1477,1479,1481,1484,1486,1488,1490,1492,1494],{"class":51,"line":1469},36,[49,1471,1472],{"class":55},"    os",[49,1474,60],{"class":59},[49,1476,631],{"class":63},[49,1478,67],{"class":59},[49,1480,70],{"class":59},[49,1482,1483],{"class":73},"jp-emphasis.pdf",[49,1485,70],{"class":59},[49,1487,79],{"class":59},[49,1489,645],{"class":55},[49,1491,79],{"class":59},[49,1493,650],{"class":318},[49,1495,220],{"class":59},[49,1497,1499],{"class":51,"line":1498},37,[49,1500,687],{"class":59},[49,1502,1504],{"class":51,"line":1503},38,[49,1505,147],{"emptyLinePlaceholder":146},[49,1507,1509,1511,1513,1515,1518,1522,1524,1527,1530],{"class":51,"line":1508},39,[49,1510,231],{"class":59},[49,1512,1085],{"class":63},[49,1514,67],{"class":59},[49,1516,1517],{"class":369},"path",[49,1519,1521],{"class":1520},"spNyl"," string",[49,1523,384],{"class":59},[49,1525,1526],{"class":59}," []",[49,1528,1529],{"class":1520},"byte",[49,1531,240],{"class":59},[49,1533,1535,1538,1540,1542,1544,1546,1548,1551,1553,1555],{"class":51,"line":1534},40,[49,1536,1537],{"class":55},"    b",[49,1539,79],{"class":59},[49,1541,563],{"class":55},[49,1543,249],{"class":59},[49,1545,626],{"class":55},[49,1547,60],{"class":59},[49,1549,1550],{"class":63},"ReadFile",[49,1552,67],{"class":59},[49,1554,1517],{"class":55},[49,1556,220],{"class":59},[49,1558,1560,1562,1564,1566,1568,1571,1574,1576,1578,1580,1582,1584],{"class":51,"line":1559},41,[49,1561,580],{"class":153},[49,1563,563],{"class":55},[49,1565,585],{"class":59},[49,1567,588],{"class":59},[49,1569,1570],{"class":59}," {",[49,1572,1573],{"class":55}," log",[49,1575,60],{"class":59},[49,1577,601],{"class":63},[49,1579,67],{"class":59},[49,1581,606],{"class":55},[49,1583,384],{"class":59},[49,1585,1586],{"class":59}," }\n",[49,1588,1590,1593],{"class":51,"line":1589},42,[49,1591,1592],{"class":153},"    return",[49,1594,1595],{"class":55}," b\n",[49,1597,1599],{"class":51,"line":1598},43,[49,1600,687],{"class":59},[19,1602,1603,1604,1607,1608,1610,1611,1613],{},"De paso: la distribución oficial de Noto Sans JP no trae realmente un corte cursivo (slanted) —la tipografía japonesa apenas usa cursiva—, así que en la práctica la mayoría de los documentos japoneses registran solo regular y bold y no llaman a ",[35,1605,1606],{},"template.Italic()"," sobre spans japoneses. Está bien. La regla es: si nunca llamas a ",[35,1609,736],{}," sobre una familia, no necesitas su variante cursiva. La trampa solo aparece cuando llamas a ",[35,1612,736],{}," y no has registrado el archivo.",[14,1615,1617],{"id":1616},"mezclar-negrita-y-cursiva-en-el-mismo-párrafo","Mezclar negrita y cursiva en el mismo párrafo",[19,1619,1620,1622,1623,38],{},[35,1621,37],{}," aplica un único estilo a toda la cadena. Para énfasis en medio de la frase usa ",[35,1624,1625],{},"c.RichText",[40,1627,1629],{"className":42,"code":1628,"language":44,"meta":45,"style":45},"c.RichText(func(rt *template.RichTextBuilder) {\n    rt.Span(\"The \")\n    rt.Span(\"quick brown fox\", template.Bold(), template.Italic())\n    rt.Span(\" jumps over the lazy dog.\")\n})\n",[35,1630,1631,1658,1679,1714,1733],{"__ignoreMap":45},[49,1632,1633,1635,1637,1640,1642,1645,1647,1649,1651,1654,1656],{"class":51,"line":52},[49,1634,56],{"class":55},[49,1636,60],{"class":59},[49,1638,1639],{"class":63},"RichText",[49,1641,366],{"class":59},[49,1643,1644],{"class":369},"rt",[49,1646,373],{"class":59},[49,1648,376],{"class":139},[49,1650,60],{"class":59},[49,1652,1653],{"class":139},"RichTextBuilder",[49,1655,384],{"class":59},[49,1657,240],{"class":59},[49,1659,1660,1663,1665,1668,1670,1672,1675,1677],{"class":51,"line":143},[49,1661,1662],{"class":55},"    rt",[49,1664,60],{"class":59},[49,1666,1667],{"class":63},"Span",[49,1669,67],{"class":59},[49,1671,70],{"class":59},[49,1673,1674],{"class":73},"The ",[49,1676,70],{"class":59},[49,1678,220],{"class":59},[49,1680,1681,1683,1685,1687,1689,1691,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712],{"class":51,"line":150},[49,1682,1662],{"class":55},[49,1684,60],{"class":59},[49,1686,1667],{"class":63},[49,1688,67],{"class":59},[49,1690,70],{"class":59},[49,1692,1693],{"class":73},"quick brown fox",[49,1695,70],{"class":59},[49,1697,79],{"class":59},[49,1699,82],{"class":55},[49,1701,60],{"class":59},[49,1703,87],{"class":63},[49,1705,90],{"class":59},[49,1707,82],{"class":55},[49,1709,60],{"class":59},[49,1711,97],{"class":63},[49,1713,100],{"class":59},[49,1715,1716,1718,1720,1722,1724,1726,1729,1731],{"class":51,"line":160},[49,1717,1662],{"class":55},[49,1719,60],{"class":59},[49,1721,1667],{"class":63},[49,1723,67],{"class":59},[49,1725,70],{"class":59},[49,1727,1728],{"class":73}," jumps over the lazy dog.",[49,1730,70],{"class":59},[49,1732,220],{"class":59},[49,1734,1735],{"class":51,"line":172},[49,1736,1737],{"class":59},"})\n",[19,1739,1740,1741,1744,1745,1747,1748,1750,1751,1753,1754,1756,1757,1759],{},"Cada ",[35,1742,1743],{},"rt.Span"," tiene sus propios flags de estilo y el motor de layout hace los saltos de línea entre spans como lo haría un procesador de texto. Poner ",[35,1746,731],{}," + ",[35,1749,736],{}," en un único ",[35,1752,1667],{}," va al mismo lookup de variante ",[35,1755,110],{}," que ",[35,1758,37],{},": es el mismo camino en el código.",[19,1761,1762,1763,1765,1766,1768,1769,705,1772,1775,1776,705,1779,1782,1783,1786],{},"Un detalle que conviene nombrar: ",[35,1764,731],{}," e ",[35,1767,736],{}," son conmutativas. ",[35,1770,1771],{},"template.Italic(), template.Bold()",[35,1773,1774],{},"template.Bold(), template.Italic()"," producen salidas idénticas. Establecen dos campos distintos (",[35,1777,1778],{},"FontWeight",[35,1780,1781],{},"FontStyle",") sobre el mismo ",[35,1784,1785],{},"document.Style",", así que el orden no importa.",[14,1788,1790],{"id":1789},"recetas-relacionadas","Recetas relacionadas",[1792,1793,1794,1806,1813],"ul",{},[1795,1796,1797,1802,1803,1805],"li",{},[1798,1799,1801],"a",{"href":1800},"/es/blog/embed-japanese-font","¿Cómo embebo una fuente japonesa en gpdf?"," — recorrido completo de ",[35,1804,693],{}," incluyendo el patrón de cuatro variantes",[1795,1807,1808,1812],{},[1798,1809,1811],{"href":1810},"/es/blog/tofu-boxes-japanese","¿Por qué mi PDF muestra rectángulos vacíos (tofu) en japonés?"," — qué pinta tiene el \"fallback silencioso\" cuando ni siquiera la familia base está registrada",[1795,1814,1815,1819,1820,1823],{},[1798,1816,1818],{"href":1817},"/es/blog/noto-sans-jp-with-gpdf","¿Cómo uso Noto Sans JP con gpdf?"," — qué archivo Noto elegir y cómo ",[35,1821,1822],{},"go:embed"," simplifica la distribución",[14,1825,1827],{"id":1826},"prueba-gpdf","Prueba gpdf",[19,1829,1830],{},"gpdf es una librería Go para generar PDFs. Licencia MIT, sin dependencias externas, soporte CJK nativo.",[40,1832,1836],{"className":1833,"code":1834,"language":1835,"meta":45,"style":45},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[35,1837,1838],{"__ignoreMap":45},[49,1839,1840,1842,1845],{"class":51,"line":52},[49,1841,44],{"class":139},[49,1843,1844],{"class":73}," get",[49,1846,1847],{"class":73}," github.com/gpdf-dev/gpdf\n",[19,1849,1850,1856,1857],{},[1798,1851,1855],{"href":1852,"rel":1853},"https://github.com/gpdf-dev/gpdf",[1854],"nofollow","⭐ Star on GitHub"," · ",[1798,1858,1861],{"href":1859,"rel":1860},"https://gpdf.dev/es/docs/quickstart",[1854],"Leer la documentación",[1863,1864,1865],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":45,"searchDepth":143,"depth":143,"links":1867},[1868,1869,1870,1871,1872,1873,1874,1875],{"id":16,"depth":143,"text":17},{"id":29,"depth":143,"text":30},{"id":125,"depth":143,"text":126},{"id":712,"depth":143,"text":713},{"id":825,"depth":143,"text":826},{"id":1616,"depth":143,"text":1617},{"id":1789,"depth":143,"text":1790},{"id":1826,"depth":143,"text":1827},"2026-04-23","Basta con pasar template.Bold() y template.Italic() al mismo span. Pero con fuentes TrueType hay que registrar las cuatro variantes: si falta BoldItalic, la búsqueda cae silenciosamente a la familia base.",false,"md",{"name":1881,"totalTime":1882,"tools":1883,"steps":1885},"Aplicar negrita y cursiva combinadas en gpdf","PT10M",[1884],"Go 1.22+",[1886,1889,1892,1895],{"name":1887,"text":1888},"Pasa Bold() e Italic() en la misma llamada a c.Text","Escribe c.Text(\"aviso\", template.Bold(), template.Italic()). gpdf construye el ID de variante Family-BoldItalic y lo busca entre las fuentes registradas.",{"name":1890,"text":1891},"Aprovecha el alias interno para Helvetica y Courier","Helvetica-BoldItalic y Courier-BoldItalic se aliasean automáticamente a las métricas -BoldOblique de Adobe. Para las familias Standard 14 no hace falta WithFont.",{"name":1893,"text":1894},"Registra las cuatro variantes de una familia TrueType","Con NotoSansJP u otro TTF, llama a WithFont cuatro veces: NotoSansJP, NotoSansJP-Bold, NotoSansJP-Italic y NotoSansJP-BoldItalic. Las variantes que faltan caen a la familia base, no a la negrita.",{"name":1896,"text":1897},"Combina negrita y cursiva dentro de un párrafo con RichText","Para énfasis dentro de una frase usa c.RichText(func(rt) { rt.Span(\"plano\") ; rt.Span(\"negrita-cursiva\", template.Bold(), template.Italic()) }).",null,{},"/es/blog/bold-italic-together",{"title":5,"description":1877},"es/blog/013.bold-italic-together",[1904,1905],"recipe","tutorial","gy6LrFWd6m4DWDTdw_TmOKF7wBGS2fT_6qTmfrHXhTU",1779199042338]