[{"data":1,"prerenderedAt":1451},["ShallowReactive",2],{"blog-zh-ipaex-gothic-gpdf":3},{"id":4,"title":5,"author":6,"body":9,"date":1415,"description":1416,"draft":1417,"extension":1418,"howTo":1419,"image":1441,"meta":1442,"navigation":83,"path":1443,"seo":1444,"stem":1445,"tags":1446,"updated":1441,"__hash__":1450},"blogZh/zh/blog/009.ipaex-gothic-gpdf.md","如何在 gpdf 中使用 IPAex 哥特体（IPAex Gothic）？",{"name":7,"url":8},"gpdf team","https://gpdf.dev",{"type":10,"value":11,"toc":1404},"minimark",[12,16,34,37,53,56,725,748,751,754,817,820,832,836,839,842,851,883,889,1180,1183,1187,1196,1224,1231,1234,1238,1323,1326,1329,1364,1368,1371,1388,1400],[13,14,15],"h2",{"id":15},"这个问题的另一种表达",[17,18,19,20,27,28,33],"p",{},"你想在 ",[21,22,26],"a",{"href":23,"rel":24},"https://github.com/gpdf-dev/gpdf",[25],"nofollow","gpdf"," 文档里用 IPAex Gothic —— 日本 ",[21,29,32],{"href":30,"rel":31},"https://moji.or.jp/ipafont/",[25],"情报处理推进机构","（IPA）维护的比例西文哥特体。常见场景：e-Tax 的 PDF 附件、面向政府的书面文件，或者自 2010 年前后就统一使用 IPAex 的内部样式。三处容易踩坑：该拿哪个文件、没有 Bold 怎么办、IPA Font License 到底要求你做什么。",[13,35,36],{"id":36},"速答",[17,38,39,40,44,45,48,49,52],{},"用 ",[41,42,43],"code",{},"gpdf.WithFont(\"IPAexGothic\", bytes)"," 注册 ",[41,46,47],{},"ipaexg.ttf","，设为默认字体。粗体强调要么用 ",[41,50,51],{},"template.Bold()"," 合成，要么与 IPAex Mincho 配对，因为 IPAex 只发行 Regular。随字体一起保留许可证文本。",[13,54,55],{"id":55},"完整示例",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"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(\"ipaexg.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(25))),\n        gpdf.WithFont(\"IPAexGothic\", font),\n        gpdf.WithDefaultFont(\"IPAexGothic\", 10.5),\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(\"令和8年4月17日発行\")\n            c.Text(\"金額: ¥100,000 (税込)\")\n        })\n    })\n\n    data, err := doc.Generate()\n    if err != nil {\n        log.Fatal(err)\n    }\n    if err := os.WriteFile(\"invoice.pdf\", data, 0o644); err != nil {\n        log.Fatal(err)\n    }\n}\n","go","",[41,64,65,78,85,95,107,117,122,132,142,152,158,163,179,217,233,251,257,262,281,304,342,368,393,399,404,423,457,494,542,562,582,588,594,599,620,633,648,653,699,714,719],{"__ignoreMap":62},[66,67,70,74],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"sMK4o","package",[66,75,77],{"class":76},"sBMFI"," main\n",[66,79,81],{"class":68,"line":80},2,[66,82,84],{"emptyLinePlaceholder":83},true,"\n",[66,86,88,92],{"class":68,"line":87},3,[66,89,91],{"class":90},"s7zQu","import",[66,93,94],{"class":72}," (\n",[66,96,98,101,104],{"class":68,"line":97},4,[66,99,100],{"class":72},"    \"",[66,102,103],{"class":76},"log",[66,105,106],{"class":72},"\"\n",[66,108,110,112,115],{"class":68,"line":109},5,[66,111,100],{"class":72},[66,113,114],{"class":76},"os",[66,116,106],{"class":72},[66,118,120],{"class":68,"line":119},6,[66,121,84],{"emptyLinePlaceholder":83},[66,123,125,127,130],{"class":68,"line":124},7,[66,126,100],{"class":72},[66,128,129],{"class":76},"github.com/gpdf-dev/gpdf",[66,131,106],{"class":72},[66,133,135,137,140],{"class":68,"line":134},8,[66,136,100],{"class":72},[66,138,139],{"class":76},"github.com/gpdf-dev/gpdf/document",[66,141,106],{"class":72},[66,143,145,147,150],{"class":68,"line":144},9,[66,146,100],{"class":72},[66,148,149],{"class":76},"github.com/gpdf-dev/gpdf/template",[66,151,106],{"class":72},[66,153,155],{"class":68,"line":154},10,[66,156,157],{"class":72},")\n",[66,159,161],{"class":68,"line":160},11,[66,162,84],{"emptyLinePlaceholder":83},[66,164,166,169,173,176],{"class":68,"line":165},12,[66,167,168],{"class":72},"func",[66,170,172],{"class":171},"s2Zo4"," main",[66,174,175],{"class":72},"()",[66,177,178],{"class":72}," {\n",[66,180,182,186,189,192,195,198,201,204,207,210,213,215],{"class":68,"line":181},13,[66,183,185],{"class":184},"sTEyZ","    font",[66,187,188],{"class":72},",",[66,190,191],{"class":184}," err ",[66,193,194],{"class":72},":=",[66,196,197],{"class":184}," os",[66,199,200],{"class":72},".",[66,202,203],{"class":171},"ReadFile",[66,205,206],{"class":72},"(",[66,208,209],{"class":72},"\"",[66,211,47],{"class":212},"sfazB",[66,214,209],{"class":72},[66,216,157],{"class":72},[66,218,220,223,225,228,231],{"class":68,"line":219},14,[66,221,222],{"class":90},"    if",[66,224,191],{"class":184},[66,226,227],{"class":72},"!=",[66,229,230],{"class":72}," nil",[66,232,178],{"class":72},[66,234,236,239,241,244,246,249],{"class":68,"line":235},15,[66,237,238],{"class":184},"        log",[66,240,200],{"class":72},[66,242,243],{"class":171},"Fatal",[66,245,206],{"class":72},[66,247,248],{"class":184},"err",[66,250,157],{"class":72},[66,252,254],{"class":68,"line":253},16,[66,255,256],{"class":72},"    }\n",[66,258,260],{"class":68,"line":259},17,[66,261,84],{"emptyLinePlaceholder":83},[66,263,265,268,270,273,275,278],{"class":68,"line":264},18,[66,266,267],{"class":184},"    doc ",[66,269,194],{"class":72},[66,271,272],{"class":184}," gpdf",[66,274,200],{"class":72},[66,276,277],{"class":171},"NewDocument",[66,279,280],{"class":72},"(\n",[66,282,284,287,289,292,294,296,298,301],{"class":68,"line":283},19,[66,285,286],{"class":184},"        gpdf",[66,288,200],{"class":72},[66,290,291],{"class":171},"WithPageSize",[66,293,206],{"class":72},[66,295,26],{"class":184},[66,297,200],{"class":72},[66,299,300],{"class":184},"A4",[66,302,303],{"class":72},"),\n",[66,305,307,309,311,314,316,319,321,324,326,328,330,333,335,339],{"class":68,"line":306},20,[66,308,286],{"class":184},[66,310,200],{"class":72},[66,312,313],{"class":171},"WithMargins",[66,315,206],{"class":72},[66,317,318],{"class":184},"document",[66,320,200],{"class":72},[66,322,323],{"class":171},"UniformEdges",[66,325,206],{"class":72},[66,327,318],{"class":184},[66,329,200],{"class":72},[66,331,332],{"class":171},"Mm",[66,334,206],{"class":72},[66,336,338],{"class":337},"sbssI","25",[66,340,341],{"class":72},"))),\n",[66,343,345,347,349,352,354,356,359,361,363,366],{"class":68,"line":344},21,[66,346,286],{"class":184},[66,348,200],{"class":72},[66,350,351],{"class":171},"WithFont",[66,353,206],{"class":72},[66,355,209],{"class":72},[66,357,358],{"class":212},"IPAexGothic",[66,360,209],{"class":72},[66,362,188],{"class":72},[66,364,365],{"class":184}," font",[66,367,303],{"class":72},[66,369,371,373,375,378,380,382,384,386,388,391],{"class":68,"line":370},22,[66,372,286],{"class":184},[66,374,200],{"class":72},[66,376,377],{"class":171},"WithDefaultFont",[66,379,206],{"class":72},[66,381,209],{"class":72},[66,383,358],{"class":212},[66,385,209],{"class":72},[66,387,188],{"class":72},[66,389,390],{"class":337}," 10.5",[66,392,303],{"class":72},[66,394,396],{"class":68,"line":395},23,[66,397,398],{"class":72},"    )\n",[66,400,402],{"class":68,"line":401},24,[66,403,84],{"emptyLinePlaceholder":83},[66,405,407,410,412,415,417,420],{"class":68,"line":406},25,[66,408,409],{"class":184},"    page ",[66,411,194],{"class":72},[66,413,414],{"class":184}," doc",[66,416,200],{"class":72},[66,418,419],{"class":171},"AddPage",[66,421,422],{"class":72},"()\n",[66,424,426,429,431,434,437,441,444,447,449,452,455],{"class":68,"line":425},26,[66,427,428],{"class":184},"    page",[66,430,200],{"class":72},[66,432,433],{"class":171},"AutoRow",[66,435,436],{"class":72},"(func(",[66,438,440],{"class":439},"sHdIc","r",[66,442,443],{"class":72}," *",[66,445,446],{"class":76},"template",[66,448,200],{"class":72},[66,450,451],{"class":76},"RowBuilder",[66,453,454],{"class":72},")",[66,456,178],{"class":72},[66,458,460,463,465,468,470,473,475,478,481,483,485,487,490,492],{"class":68,"line":459},27,[66,461,462],{"class":184},"        r",[66,464,200],{"class":72},[66,466,467],{"class":171},"Col",[66,469,206],{"class":72},[66,471,472],{"class":337},"12",[66,474,188],{"class":72},[66,476,477],{"class":72}," func(",[66,479,480],{"class":439},"c",[66,482,443],{"class":72},[66,484,446],{"class":76},[66,486,200],{"class":72},[66,488,489],{"class":76},"ColBuilder",[66,491,454],{"class":72},[66,493,178],{"class":72},[66,495,497,500,502,505,507,509,512,514,516,519,521,524,526,529,532,534,536,539],{"class":68,"line":496},28,[66,498,499],{"class":184},"            c",[66,501,200],{"class":72},[66,503,504],{"class":171},"Text",[66,506,206],{"class":72},[66,508,209],{"class":72},[66,510,511],{"class":212},"請求書",[66,513,209],{"class":72},[66,515,188],{"class":72},[66,517,518],{"class":184}," template",[66,520,200],{"class":72},[66,522,523],{"class":171},"FontSize",[66,525,206],{"class":72},[66,527,528],{"class":337},"24",[66,530,531],{"class":72},"),",[66,533,518],{"class":184},[66,535,200],{"class":72},[66,537,538],{"class":171},"Bold",[66,540,541],{"class":72},"())\n",[66,543,545,547,549,551,553,555,558,560],{"class":68,"line":544},29,[66,546,499],{"class":184},[66,548,200],{"class":72},[66,550,504],{"class":171},[66,552,206],{"class":72},[66,554,209],{"class":72},[66,556,557],{"class":212},"令和8年4月17日発行",[66,559,209],{"class":72},[66,561,157],{"class":72},[66,563,565,567,569,571,573,575,578,580],{"class":68,"line":564},30,[66,566,499],{"class":184},[66,568,200],{"class":72},[66,570,504],{"class":171},[66,572,206],{"class":72},[66,574,209],{"class":72},[66,576,577],{"class":212},"金額: ¥100,000 (税込)",[66,579,209],{"class":72},[66,581,157],{"class":72},[66,583,585],{"class":68,"line":584},31,[66,586,587],{"class":72},"        })\n",[66,589,591],{"class":68,"line":590},32,[66,592,593],{"class":72},"    })\n",[66,595,597],{"class":68,"line":596},33,[66,598,84],{"emptyLinePlaceholder":83},[66,600,602,605,607,609,611,613,615,618],{"class":68,"line":601},34,[66,603,604],{"class":184},"    data",[66,606,188],{"class":72},[66,608,191],{"class":184},[66,610,194],{"class":72},[66,612,414],{"class":184},[66,614,200],{"class":72},[66,616,617],{"class":171},"Generate",[66,619,422],{"class":72},[66,621,623,625,627,629,631],{"class":68,"line":622},35,[66,624,222],{"class":90},[66,626,191],{"class":184},[66,628,227],{"class":72},[66,630,230],{"class":72},[66,632,178],{"class":72},[66,634,636,638,640,642,644,646],{"class":68,"line":635},36,[66,637,238],{"class":184},[66,639,200],{"class":72},[66,641,243],{"class":171},[66,643,206],{"class":72},[66,645,248],{"class":184},[66,647,157],{"class":72},[66,649,651],{"class":68,"line":650},37,[66,652,256],{"class":72},[66,654,656,658,660,662,664,666,669,671,673,676,678,680,683,685,688,691,693,695,697],{"class":68,"line":655},38,[66,657,222],{"class":90},[66,659,191],{"class":184},[66,661,194],{"class":72},[66,663,197],{"class":184},[66,665,200],{"class":72},[66,667,668],{"class":171},"WriteFile",[66,670,206],{"class":72},[66,672,209],{"class":72},[66,674,675],{"class":212},"invoice.pdf",[66,677,209],{"class":72},[66,679,188],{"class":72},[66,681,682],{"class":184}," data",[66,684,188],{"class":72},[66,686,687],{"class":337}," 0o644",[66,689,690],{"class":72},");",[66,692,191],{"class":184},[66,694,227],{"class":72},[66,696,230],{"class":72},[66,698,178],{"class":72},[66,700,702,704,706,708,710,712],{"class":68,"line":701},39,[66,703,238],{"class":184},[66,705,200],{"class":72},[66,707,243],{"class":171},[66,709,206],{"class":72},[66,711,248],{"class":184},[66,713,157],{"class":72},[66,715,717],{"class":68,"line":716},40,[66,718,256],{"class":72},[66,720,722],{"class":68,"line":721},41,[66,723,724],{"class":72},"}\n",[17,726,727,728,732,733,736,737,739,740,743,744,747],{},"在 ",[21,729,731],{"href":30,"rel":730},[25],"moji.or.jp/ipafont"," 下载 ",[41,734,735],{},"IPAex00401.zip","，解压出 ",[41,738,47],{}," 放到 ",[41,741,742],{},"main.go"," 旁边，然后 ",[41,745,746],{},"go run main.go","。",[13,749,750],{"id":750},"三个文件到底选哪个",[17,752,753],{},"打开 zip，你会看到 3 个 TTF 和一份许可证。名字很容易弄混：",[755,756,757,770],"table",{},[758,759,760],"thead",{},[761,762,763,767],"tr",{},[764,765,766],"th",{},"文件",[764,768,769],{},"内容",[771,772,773,787,800],"tbody",{},[761,774,775,780],{},[776,777,778],"td",{},[41,779,47],{},[776,781,782,786],{},[783,784,785],"strong",{},"IPAex Gothic"," —— 无衬线，西文比例宽度。大多数文档选这个。",[761,788,789,794],{},[776,790,791],{},[41,792,793],{},"ipaexm.ttf",[776,795,796,799],{},[783,797,798],{},"IPAex Mincho"," —— 衬线（明朝体），西文比例宽度。长文本或与哥特体配对强调时用。",[761,801,802,807],{},[776,803,804],{},[41,805,806],{},"ipag.ttf",[776,808,809,812,813,816],{},[783,810,811],{},"IPA Gothic","（没有 \"ex\"）—— 无衬线，",[783,814,815],{},"西文等宽","。现在很少用。",[17,818,819],{},"IPAex 里的 \"ex\" 是 \"extended proportional\" 的缩写。原版 IPA 字体把西文字符放在 CJK 全角格子上，中英混排时显得拉伸。IPAex 把西文改为比例宽度，同时保持 CJK 字符在常规格子上。任何夹杂英文词、URL、数字的业务文档——也就是日本的几乎所有业务文档——都该用 IPAex。",[17,821,822,823,825,826,828,829,831],{},"如果你接手的旧项目用 ",[41,824,806],{},"，原因大概是历史遗留（原版 IPA Gothic: 2003 年；IPAex: 2010 年）。把族名保持为 ",[41,827,358],{},"、文件换成 ",[41,830,47],{},"，代码侧改一行即可。",[13,833,835],{"id":834},"没有-bold-怎么办","没有 Bold 怎么办",[17,837,838],{},"IPAex 每族只发行一个字重：Regular。这和 Noto Sans JP 的 9 字重相比是最大短板，也是大家看完 IPAex 决定放弃的首要原因。",[17,840,841],{},"gpdf 里有两种处理方式。",[17,843,844,847,848,850],{},[783,845,846],{},"合成粗体。"," ",[41,849,51],{}," 在 Regular 字形上叠加描边。排版上算作弊——真正的粗体字重有专门重画的粗笔画轮廓，不是 Regular 再描一次。但对于 10 pt 以上的发票标题和表格标签，合成粗体对大多数读者来说是看不出差别的：",[57,852,854],{"className":59,"code":853,"language":61,"meta":62,"style":62},"c.Text(\"合計金額\", template.Bold())\n",[41,855,856],{"__ignoreMap":62},[66,857,858,860,862,864,866,868,871,873,875,877,879,881],{"class":68,"line":69},[66,859,480],{"class":184},[66,861,200],{"class":72},[66,863,504],{"class":171},[66,865,206],{"class":72},[66,867,209],{"class":72},[66,869,870],{"class":212},"合計金額",[66,872,209],{"class":72},[66,874,188],{"class":72},[66,876,518],{"class":184},[66,878,200],{"class":72},[66,880,538],{"class":171},[66,882,541],{"class":72},[17,884,885,888],{},[783,886,887],{},"和 IPAex 明朝配对。"," 日文排版的经典强调手法并不是加粗，而是衬线 / 无衬线切换。同时注册两族：",[57,890,892],{"className":59,"code":891,"language":61,"meta":62,"style":62},"gothic,  _ := os.ReadFile(\"ipaexg.ttf\")\nmincho, _ := os.ReadFile(\"ipaexm.ttf\")\n\ndoc := gpdf.NewDocument(\n    gpdf.WithFont(\"IPAexGothic\", gothic),\n    gpdf.WithFont(\"IPAexMincho\", mincho),\n    gpdf.WithDefaultFont(\"IPAexGothic\", 10.5),\n)\n\npage.AutoRow(func(r *template.RowBuilder) {\n    r.Col(12, func(c *template.ColBuilder) {\n        c.Text(\"請求書\", template.FontFamily(\"IPAexMincho\"), template.FontSize(24))\n        c.Text(\"ご請求内容は下記の通りです。\")\n    })\n})\n",[41,893,894,922,950,954,969,993,1017,1039,1043,1047,1072,1103,1152,1171,1175],{"__ignoreMap":62},[66,895,896,899,901,904,906,908,910,912,914,916,918,920],{"class":68,"line":69},[66,897,898],{"class":184},"gothic",[66,900,188],{"class":72},[66,902,903],{"class":184},"  _ ",[66,905,194],{"class":72},[66,907,197],{"class":184},[66,909,200],{"class":72},[66,911,203],{"class":171},[66,913,206],{"class":72},[66,915,209],{"class":72},[66,917,47],{"class":212},[66,919,209],{"class":72},[66,921,157],{"class":72},[66,923,924,927,929,932,934,936,938,940,942,944,946,948],{"class":68,"line":80},[66,925,926],{"class":184},"mincho",[66,928,188],{"class":72},[66,930,931],{"class":184}," _ ",[66,933,194],{"class":72},[66,935,197],{"class":184},[66,937,200],{"class":72},[66,939,203],{"class":171},[66,941,206],{"class":72},[66,943,209],{"class":72},[66,945,793],{"class":212},[66,947,209],{"class":72},[66,949,157],{"class":72},[66,951,952],{"class":68,"line":87},[66,953,84],{"emptyLinePlaceholder":83},[66,955,956,959,961,963,965,967],{"class":68,"line":97},[66,957,958],{"class":184},"doc ",[66,960,194],{"class":72},[66,962,272],{"class":184},[66,964,200],{"class":72},[66,966,277],{"class":171},[66,968,280],{"class":72},[66,970,971,974,976,978,980,982,984,986,988,991],{"class":68,"line":109},[66,972,973],{"class":184},"    gpdf",[66,975,200],{"class":72},[66,977,351],{"class":171},[66,979,206],{"class":72},[66,981,209],{"class":72},[66,983,358],{"class":212},[66,985,209],{"class":72},[66,987,188],{"class":72},[66,989,990],{"class":184}," gothic",[66,992,303],{"class":72},[66,994,995,997,999,1001,1003,1005,1008,1010,1012,1015],{"class":68,"line":119},[66,996,973],{"class":184},[66,998,200],{"class":72},[66,1000,351],{"class":171},[66,1002,206],{"class":72},[66,1004,209],{"class":72},[66,1006,1007],{"class":212},"IPAexMincho",[66,1009,209],{"class":72},[66,1011,188],{"class":72},[66,1013,1014],{"class":184}," mincho",[66,1016,303],{"class":72},[66,1018,1019,1021,1023,1025,1027,1029,1031,1033,1035,1037],{"class":68,"line":124},[66,1020,973],{"class":184},[66,1022,200],{"class":72},[66,1024,377],{"class":171},[66,1026,206],{"class":72},[66,1028,209],{"class":72},[66,1030,358],{"class":212},[66,1032,209],{"class":72},[66,1034,188],{"class":72},[66,1036,390],{"class":337},[66,1038,303],{"class":72},[66,1040,1041],{"class":68,"line":134},[66,1042,157],{"class":72},[66,1044,1045],{"class":68,"line":144},[66,1046,84],{"emptyLinePlaceholder":83},[66,1048,1049,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070],{"class":68,"line":154},[66,1050,1051],{"class":184},"page",[66,1053,200],{"class":72},[66,1055,433],{"class":171},[66,1057,436],{"class":72},[66,1059,440],{"class":439},[66,1061,443],{"class":72},[66,1063,446],{"class":76},[66,1065,200],{"class":72},[66,1067,451],{"class":76},[66,1069,454],{"class":72},[66,1071,178],{"class":72},[66,1073,1074,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101],{"class":68,"line":160},[66,1075,1076],{"class":184},"    r",[66,1078,200],{"class":72},[66,1080,467],{"class":171},[66,1082,206],{"class":72},[66,1084,472],{"class":337},[66,1086,188],{"class":72},[66,1088,477],{"class":72},[66,1090,480],{"class":439},[66,1092,443],{"class":72},[66,1094,446],{"class":76},[66,1096,200],{"class":72},[66,1098,489],{"class":76},[66,1100,454],{"class":72},[66,1102,178],{"class":72},[66,1104,1105,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149],{"class":68,"line":165},[66,1106,1107],{"class":184},"        c",[66,1109,200],{"class":72},[66,1111,504],{"class":171},[66,1113,206],{"class":72},[66,1115,209],{"class":72},[66,1117,511],{"class":212},[66,1119,209],{"class":72},[66,1121,188],{"class":72},[66,1123,518],{"class":184},[66,1125,200],{"class":72},[66,1127,1128],{"class":171},"FontFamily",[66,1130,206],{"class":72},[66,1132,209],{"class":72},[66,1134,1007],{"class":212},[66,1136,209],{"class":72},[66,1138,531],{"class":72},[66,1140,518],{"class":184},[66,1142,200],{"class":72},[66,1144,523],{"class":171},[66,1146,206],{"class":72},[66,1148,528],{"class":337},[66,1150,1151],{"class":72},"))\n",[66,1153,1154,1156,1158,1160,1162,1164,1167,1169],{"class":68,"line":181},[66,1155,1107],{"class":184},[66,1157,200],{"class":72},[66,1159,504],{"class":171},[66,1161,206],{"class":72},[66,1163,209],{"class":72},[66,1165,1166],{"class":212},"ご請求内容は下記の通りです。",[66,1168,209],{"class":72},[66,1170,157],{"class":72},[66,1172,1173],{"class":68,"line":219},[66,1174,593],{"class":72},[66,1176,1177],{"class":68,"line":235},[66,1178,1179],{"class":72},"})\n",[17,1181,1182],{},"这种组合在日本的婚礼请柬和正式报告里很常见 —— 标题用明朝、正文用哥特。如果你的文档要交到政府机关，这个组合通常正是对方期待的。",[13,1184,1186],{"id":1185},"简述-ipa-font-license","简述 IPA Font License",[17,1188,1189,1190,1195],{},"IPAex 不是 SIL OFL，而是 ",[21,1191,1194],{"href":1192,"rel":1193},"https://opensource.org/licenses/IPA",[25],"IPA Font License Agreement v1.0","，OSI 批准，总体宽松，但有两点值得注意：",[1197,1198,1199,1214],"ol",{},[1200,1201,1202,1205,1206,1209,1210,1213],"li",{},[783,1203,1204],{},"字体二进制分发到哪里，许可证文本就要跟到哪里。"," 如果你 ",[41,1207,1208],{},"//go:embed"," 了 TTF，就把许可证文本一起打包。项目根目录放一个 ",[41,1211,1212],{},"LICENSES/IPA-FONT-1.0.txt"," 对大多数分发场景已经够用。",[1200,1215,1216,1219,1220,1223],{},[783,1217,1218],{},"不要重命名字体。"," 如果你修改 TTF 本身再分发，衍生字体必须使用不同名字（不得包含 \"IPA\" 或 \"IPAex\"）。注意：这个限制",[783,1221,1222],{},"不适用于","渲染时的字形子集化。许可证第 3.4 条明确把\"用该字体生成的输出文档\"从命名限制中豁免。",[17,1225,1226,1227,1230],{},"含义：gpdf 在 ",[41,1228,1229],{},"doc.Generate()"," 时的子集化没问题。嵌入到 PDF 里的子集不需要改名，也不会触发\"衍生字体程序\"相关条款。你是在创建文档，不是在重新分发字体。",[17,1232,1233],{},"补充一点，gpdf 核心 OSS 仓库本身没有内置 IPAex（golden 测试用的是 Noto 系 SIL OFL 字体），这样下游用户的仓库顶层 LICENSE 就不用为 IPA 许可证的兼容性操心。你的应用里怎么用 IPAex 是你项目的决定，不是我们的。",[13,1235,1237],{"id":1236},"什么时候选-ipaex-而非-noto-sans-jp","什么时候选 IPAex 而非 Noto Sans JP",[755,1239,1240,1252],{},[758,1241,1242],{},[761,1243,1244,1247,1249],{},[764,1245,1246],{},"维度",[764,1248,785],{},[764,1250,1251],{},"Noto Sans JP",[771,1253,1254,1265,1276,1287,1301,1312],{},[761,1255,1256,1259,1262],{},[776,1257,1258],{},"字重数",[776,1260,1261],{},"1（Regular）",[776,1263,1264],{},"9（Thin → Black）",[761,1266,1267,1270,1273],{},[776,1268,1269],{},"许可证",[776,1271,1272],{},"IPA Font License v1.0",[776,1274,1275],{},"SIL OFL 1.1",[761,1277,1278,1281,1284],{},[776,1279,1280],{},"西文处理",[776,1282,1283],{},"比例宽度（IPAex）或等宽（IPA）",[776,1285,1286],{},"比例宽度",[761,1288,1289,1292,1298],{},[776,1290,1291],{},"预装于",[776,1293,1294,1295],{},"部分日本系 Linux 发行版、TeX Live ",[41,1296,1297],{},"ptex-fonts",[776,1299,1300],{},"Android、ChromeOS",[761,1302,1303,1306,1309],{},[776,1304,1305],{},"典型受众",[776,1307,1308],{},"日本政府、法律、学术",[776,1310,1311],{},"消费者 Web、国际",[761,1313,1314,1317,1320],{},[776,1315,1316],{},"文件大小",[776,1318,1319],{},"7.5 MB（Gothic）",[776,1321,1322],{},"5 MB（仅 Regular）",[17,1324,1325],{},"当你的输出要穿越日本的制度性边界时 —— e-Tax PDF 附件、法院文书、投向日本期刊的学术论文 —— 选 IPAex，因为这些生态里的评审、审稿人和 OCR 工具都是按 IPA 调校的。其他场景用 Noto Sans JP 即可。两者渲染结果非常接近，选择的依据是\"出口在哪个生态\"而非美学。",[13,1327,1328],{"id":1328},"延伸阅读",[1330,1331,1332,1339,1346,1353],"ul",{},[1200,1333,1334,1338],{},[21,1335,1337],{"href":1336},"/zh/blog/embed-japanese-font","如何在 gpdf 中嵌入日文字体？"," —— 适用于任何 CJK TTF 的通用配方",[1200,1340,1341,1345],{},[21,1342,1344],{"href":1343},"/zh/blog/noto-sans-jp-with-gpdf","如何在 gpdf 中使用 Noto Sans JP？"," —— SIL OFL 且有 9 字重的替代选项",[1200,1347,1348,1352],{},[21,1349,1351],{"href":1350},"/zh/blog/tofu-boxes-japanese","为什么 gpdf 生成的 PDF 中日文显示为方块？"," —— 当字形没显示时的排查",[1200,1354,1355,1360,1361,1363],{},[21,1356,1359],{"href":1357,"rel":1358},"https://gpdf.dev/zh/docs/guide/fonts",[25],"字体指南"," —— ",[41,1362,351],{}," 完整参考",[13,1365,1367],{"id":1366},"试试-gpdf","试试 gpdf",[17,1369,1370],{},"gpdf 是一个 Go PDF 生成库。MIT 协议、零外部依赖、原生支持 CJK。",[57,1372,1376],{"className":1373,"code":1374,"language":1375,"meta":62,"style":62},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[41,1377,1378],{"__ignoreMap":62},[66,1379,1380,1382,1385],{"class":68,"line":69},[66,1381,61],{"class":76},[66,1383,1384],{"class":212}," get",[66,1386,1387],{"class":212}," github.com/gpdf-dev/gpdf\n",[17,1389,1390,1394,1395],{},[21,1391,1393],{"href":23,"rel":1392},[25],"⭐ 在 GitHub 上 Star"," · ",[21,1396,1399],{"href":1397,"rel":1398},"https://gpdf.dev/zh/docs/quickstart",[25],"阅读文档",[1401,1402,1403],"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":62,"searchDepth":80,"depth":80,"links":1405},[1406,1407,1408,1409,1410,1411,1412,1413,1414],{"id":15,"depth":80,"text":15},{"id":36,"depth":80,"text":36},{"id":55,"depth":80,"text":55},{"id":750,"depth":80,"text":750},{"id":834,"depth":80,"text":835},{"id":1185,"depth":80,"text":1186},{"id":1236,"depth":80,"text":1237},{"id":1328,"depth":80,"text":1328},{"id":1366,"depth":80,"text":1367},"2026-04-17","用 gpdf.WithFont 注册 ipaexg.ttf。IPAex 只提供 Regular 一个字重，粗体需要合成或与 Mincho 配对。",false,"md",{"name":1420,"totalTime":1421,"tools":1422,"steps":1425},"在 gpdf 文档中将 IPAex Gothic 设为默认字体","PT10M",[1423,1424],"Go 1.22+","ipaexg.ttf（来自 moji.or.jp 的 IPAex Gothic v4.01）",[1426,1429,1432,1435,1438],{"name":1427,"text":1428},"从 moji.or.jp 下载 IPAex 字体包","在 moji.or.jp/ipafont 下载 IPAex00401.zip，解压后保留 ipaexg.ttf 以及随附的 IPA Font License Agreement v1.0 文本。",{"name":1430,"text":1431},"加载 TTF 字节","程序启动时用 os.ReadFile(\"ipaexg.ttf\") 读入 []byte。容器部署场景下用 //go:embed 把字体编进 Go 二进制更便于分发。",{"name":1433,"text":1434},"在文档构造时注册","把 gpdf.WithFont(\"IPAexGothic\", fontBytes) 和 gpdf.WithDefaultFont(\"IPAexGothic\", 10.5) 传给 gpdf.NewDocument。10.5 pt 与 Word 日文文档的默认字号一致。",{"name":1436,"text":1437},"处理没有 Bold 文件的问题","IPAex Gothic 没有 Bold 变体。可以用 template.Bold() 合成粗体（gpdf 叠加 0.4 pt 描边），或把 IPAex Mincho 作为另一族注册用于强调。",{"name":1439,"text":1440},"随同二进制保留许可证文本","IPA Font License v1.0 要求字体二进制分发到哪里，许可证文本就要跟到哪里。如果用 //go:embed 嵌入 TTF，就把 LICENSES/IPA-FONT-1.0.txt 也嵌入并从 NOTICE 中引用。",null,{},"/zh/blog/ipaex-gothic-gpdf",{"title":5,"description":1416},"zh/blog/009.ipaex-gothic-gpdf",[1447,1448,1449],"recipe","cjk","tutorial","uOHF6J5BHEbi8tFpDdfK4wrlV8FdVlaiPy8RqLI32JI",1776529262248]