[{"data":1,"prerenderedAt":1326},["ShallowReactive",2],{"blog-es-source-han-sans-jp-with-gpdf":3},{"id":4,"title":5,"author":6,"body":9,"date":1290,"description":1291,"draft":1292,"extension":1293,"howTo":1294,"image":1316,"meta":1317,"navigation":87,"path":1318,"seo":1319,"stem":1320,"tags":1321,"updated":1316,"__hash__":1325},"blogEs/es/blog/010.source-han-sans-jp-with-gpdf.md","¿Cómo uso Source Han Sans JP con gpdf?",{"name":7,"url":8},"gpdf team","https://gpdf.dev",{"type":10,"value":11,"toc":1278},"minimark",[12,17,34,38,56,60,709,722,726,737,740,825,836,840,875,882,906,915,919,922,930,933,1088,1102,1105,1109,1112,1149,1163,1167,1170,1184,1187,1202,1205,1209,1238,1242,1245,1262,1274],[13,14,16],"h2",{"id":15},"la-pregunta-en-otras-palabras","La pregunta, en otras palabras",[18,19,20,21,25,26,33],"p",{},"Quieres usar ",[22,23,24],"strong",{},"Source Han Sans JP"," — el sans-serif pan-CJK open source de Adobe, lanzado en 2014 como fruto de la colaboración Adobe–Google — en un documento ",[27,28,32],"a",{"href":29,"rel":30},"https://github.com/gpdf-dev/gpdf",[31],"nofollow","gpdf",". Puede ser porque tu equipo fija las fuentes a tags de release de GitHub para tener reproducibilidad, porque heredaste un design system que se estandarizó en Source Han hace años, o porque simplemente te gusta más la cadencia de releases de Adobe. Cualquier motivo vale. Antes de descargar nada, conviene tener claras tres cosas: qué archivo coger, cuál es la relación real con Noto Sans JP, y qué formato puede leer gpdf.",[13,35,37],{"id":36},"tldr","TL;DR",[18,39,40,41,45,46,51,52,55],{},"Descarga ",[42,43,44],"code",{},"SourceHanSansJP-Regular.ttf"," desde la ",[27,47,50],{"href":48,"rel":49},"https://github.com/adobe-fonts/source-han-sans/releases",[31],"página de releases de adobe-fonts/source-han-sans"," (el paquete TTF, no el OTF por defecto), pásalo a ",[42,53,54],{},"gpdf.WithFont(\"SourceHanSansJP\", bytes)"," y ponlo como fuente por defecto. Source Han Sans JP y Noto Sans JP comparten los mismos contornos de glifo — si no tienes preferencia por el tooling de Adobe, Noto es una descarga más directa.",[13,57,59],{"id":58},"el-ejemplo-completo","El ejemplo completo",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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    font, err := os.ReadFile(\"SourceHanSansJP-Regular.ttf\")\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    doc := gpdf.NewDocument(\n        gpdf.WithPageSize(gpdf.A4),\n        gpdf.WithMargins(document.UniformEdges(document.Mm(20))),\n        gpdf.WithFont(\"SourceHanSansJP\", font),\n        gpdf.WithDefaultFont(\"SourceHanSansJP\", 11),\n    )\n\n    page := doc.AddPage()\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Text(\"報告書\", template.FontSize(24), template.Bold())\n            c.Text(\"Source Han Sans JP — fuente CJK gratuita distribuida por Adobe.\")\n        })\n    })\n\n    data, err := doc.Generate()\n    if err != nil {\n        log.Fatal(err)\n    }\n    if err := os.WriteFile(\"report.pdf\", data, 0o644); err != nil {\n        log.Fatal(err)\n    }\n}\n","go","",[42,68,69,82,89,99,111,121,126,136,146,156,162,167,183,221,237,255,261,266,285,308,346,372,397,403,408,427,461,498,546,566,572,578,583,604,617,632,637,683,698,703],{"__ignoreMap":66},[70,71,74,78],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sMK4o","package",[70,79,81],{"class":80},"sBMFI"," main\n",[70,83,85],{"class":72,"line":84},2,[70,86,88],{"emptyLinePlaceholder":87},true,"\n",[70,90,92,96],{"class":72,"line":91},3,[70,93,95],{"class":94},"s7zQu","import",[70,97,98],{"class":76}," (\n",[70,100,102,105,108],{"class":72,"line":101},4,[70,103,104],{"class":76},"    \"",[70,106,107],{"class":80},"log",[70,109,110],{"class":76},"\"\n",[70,112,114,116,119],{"class":72,"line":113},5,[70,115,104],{"class":76},[70,117,118],{"class":80},"os",[70,120,110],{"class":76},[70,122,124],{"class":72,"line":123},6,[70,125,88],{"emptyLinePlaceholder":87},[70,127,129,131,134],{"class":72,"line":128},7,[70,130,104],{"class":76},[70,132,133],{"class":80},"github.com/gpdf-dev/gpdf",[70,135,110],{"class":76},[70,137,139,141,144],{"class":72,"line":138},8,[70,140,104],{"class":76},[70,142,143],{"class":80},"github.com/gpdf-dev/gpdf/document",[70,145,110],{"class":76},[70,147,149,151,154],{"class":72,"line":148},9,[70,150,104],{"class":76},[70,152,153],{"class":80},"github.com/gpdf-dev/gpdf/template",[70,155,110],{"class":76},[70,157,159],{"class":72,"line":158},10,[70,160,161],{"class":76},")\n",[70,163,165],{"class":72,"line":164},11,[70,166,88],{"emptyLinePlaceholder":87},[70,168,170,173,177,180],{"class":72,"line":169},12,[70,171,172],{"class":76},"func",[70,174,176],{"class":175},"s2Zo4"," main",[70,178,179],{"class":76},"()",[70,181,182],{"class":76}," {\n",[70,184,186,190,193,196,199,202,205,208,211,214,217,219],{"class":72,"line":185},13,[70,187,189],{"class":188},"sTEyZ","    font",[70,191,192],{"class":76},",",[70,194,195],{"class":188}," err ",[70,197,198],{"class":76},":=",[70,200,201],{"class":188}," os",[70,203,204],{"class":76},".",[70,206,207],{"class":175},"ReadFile",[70,209,210],{"class":76},"(",[70,212,213],{"class":76},"\"",[70,215,44],{"class":216},"sfazB",[70,218,213],{"class":76},[70,220,161],{"class":76},[70,222,224,227,229,232,235],{"class":72,"line":223},14,[70,225,226],{"class":94},"    if",[70,228,195],{"class":188},[70,230,231],{"class":76},"!=",[70,233,234],{"class":76}," nil",[70,236,182],{"class":76},[70,238,240,243,245,248,250,253],{"class":72,"line":239},15,[70,241,242],{"class":188},"        log",[70,244,204],{"class":76},[70,246,247],{"class":175},"Fatal",[70,249,210],{"class":76},[70,251,252],{"class":188},"err",[70,254,161],{"class":76},[70,256,258],{"class":72,"line":257},16,[70,259,260],{"class":76},"    }\n",[70,262,264],{"class":72,"line":263},17,[70,265,88],{"emptyLinePlaceholder":87},[70,267,269,272,274,277,279,282],{"class":72,"line":268},18,[70,270,271],{"class":188},"    doc ",[70,273,198],{"class":76},[70,275,276],{"class":188}," gpdf",[70,278,204],{"class":76},[70,280,281],{"class":175},"NewDocument",[70,283,284],{"class":76},"(\n",[70,286,288,291,293,296,298,300,302,305],{"class":72,"line":287},19,[70,289,290],{"class":188},"        gpdf",[70,292,204],{"class":76},[70,294,295],{"class":175},"WithPageSize",[70,297,210],{"class":76},[70,299,32],{"class":188},[70,301,204],{"class":76},[70,303,304],{"class":188},"A4",[70,306,307],{"class":76},"),\n",[70,309,311,313,315,318,320,323,325,328,330,332,334,337,339,343],{"class":72,"line":310},20,[70,312,290],{"class":188},[70,314,204],{"class":76},[70,316,317],{"class":175},"WithMargins",[70,319,210],{"class":76},[70,321,322],{"class":188},"document",[70,324,204],{"class":76},[70,326,327],{"class":175},"UniformEdges",[70,329,210],{"class":76},[70,331,322],{"class":188},[70,333,204],{"class":76},[70,335,336],{"class":175},"Mm",[70,338,210],{"class":76},[70,340,342],{"class":341},"sbssI","20",[70,344,345],{"class":76},"))),\n",[70,347,349,351,353,356,358,360,363,365,367,370],{"class":72,"line":348},21,[70,350,290],{"class":188},[70,352,204],{"class":76},[70,354,355],{"class":175},"WithFont",[70,357,210],{"class":76},[70,359,213],{"class":76},[70,361,362],{"class":216},"SourceHanSansJP",[70,364,213],{"class":76},[70,366,192],{"class":76},[70,368,369],{"class":188}," font",[70,371,307],{"class":76},[70,373,375,377,379,382,384,386,388,390,392,395],{"class":72,"line":374},22,[70,376,290],{"class":188},[70,378,204],{"class":76},[70,380,381],{"class":175},"WithDefaultFont",[70,383,210],{"class":76},[70,385,213],{"class":76},[70,387,362],{"class":216},[70,389,213],{"class":76},[70,391,192],{"class":76},[70,393,394],{"class":341}," 11",[70,396,307],{"class":76},[70,398,400],{"class":72,"line":399},23,[70,401,402],{"class":76},"    )\n",[70,404,406],{"class":72,"line":405},24,[70,407,88],{"emptyLinePlaceholder":87},[70,409,411,414,416,419,421,424],{"class":72,"line":410},25,[70,412,413],{"class":188},"    page ",[70,415,198],{"class":76},[70,417,418],{"class":188}," doc",[70,420,204],{"class":76},[70,422,423],{"class":175},"AddPage",[70,425,426],{"class":76},"()\n",[70,428,430,433,435,438,441,445,448,451,453,456,459],{"class":72,"line":429},26,[70,431,432],{"class":188},"    page",[70,434,204],{"class":76},[70,436,437],{"class":175},"AutoRow",[70,439,440],{"class":76},"(func(",[70,442,444],{"class":443},"sHdIc","r",[70,446,447],{"class":76}," *",[70,449,450],{"class":80},"template",[70,452,204],{"class":76},[70,454,455],{"class":80},"RowBuilder",[70,457,458],{"class":76},")",[70,460,182],{"class":76},[70,462,464,467,469,472,474,477,479,482,485,487,489,491,494,496],{"class":72,"line":463},27,[70,465,466],{"class":188},"        r",[70,468,204],{"class":76},[70,470,471],{"class":175},"Col",[70,473,210],{"class":76},[70,475,476],{"class":341},"12",[70,478,192],{"class":76},[70,480,481],{"class":76}," func(",[70,483,484],{"class":443},"c",[70,486,447],{"class":76},[70,488,450],{"class":80},[70,490,204],{"class":76},[70,492,493],{"class":80},"ColBuilder",[70,495,458],{"class":76},[70,497,182],{"class":76},[70,499,501,504,506,509,511,513,516,518,520,523,525,528,530,533,536,538,540,543],{"class":72,"line":500},28,[70,502,503],{"class":188},"            c",[70,505,204],{"class":76},[70,507,508],{"class":175},"Text",[70,510,210],{"class":76},[70,512,213],{"class":76},[70,514,515],{"class":216},"報告書",[70,517,213],{"class":76},[70,519,192],{"class":76},[70,521,522],{"class":188}," template",[70,524,204],{"class":76},[70,526,527],{"class":175},"FontSize",[70,529,210],{"class":76},[70,531,532],{"class":341},"24",[70,534,535],{"class":76},"),",[70,537,522],{"class":188},[70,539,204],{"class":76},[70,541,542],{"class":175},"Bold",[70,544,545],{"class":76},"())\n",[70,547,549,551,553,555,557,559,562,564],{"class":72,"line":548},29,[70,550,503],{"class":188},[70,552,204],{"class":76},[70,554,508],{"class":175},[70,556,210],{"class":76},[70,558,213],{"class":76},[70,560,561],{"class":216},"Source Han Sans JP — fuente CJK gratuita distribuida por Adobe.",[70,563,213],{"class":76},[70,565,161],{"class":76},[70,567,569],{"class":72,"line":568},30,[70,570,571],{"class":76},"        })\n",[70,573,575],{"class":72,"line":574},31,[70,576,577],{"class":76},"    })\n",[70,579,581],{"class":72,"line":580},32,[70,582,88],{"emptyLinePlaceholder":87},[70,584,586,589,591,593,595,597,599,602],{"class":72,"line":585},33,[70,587,588],{"class":188},"    data",[70,590,192],{"class":76},[70,592,195],{"class":188},[70,594,198],{"class":76},[70,596,418],{"class":188},[70,598,204],{"class":76},[70,600,601],{"class":175},"Generate",[70,603,426],{"class":76},[70,605,607,609,611,613,615],{"class":72,"line":606},34,[70,608,226],{"class":94},[70,610,195],{"class":188},[70,612,231],{"class":76},[70,614,234],{"class":76},[70,616,182],{"class":76},[70,618,620,622,624,626,628,630],{"class":72,"line":619},35,[70,621,242],{"class":188},[70,623,204],{"class":76},[70,625,247],{"class":175},[70,627,210],{"class":76},[70,629,252],{"class":188},[70,631,161],{"class":76},[70,633,635],{"class":72,"line":634},36,[70,636,260],{"class":76},[70,638,640,642,644,646,648,650,653,655,657,660,662,664,667,669,672,675,677,679,681],{"class":72,"line":639},37,[70,641,226],{"class":94},[70,643,195],{"class":188},[70,645,198],{"class":76},[70,647,201],{"class":188},[70,649,204],{"class":76},[70,651,652],{"class":175},"WriteFile",[70,654,210],{"class":76},[70,656,213],{"class":76},[70,658,659],{"class":216},"report.pdf",[70,661,213],{"class":76},[70,663,192],{"class":76},[70,665,666],{"class":188}," data",[70,668,192],{"class":76},[70,670,671],{"class":341}," 0o644",[70,673,674],{"class":76},");",[70,676,195],{"class":188},[70,678,231],{"class":76},[70,680,234],{"class":76},[70,682,182],{"class":76},[70,684,686,688,690,692,694,696],{"class":72,"line":685},38,[70,687,242],{"class":188},[70,689,204],{"class":76},[70,691,247],{"class":175},[70,693,210],{"class":76},[70,695,252],{"class":188},[70,697,161],{"class":76},[70,699,701],{"class":72,"line":700},39,[70,702,260],{"class":76},[70,704,706],{"class":72,"line":705},40,[70,707,708],{"class":76},"}\n",[18,710,711,712,715,716,719,720,204],{},"Deja el TTF junto a ",[42,713,714],{},"main.go",", corre ",[42,717,718],{},"go run main.go"," y tendrás un PDF de una página con japonés en ",[42,721,659],{},[13,723,725],{"id":724},"source-han-sans-jp-es-noto-sans-cjk-jp","Source Han Sans JP es Noto Sans CJK JP",[18,727,728,729,732,733,736],{},"El hecho que te ahorra horas de lectura: ",[22,730,731],{},"Source Han Sans y Noto Sans CJK son las mismas fuentes",". Adobe hizo el diseño de glifos, las tablas de métricas y la cobertura de caracteres. Google se encargó de un canal de distribución paralelo bajo el paraguas Noto. Ambas se lanzaron el 2014-07-15. Los contornos, la tabla ",[42,734,735],{},"hmtx"," y la cobertura de JIS X 0213 / Adobe-Japan1-6 son idénticos bit a bit. Cuando Adobe publica una versión nueva, los cambios de glifo llegan a Noto en semanas.",[18,738,739],{},"Lo que sí cambia es el branding y el empaquetado:",[741,742,743,757],"table",{},[744,745,746],"thead",{},[747,748,749,752,754],"tr",{},[750,751],"th",{},[750,753,24],{},[750,755,756],{},"Noto Sans JP",[758,759,760,772,792,803,814],"tbody",{},[747,761,762,766,769],{},[763,764,765],"td",{},"Publica",[763,767,768],{},"Adobe",[763,770,771],{},"Google",[747,773,774,777,784],{},[763,775,776],{},"Fuente canónica",[763,778,779],{},[27,780,783],{"href":781,"rel":782},"https://github.com/adobe-fonts/source-han-sans",[31],"adobe-fonts/source-han-sans",[763,785,786,791],{},[27,787,790],{"href":788,"rel":789},"https://notofonts.github.io",[31],"notofonts.github.io"," + Google Fonts",[747,793,794,797,800],{},[763,795,796],{},"Formato por defecto",[763,798,799],{},"OTF (contornos CFF)",[763,801,802],{},"TTF (estático) + variable",[747,804,805,808,811],{},[763,806,807],{},"Modelo de release",[763,809,810],{},"Tags de GitHub, versionado manual",[763,812,813],{},"CDN de Google Fonts + repos git",[747,815,816,819,822],{},[763,817,818],{},"Bundling por idioma",[763,820,821],{},"TTF por idioma + OTC pan-CJK",[763,823,824],{},"Solo JP",[18,826,827,828,831,832,204],{},"Vete a Source Han Sans JP si tu equipo fija las fuentes a tags de GitHub de Adobe, ya tienes mirror interno de ",[42,829,830],{},"github.com/adobe-fonts",", o necesitas el OTC pan-CJK en otro pipeline. Vete a Noto Sans JP si lo que quieres es la ruta más corta a un TTF. Esa ruta está detallada en la ",[27,833,835],{"href":834},"/es/blog/noto-sans-jp-with-gpdf","receta de Noto Sans JP",[13,837,839],{"id":838},"por-qué-ttf-y-no-otf","Por qué TTF, y no OTF",[18,841,842,843,846,847,850,851,854,855,854,858,854,861,863,864,867,868,871,872,874],{},"El asset por defecto de Adobe para Source Han Sans es ",[42,844,845],{},".otf"," — concretamente OpenType basado en CFF. El parser de fuentes de gpdf vive en un único archivo (",[42,848,849],{},"pdf/font/truetype.go",") y lee ",[42,852,853],{},"glyf",", ",[42,856,857],{},"loca",[42,859,860],{},"cmap",[42,862,735],{}," y glifos compuestos. No lee contornos ",[42,865,866],{},"CFF "," / ",[42,869,870],{},"CFF2",". Si le pasas un ",[42,873,845],{}," con CFF, el parser rechaza el archivo al construir el documento, mucho antes de renderizar nada.",[18,876,877,878,881],{},"La página de releases de Adobe publica tanto OTF como TTF. Coge el ",[22,879,880],{},"paquete TTF",". Si un release puntual solo incluye OTF (pasa de vez en cuando), dos alternativas limpias:",[883,884,885,892],"ol",{},[886,887,888,891],"li",{},[22,889,890],{},"Cámbiate a Noto Sans JP."," Google Fonts sirve los TTF estáticos directamente; los datos de glifo son idénticos. Cero conversión, mismo resultado.",[886,893,894,897,898,901,902,905],{},[22,895,896],{},"Convierte una vez y commitea el resultado."," ",[42,899,900],{},"fonttools"," (",[42,903,904],{},"otf2ttf",") produce un TTF en un minuto. Sube el resultado al repo o a un artifact server interno para que la conversión no forme parte del build.",[18,907,908,909,911,912,204],{},"Evita convertir en tiempo de build. Las herramientas de conversión de fuentes cambian de comportamiento entre versiones, y una tabla ",[42,910,735],{}," ligeramente distinta mueve los saltos de línea tras un simple ",[42,913,914],{},"pip install -U",[13,916,918],{"id":917},"los-siete-pesos","Los siete pesos",[18,920,921],{},"Source Han Sans JP publica de ExtraLight a Heavy, un archivo por peso:",[61,923,928],{"className":924,"code":926,"language":927},[925],"language-text","SourceHanSansJP-ExtraLight.ttf\nSourceHanSansJP-Light.ttf\nSourceHanSansJP-Normal.ttf\nSourceHanSansJP-Regular.ttf\nSourceHanSansJP-Medium.ttf\nSourceHanSansJP-Bold.ttf\nSourceHanSansJP-Heavy.ttf\n","text",[42,929,926],{"__ignoreMap":66},[18,931,932],{},"Para la mayoría de documentos de negocio, Regular y Bold cubren el uso:",[61,934,936],{"className":63,"code":935,"language":65,"meta":66,"style":66},"reg,  _ := os.ReadFile(\"SourceHanSansJP-Regular.ttf\")\nbold, _ := os.ReadFile(\"SourceHanSansJP-Bold.ttf\")\n\ndoc := gpdf.NewDocument(\n    gpdf.WithFont(\"SourceHanSansJP\", reg),\n    gpdf.WithFont(\"SourceHanSansJP-Bold\", bold),\n    gpdf.WithDefaultFont(\"SourceHanSansJP\", 11),\n)\n",[42,937,938,966,995,999,1014,1038,1062,1084],{"__ignoreMap":66},[70,939,940,943,945,948,950,952,954,956,958,960,962,964],{"class":72,"line":73},[70,941,942],{"class":188},"reg",[70,944,192],{"class":76},[70,946,947],{"class":188},"  _ ",[70,949,198],{"class":76},[70,951,201],{"class":188},[70,953,204],{"class":76},[70,955,207],{"class":175},[70,957,210],{"class":76},[70,959,213],{"class":76},[70,961,44],{"class":216},[70,963,213],{"class":76},[70,965,161],{"class":76},[70,967,968,971,973,976,978,980,982,984,986,988,991,993],{"class":72,"line":84},[70,969,970],{"class":188},"bold",[70,972,192],{"class":76},[70,974,975],{"class":188}," _ ",[70,977,198],{"class":76},[70,979,201],{"class":188},[70,981,204],{"class":76},[70,983,207],{"class":175},[70,985,210],{"class":76},[70,987,213],{"class":76},[70,989,990],{"class":216},"SourceHanSansJP-Bold.ttf",[70,992,213],{"class":76},[70,994,161],{"class":76},[70,996,997],{"class":72,"line":91},[70,998,88],{"emptyLinePlaceholder":87},[70,1000,1001,1004,1006,1008,1010,1012],{"class":72,"line":101},[70,1002,1003],{"class":188},"doc ",[70,1005,198],{"class":76},[70,1007,276],{"class":188},[70,1009,204],{"class":76},[70,1011,281],{"class":175},[70,1013,284],{"class":76},[70,1015,1016,1019,1021,1023,1025,1027,1029,1031,1033,1036],{"class":72,"line":113},[70,1017,1018],{"class":188},"    gpdf",[70,1020,204],{"class":76},[70,1022,355],{"class":175},[70,1024,210],{"class":76},[70,1026,213],{"class":76},[70,1028,362],{"class":216},[70,1030,213],{"class":76},[70,1032,192],{"class":76},[70,1034,1035],{"class":188}," reg",[70,1037,307],{"class":76},[70,1039,1040,1042,1044,1046,1048,1050,1053,1055,1057,1060],{"class":72,"line":123},[70,1041,1018],{"class":188},[70,1043,204],{"class":76},[70,1045,355],{"class":175},[70,1047,210],{"class":76},[70,1049,213],{"class":76},[70,1051,1052],{"class":216},"SourceHanSansJP-Bold",[70,1054,213],{"class":76},[70,1056,192],{"class":76},[70,1058,1059],{"class":188}," bold",[70,1061,307],{"class":76},[70,1063,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082],{"class":72,"line":128},[70,1065,1018],{"class":188},[70,1067,204],{"class":76},[70,1069,381],{"class":175},[70,1071,210],{"class":76},[70,1073,213],{"class":76},[70,1075,362],{"class":216},[70,1077,213],{"class":76},[70,1079,192],{"class":76},[70,1081,394],{"class":341},[70,1083,307],{"class":76},[70,1085,1086],{"class":72,"line":138},[70,1087,161],{"class":76},[18,1089,1090,1091,1094,1095,1098,1099,1101],{},"El sufijo ",[42,1092,1093],{},"-Bold"," es el contrato que conecta ",[42,1096,1097],{},"template.Bold()"," con el TTF Bold. Si no lo registras, ",[42,1100,1097],{}," cae en una negrita sintetizada — un trazo superpuesto sobre los glifos Regular. Legible para encabezados de tabla, pero a tamaño grande se nota más delgada que los contornos Bold reales.",[18,1103,1104],{},"Las fuentes CJK, por convención, no publican variantes itálicas, y Source Han Sans JP no es excepción. Si tu layout pide énfasis itálico en una línea japonesa, tira de peso o de color — una transformación oblicua sobre glifos CJK se ve rota, no enfática.",[13,1106,1108],{"id":1107},"pan-cjk-solo-jp-o-el-super-otc","Pan-CJK, solo JP, o el Super OTC",[18,1110,1111],{},"Adobe publica Source Han Sans en varios niveles de granularidad. No son intercambiables para un generador de PDF en Go:",[1113,1114,1115,1128,1138],"ul",{},[886,1116,1117,1120,1121,1124,1125,1127],{},[22,1118,1119],{},"SourceHanSans.ttc"," (Super OTC) — todos los idiomas CJK en un TrueType Collection de más de 20 MB. gpdf no selecciona el face index dentro de un ",[42,1122,1123],{},".ttc","; tendrías que extraer primero el face JP con ",[42,1126,900],{}," y registrar el resultado. Sáltatelo.",[886,1129,1130,1133,1134,1137],{},[22,1131,1132],{},"OTF regional"," (ej. ",[42,1135,1136],{},"SourceHanSans-Regular.otf",") — scripts CJK unificados, contornos CFF. gpdf no lo lee.",[886,1139,1140,901,1143,1145,1146,1148],{},[22,1141,1142],{},"TTF por idioma",[42,1144,44],{},") — solo JP, contornos ",[42,1147,853],{},". Éste es el que quieres.",[18,1150,1151,1152,1154,1155,1158,1159,1162],{},"Si tu documento mezcla japonés con coreano o chino en la misma página, registra familias específicas por idioma en paralelo: ",[42,1153,362],{}," y ",[42,1156,1157],{},"SourceHanSansKR",". Cambia de familia explícitamente con ",[42,1160,1161],{},"template.FontFamily"," donde cambia el script. Recurrir al OTF pan-CJK lo \"arregla\" con Han unification, pero introduce sus propias sorpresas para lectores que esperan kanji con formas JP en texto JP.",[13,1164,1166],{"id":1165},"cuándo-elegir-source-han-en-vez-de-noto","Cuándo elegir Source Han en vez de Noto",[18,1168,1169],{},"Mismos contornos, distinto canal de distribución. Source Han Sans JP tiene sentido cuando:",[1113,1171,1172,1175,1181],{},[886,1173,1174],{},"Tu equipo de ops prefiere fijar fuentes a tags de release de Adobe por reproducibilidad",[886,1176,1177,1178,1180],{},"Ya hacéis mirror interno de ",[42,1179,830],{}," (común en empresas con políticas estrictas de artifacts)",[886,1182,1183],{},"El bundle OTC pan-CJK es útil en otro paso del pipeline — un flujo DTP, un handoff a diseño, un sistema de marca que se estandariza con el nombre de Adobe",[18,1185,1186],{},"Noto Sans JP gana cuando:",[1113,1188,1189,1196,1199],{},[886,1190,1191,1192,1195],{},"Quieres la ruta más corta a un TTF (",[42,1193,1194],{},"fonts.google.com/noto/specimen/Noto+Sans+JP"," → zip → listo)",[886,1197,1198],{},"No quieres meter conversiones OTF→TTF en tu build",[886,1200,1201],{},"Tu proyecto ya tira de otras Google Fonts con un workflow existente",[18,1203,1204],{},"El PDF renderizado se ve igual. La decisión es operativa — dónde vive el archivo, cómo versionas, cómo lo siente tu equipo de ops — no estética.",[13,1206,1208],{"id":1207},"lecturas-relacionadas","Lecturas relacionadas",[1113,1210,1211,1217,1224,1231],{},[886,1212,1213,1216],{},[27,1214,1215],{"href":834},"¿Cómo uso Noto Sans JP con gpdf?"," — los mismos glifos, publicados en TTF de caja",[886,1218,1219,1223],{},[27,1220,1222],{"href":1221},"/es/blog/embed-japanese-font","¿Cómo incrusto una fuente japonesa en gpdf?"," — la receta general de incrustación CJK",[886,1225,1226,1230],{},[27,1227,1229],{"href":1228},"/es/blog/ipaex-gothic-gpdf","¿Cómo uso IPAex Gothic en gpdf?"," — la alternativa con licencia IPA para envíos institucionales japoneses",[886,1232,1233,1237],{},[27,1234,1236],{"href":1235},"/es/blog/tofu-boxes-japanese","¿Por qué mi PDF muestra rectángulos en lugar de japonés?"," — troubleshooting cuando los glifos no aparecen",[13,1239,1241],{"id":1240},"prueba-gpdf","Prueba gpdf",[18,1243,1244],{},"gpdf es una librería Go para generar PDFs. Licencia MIT, cero dependencias externas, soporte CJK nativo.",[61,1246,1250],{"className":1247,"code":1248,"language":1249,"meta":66,"style":66},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[42,1251,1252],{"__ignoreMap":66},[70,1253,1254,1256,1259],{"class":72,"line":73},[70,1255,65],{"class":80},[70,1257,1258],{"class":216}," get",[70,1260,1261],{"class":216}," github.com/gpdf-dev/gpdf\n",[18,1263,1264,1268,1269],{},[27,1265,1267],{"href":29,"rel":1266},[31],"⭐ Star en GitHub"," · ",[27,1270,1273],{"href":1271,"rel":1272},"https://gpdf.dev/es/docs/quickstart",[31],"Leer los docs",[1275,1276,1277],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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);}",{"title":66,"searchDepth":84,"depth":84,"links":1279},[1280,1281,1282,1283,1284,1285,1286,1287,1288,1289],{"id":15,"depth":84,"text":16},{"id":36,"depth":84,"text":37},{"id":58,"depth":84,"text":59},{"id":724,"depth":84,"text":725},{"id":838,"depth":84,"text":839},{"id":917,"depth":84,"text":918},{"id":1107,"depth":84,"text":1108},{"id":1165,"depth":84,"text":1166},{"id":1207,"depth":84,"text":1208},{"id":1240,"depth":84,"text":1241},"2026-04-19","Registra la variante TTF de Source Han Sans JP desde la release de GitHub de Adobe con gpdf.WithFont. Siete pesos, SIL OFL, mismos glifos que Noto Sans JP.",false,"md",{"name":1295,"totalTime":1296,"tools":1297,"steps":1300},"Usar Source Han Sans JP como fuente por defecto en un documento gpdf","PT15M",[1298,1299],"Go 1.22+","SourceHanSansJP-Regular.ttf de adobe-fonts/source-han-sans",[1301,1304,1307,1310,1313],{"name":1302,"text":1303},"Descarga el TTF desde la release de GitHub de Adobe","Abre github.com/adobe-fonts/source-han-sans/releases. Desde la última release, descarga el paquete TTF (no el OTF ni el SuperOTC) y extrae SourceHanSansJP-Regular.ttf. gpdf parsea TrueType, no OpenType con contornos CFF.",{"name":1305,"text":1306},"Carga los bytes al arrancar","Usa os.ReadFile(\"SourceHanSansJP-Regular.ttf\") o //go:embed. Para reproducibilidad en CI, fija un tag de release específico en tu repo en vez de descargar en tiempo de build.",{"name":1308,"text":1309},"Registra la fuente al construir el documento","Pasa gpdf.WithFont(\"SourceHanSansJP\", fontBytes) y gpdf.WithDefaultFont(\"SourceHanSansJP\", 11) a gpdf.NewDocument. Sin AddUTF8Font, sin rutas de filesystem.",{"name":1311,"text":1312},"Registra más pesos si los necesitas","Source Han Sans JP publica siete pesos, de ExtraLight a Heavy. Registra el TTF Bold con la clave SourceHanSansJP-Bold y template.Bold() usará los contornos reales de negrita en vez de un trazo sintetizado.",{"name":1314,"text":1315},"Conserva OFL.txt junto a tu distribución","SIL OFL 1.1 exige llevar el texto de la licencia allí donde viaje el binario de la fuente. Si haces //go:embed del TTF, empaqueta también OFL.txt en LICENSES/ y referéncialo desde NOTICE.",null,{},"/es/blog/source-han-sans-jp-with-gpdf",{"title":5,"description":1291},"es/blog/010.source-han-sans-jp-with-gpdf",[1322,1323,1324],"recipe","cjk","tutorial","yZECUrrro6MqsJ9W2G_I4doDCFRa--y2LBhpefeKdc4",1776537648033]