[{"data":1,"prerenderedAt":1458},["ShallowReactive",2],{"blog-ja-ipaex-gothic-gpdf":3},{"id":4,"title":5,"author":6,"body":9,"date":1422,"description":1423,"draft":1424,"extension":1425,"howTo":1426,"image":1448,"meta":1449,"navigation":80,"path":1450,"seo":1451,"stem":1452,"tags":1453,"updated":1448,"__hash__":1457},"blogJa/ja/blog/009.ipaex-gothic-gpdf.md","gpdf で IPAex ゴシックを使うには?",{"name":7,"url":8},"gpdf team","https://gpdf.dev",{"type":10,"value":11,"toc":1411},"minimark",[12,16,32,35,50,53,722,748,752,755,816,826,838,842,845,848,857,889,895,1185,1188,1192,1201,1229,1236,1239,1243,1327,1333,1336,1371,1375,1378,1395,1407],[13,14,15],"h2",{"id":15},"質問を言い換えると",[17,18,19,26,27,31],"p",{},[20,21,25],"a",{"href":22,"rel":23},"https://github.com/gpdf-dev/gpdf",[24],"nofollow","gpdf"," のドキュメントで、IPA (情報処理推進機構) が配布している ",[28,29,30],"strong",{},"IPAex ゴシック"," を使いたい。用途はだいたい決まっていて、e-Tax の PDF 添付、官公庁提出書類、あるいは 2010 年前後から IPAex に統一してきたハウススタイルの踏襲。詰まるのはいつも 3 点 — どのファイルを拾うか、Bold がない問題、そして IPA フォントライセンス v1.0 の条件。",[13,33,34],{"id":34},"速答",[17,36,37,41,42,45,46,49],{},[38,39,40],"code",{},"ipaexg.ttf"," を ",[38,43,44],{},"gpdf.WithFont(\"IPAexGothic\", bytes)"," で登録し、デフォルトに設定する。Bold は ",[38,47,48],{},"template.Bold()"," での合成か、IPAex 明朝をペア登録して明朝で強調する古典的な方法で対処。バイナリ配布時はライセンス全文を同梱する。",[13,51,52],{"id":52},"動くコード",[54,55,60],"pre",{"className":56,"code":57,"language":58,"meta":59,"style":59},"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","",[38,61,62,75,82,92,104,114,119,129,139,149,155,160,176,214,230,248,254,259,278,301,339,365,390,396,401,420,454,491,539,559,579,585,591,596,617,630,645,650,696,711,716],{"__ignoreMap":59},[63,64,67,71],"span",{"class":65,"line":66},"line",1,[63,68,70],{"class":69},"sMK4o","package",[63,72,74],{"class":73},"sBMFI"," main\n",[63,76,78],{"class":65,"line":77},2,[63,79,81],{"emptyLinePlaceholder":80},true,"\n",[63,83,85,89],{"class":65,"line":84},3,[63,86,88],{"class":87},"s7zQu","import",[63,90,91],{"class":69}," (\n",[63,93,95,98,101],{"class":65,"line":94},4,[63,96,97],{"class":69},"    \"",[63,99,100],{"class":73},"log",[63,102,103],{"class":69},"\"\n",[63,105,107,109,112],{"class":65,"line":106},5,[63,108,97],{"class":69},[63,110,111],{"class":73},"os",[63,113,103],{"class":69},[63,115,117],{"class":65,"line":116},6,[63,118,81],{"emptyLinePlaceholder":80},[63,120,122,124,127],{"class":65,"line":121},7,[63,123,97],{"class":69},[63,125,126],{"class":73},"github.com/gpdf-dev/gpdf",[63,128,103],{"class":69},[63,130,132,134,137],{"class":65,"line":131},8,[63,133,97],{"class":69},[63,135,136],{"class":73},"github.com/gpdf-dev/gpdf/document",[63,138,103],{"class":69},[63,140,142,144,147],{"class":65,"line":141},9,[63,143,97],{"class":69},[63,145,146],{"class":73},"github.com/gpdf-dev/gpdf/template",[63,148,103],{"class":69},[63,150,152],{"class":65,"line":151},10,[63,153,154],{"class":69},")\n",[63,156,158],{"class":65,"line":157},11,[63,159,81],{"emptyLinePlaceholder":80},[63,161,163,166,170,173],{"class":65,"line":162},12,[63,164,165],{"class":69},"func",[63,167,169],{"class":168},"s2Zo4"," main",[63,171,172],{"class":69},"()",[63,174,175],{"class":69}," {\n",[63,177,179,183,186,189,192,195,198,201,204,207,210,212],{"class":65,"line":178},13,[63,180,182],{"class":181},"sTEyZ","    font",[63,184,185],{"class":69},",",[63,187,188],{"class":181}," err ",[63,190,191],{"class":69},":=",[63,193,194],{"class":181}," os",[63,196,197],{"class":69},".",[63,199,200],{"class":168},"ReadFile",[63,202,203],{"class":69},"(",[63,205,206],{"class":69},"\"",[63,208,40],{"class":209},"sfazB",[63,211,206],{"class":69},[63,213,154],{"class":69},[63,215,217,220,222,225,228],{"class":65,"line":216},14,[63,218,219],{"class":87},"    if",[63,221,188],{"class":181},[63,223,224],{"class":69},"!=",[63,226,227],{"class":69}," nil",[63,229,175],{"class":69},[63,231,233,236,238,241,243,246],{"class":65,"line":232},15,[63,234,235],{"class":181},"        log",[63,237,197],{"class":69},[63,239,240],{"class":168},"Fatal",[63,242,203],{"class":69},[63,244,245],{"class":181},"err",[63,247,154],{"class":69},[63,249,251],{"class":65,"line":250},16,[63,252,253],{"class":69},"    }\n",[63,255,257],{"class":65,"line":256},17,[63,258,81],{"emptyLinePlaceholder":80},[63,260,262,265,267,270,272,275],{"class":65,"line":261},18,[63,263,264],{"class":181},"    doc ",[63,266,191],{"class":69},[63,268,269],{"class":181}," gpdf",[63,271,197],{"class":69},[63,273,274],{"class":168},"NewDocument",[63,276,277],{"class":69},"(\n",[63,279,281,284,286,289,291,293,295,298],{"class":65,"line":280},19,[63,282,283],{"class":181},"        gpdf",[63,285,197],{"class":69},[63,287,288],{"class":168},"WithPageSize",[63,290,203],{"class":69},[63,292,25],{"class":181},[63,294,197],{"class":69},[63,296,297],{"class":181},"A4",[63,299,300],{"class":69},"),\n",[63,302,304,306,308,311,313,316,318,321,323,325,327,330,332,336],{"class":65,"line":303},20,[63,305,283],{"class":181},[63,307,197],{"class":69},[63,309,310],{"class":168},"WithMargins",[63,312,203],{"class":69},[63,314,315],{"class":181},"document",[63,317,197],{"class":69},[63,319,320],{"class":168},"UniformEdges",[63,322,203],{"class":69},[63,324,315],{"class":181},[63,326,197],{"class":69},[63,328,329],{"class":168},"Mm",[63,331,203],{"class":69},[63,333,335],{"class":334},"sbssI","25",[63,337,338],{"class":69},"))),\n",[63,340,342,344,346,349,351,353,356,358,360,363],{"class":65,"line":341},21,[63,343,283],{"class":181},[63,345,197],{"class":69},[63,347,348],{"class":168},"WithFont",[63,350,203],{"class":69},[63,352,206],{"class":69},[63,354,355],{"class":209},"IPAexGothic",[63,357,206],{"class":69},[63,359,185],{"class":69},[63,361,362],{"class":181}," font",[63,364,300],{"class":69},[63,366,368,370,372,375,377,379,381,383,385,388],{"class":65,"line":367},22,[63,369,283],{"class":181},[63,371,197],{"class":69},[63,373,374],{"class":168},"WithDefaultFont",[63,376,203],{"class":69},[63,378,206],{"class":69},[63,380,355],{"class":209},[63,382,206],{"class":69},[63,384,185],{"class":69},[63,386,387],{"class":334}," 10.5",[63,389,300],{"class":69},[63,391,393],{"class":65,"line":392},23,[63,394,395],{"class":69},"    )\n",[63,397,399],{"class":65,"line":398},24,[63,400,81],{"emptyLinePlaceholder":80},[63,402,404,407,409,412,414,417],{"class":65,"line":403},25,[63,405,406],{"class":181},"    page ",[63,408,191],{"class":69},[63,410,411],{"class":181}," doc",[63,413,197],{"class":69},[63,415,416],{"class":168},"AddPage",[63,418,419],{"class":69},"()\n",[63,421,423,426,428,431,434,438,441,444,446,449,452],{"class":65,"line":422},26,[63,424,425],{"class":181},"    page",[63,427,197],{"class":69},[63,429,430],{"class":168},"AutoRow",[63,432,433],{"class":69},"(func(",[63,435,437],{"class":436},"sHdIc","r",[63,439,440],{"class":69}," *",[63,442,443],{"class":73},"template",[63,445,197],{"class":69},[63,447,448],{"class":73},"RowBuilder",[63,450,451],{"class":69},")",[63,453,175],{"class":69},[63,455,457,460,462,465,467,470,472,475,478,480,482,484,487,489],{"class":65,"line":456},27,[63,458,459],{"class":181},"        r",[63,461,197],{"class":69},[63,463,464],{"class":168},"Col",[63,466,203],{"class":69},[63,468,469],{"class":334},"12",[63,471,185],{"class":69},[63,473,474],{"class":69}," func(",[63,476,477],{"class":436},"c",[63,479,440],{"class":69},[63,481,443],{"class":73},[63,483,197],{"class":69},[63,485,486],{"class":73},"ColBuilder",[63,488,451],{"class":69},[63,490,175],{"class":69},[63,492,494,497,499,502,504,506,509,511,513,516,518,521,523,526,529,531,533,536],{"class":65,"line":493},28,[63,495,496],{"class":181},"            c",[63,498,197],{"class":69},[63,500,501],{"class":168},"Text",[63,503,203],{"class":69},[63,505,206],{"class":69},[63,507,508],{"class":209},"請求書",[63,510,206],{"class":69},[63,512,185],{"class":69},[63,514,515],{"class":181}," template",[63,517,197],{"class":69},[63,519,520],{"class":168},"FontSize",[63,522,203],{"class":69},[63,524,525],{"class":334},"24",[63,527,528],{"class":69},"),",[63,530,515],{"class":181},[63,532,197],{"class":69},[63,534,535],{"class":168},"Bold",[63,537,538],{"class":69},"())\n",[63,540,542,544,546,548,550,552,555,557],{"class":65,"line":541},29,[63,543,496],{"class":181},[63,545,197],{"class":69},[63,547,501],{"class":168},[63,549,203],{"class":69},[63,551,206],{"class":69},[63,553,554],{"class":209},"令和8年4月17日発行",[63,556,206],{"class":69},[63,558,154],{"class":69},[63,560,562,564,566,568,570,572,575,577],{"class":65,"line":561},30,[63,563,496],{"class":181},[63,565,197],{"class":69},[63,567,501],{"class":168},[63,569,203],{"class":69},[63,571,206],{"class":69},[63,573,574],{"class":209},"金額: ¥100,000 (税込)",[63,576,206],{"class":69},[63,578,154],{"class":69},[63,580,582],{"class":65,"line":581},31,[63,583,584],{"class":69},"        })\n",[63,586,588],{"class":65,"line":587},32,[63,589,590],{"class":69},"    })\n",[63,592,594],{"class":65,"line":593},33,[63,595,81],{"emptyLinePlaceholder":80},[63,597,599,602,604,606,608,610,612,615],{"class":65,"line":598},34,[63,600,601],{"class":181},"    data",[63,603,185],{"class":69},[63,605,188],{"class":181},[63,607,191],{"class":69},[63,609,411],{"class":181},[63,611,197],{"class":69},[63,613,614],{"class":168},"Generate",[63,616,419],{"class":69},[63,618,620,622,624,626,628],{"class":65,"line":619},35,[63,621,219],{"class":87},[63,623,188],{"class":181},[63,625,224],{"class":69},[63,627,227],{"class":69},[63,629,175],{"class":69},[63,631,633,635,637,639,641,643],{"class":65,"line":632},36,[63,634,235],{"class":181},[63,636,197],{"class":69},[63,638,240],{"class":168},[63,640,203],{"class":69},[63,642,245],{"class":181},[63,644,154],{"class":69},[63,646,648],{"class":65,"line":647},37,[63,649,253],{"class":69},[63,651,653,655,657,659,661,663,666,668,670,673,675,677,680,682,685,688,690,692,694],{"class":65,"line":652},38,[63,654,219],{"class":87},[63,656,188],{"class":181},[63,658,191],{"class":69},[63,660,194],{"class":181},[63,662,197],{"class":69},[63,664,665],{"class":168},"WriteFile",[63,667,203],{"class":69},[63,669,206],{"class":69},[63,671,672],{"class":209},"invoice.pdf",[63,674,206],{"class":69},[63,676,185],{"class":69},[63,678,679],{"class":181}," data",[63,681,185],{"class":69},[63,683,684],{"class":334}," 0o644",[63,686,687],{"class":69},");",[63,689,188],{"class":181},[63,691,224],{"class":69},[63,693,227],{"class":69},[63,695,175],{"class":69},[63,697,699,701,703,705,707,709],{"class":65,"line":698},39,[63,700,235],{"class":181},[63,702,197],{"class":69},[63,704,240],{"class":168},[63,706,203],{"class":69},[63,708,245],{"class":181},[63,710,154],{"class":69},[63,712,714],{"class":65,"line":713},40,[63,715,253],{"class":69},[63,717,719],{"class":65,"line":718},41,[63,720,721],{"class":69},"}\n",[17,723,724,729,730,733,734,41,736,739,740,743,744,747],{},[20,725,728],{"href":726,"rel":727},"https://moji.or.jp/ipafont/",[24],"moji.or.jp/ipafont"," から ",[38,731,732],{},"IPAex00401.zip"," を落として ",[38,735,40],{},[38,737,738],{},"main.go"," の隣に置き、",[38,741,742],{},"go run main.go","。",[38,745,746],{},"10.5 pt"," は Word 互換で違和感のない標準サイズ、25 mm マージンは日本の A4 ビジネス文書の慣習。",[13,749,751],{"id":750},"ipa-ipaex-のどのファイルを使うか","IPA / IPAex のどのファイルを使うか",[17,753,754],{},"zip を開くと TTF が 3 つとライセンス本文が入っている。名前がそっくりで間違えやすい:",[756,757,758,771],"table",{},[759,760,761],"thead",{},[762,763,764,768],"tr",{},[765,766,767],"th",{},"ファイル",[765,769,770],{},"中身",[772,773,774,786,799],"tbody",{},[762,775,776,781],{},[777,778,779],"td",{},[38,780,40],{},[777,782,783,785],{},[28,784,30],{}," — サンセリフ、Latin はプロポーショナル。一般的な書類はこれ。",[762,787,788,793],{},[777,789,790],{},[38,791,792],{},"ipaexm.ttf",[777,794,795,798],{},[28,796,797],{},"IPAex 明朝"," — セリフ、Latin はプロポーショナル。長文本文やゴシックと組んでの強調用。",[762,800,801,806],{},[777,802,803],{},[38,804,805],{},"ipag.ttf",[777,807,808,811,812,815],{},[28,809,810],{},"IPA ゴシック"," (ex なし) — サンセリフ、",[28,813,814],{},"Latin が等幅","。今はあまり使わない。",[17,817,818,819,821,822,825],{},"\"ex\" は extended proportional の略で、Latin を CJK 全角の格子から外してプロポーショナルにした版。旧 IPA ゴシック (",[38,820,805],{},") は英数字まで全角幅で並ぶため、和英混在文書では間延びして見える。URL や金額や商品コードが必ず入る業務文書なら、ほぼ間違いなく ",[28,823,824],{},"IPAex"," (ipaexg/ipaexm) を選ぶ。",[17,827,828,829,831,832,834,835,837],{},"既存プロジェクトで ",[38,830,805],{}," を使っているなら、理由はだいたい歴史的経緯 (IPA ゴシック初版が 2003 年、IPAex は 2010 年リリース)。ファミリ名を ",[38,833,355],{}," に揃えて ",[38,836,40],{}," に差し替えれば、コード側は 1 行変更で済む。",[13,839,841],{"id":840},"bold-がない問題への対処","Bold がない問題への対処",[17,843,844],{},"IPAex は Regular のみ 1 ウェイト。Noto Sans JP が Thin から Black まで 9 ウェイト出しているのと比較すると見劣りするポイントで、IPAex を採用検討して断念する最大の理由はこれ。",[17,846,847],{},"gpdf での対処は 2 通り。",[17,849,850,853,854,856],{},[28,851,852],{},"合成ボールド。"," ",[38,855,48],{}," が Regular のグリフにストロークを重ねて太く見せる。タイポグラフィ的には「本当のボールド」(専用デザインされた太字アウトライン) とは別物だが、10 pt 以上の見出し・表ラベル用途なら肉眼ではほぼ見分けがつかない:",[54,858,860],{"className":56,"code":859,"language":58,"meta":59,"style":59},"c.Text(\"合計金額\", template.Bold())\n",[38,861,862],{"__ignoreMap":59},[63,863,864,866,868,870,872,874,877,879,881,883,885,887],{"class":65,"line":66},[63,865,477],{"class":181},[63,867,197],{"class":69},[63,869,501],{"class":168},[63,871,203],{"class":69},[63,873,206],{"class":69},[63,875,876],{"class":209},"合計金額",[63,878,206],{"class":69},[63,880,185],{"class":69},[63,882,515],{"class":181},[63,884,197],{"class":69},[63,886,535],{"class":168},[63,888,538],{"class":69},[17,890,891,894],{},[28,892,893],{},"明朝ペアで強調する。"," 日本語組版の古典的な強調手法は「太字にする」ではなく「明朝とゴシックを切り替える」。両ファミリを登録して場面で使い分ける:",[54,896,898],{"className":56,"code":897,"language":58,"meta":59,"style":59},"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",[38,899,900,928,955,959,974,998,1022,1044,1048,1052,1077,1108,1157,1176,1180],{"__ignoreMap":59},[63,901,902,905,907,910,912,914,916,918,920,922,924,926],{"class":65,"line":66},[63,903,904],{"class":181},"gothic",[63,906,185],{"class":69},[63,908,909],{"class":181}," _ ",[63,911,191],{"class":69},[63,913,194],{"class":181},[63,915,197],{"class":69},[63,917,200],{"class":168},[63,919,203],{"class":69},[63,921,206],{"class":69},[63,923,40],{"class":209},[63,925,206],{"class":69},[63,927,154],{"class":69},[63,929,930,933,935,937,939,941,943,945,947,949,951,953],{"class":65,"line":77},[63,931,932],{"class":181},"mincho",[63,934,185],{"class":69},[63,936,909],{"class":181},[63,938,191],{"class":69},[63,940,194],{"class":181},[63,942,197],{"class":69},[63,944,200],{"class":168},[63,946,203],{"class":69},[63,948,206],{"class":69},[63,950,792],{"class":209},[63,952,206],{"class":69},[63,954,154],{"class":69},[63,956,957],{"class":65,"line":84},[63,958,81],{"emptyLinePlaceholder":80},[63,960,961,964,966,968,970,972],{"class":65,"line":94},[63,962,963],{"class":181},"doc ",[63,965,191],{"class":69},[63,967,269],{"class":181},[63,969,197],{"class":69},[63,971,274],{"class":168},[63,973,277],{"class":69},[63,975,976,979,981,983,985,987,989,991,993,996],{"class":65,"line":106},[63,977,978],{"class":181},"    gpdf",[63,980,197],{"class":69},[63,982,348],{"class":168},[63,984,203],{"class":69},[63,986,206],{"class":69},[63,988,355],{"class":209},[63,990,206],{"class":69},[63,992,185],{"class":69},[63,994,995],{"class":181}," gothic",[63,997,300],{"class":69},[63,999,1000,1002,1004,1006,1008,1010,1013,1015,1017,1020],{"class":65,"line":116},[63,1001,978],{"class":181},[63,1003,197],{"class":69},[63,1005,348],{"class":168},[63,1007,203],{"class":69},[63,1009,206],{"class":69},[63,1011,1012],{"class":209},"IPAexMincho",[63,1014,206],{"class":69},[63,1016,185],{"class":69},[63,1018,1019],{"class":181}," mincho",[63,1021,300],{"class":69},[63,1023,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042],{"class":65,"line":121},[63,1025,978],{"class":181},[63,1027,197],{"class":69},[63,1029,374],{"class":168},[63,1031,203],{"class":69},[63,1033,206],{"class":69},[63,1035,355],{"class":209},[63,1037,206],{"class":69},[63,1039,185],{"class":69},[63,1041,387],{"class":334},[63,1043,300],{"class":69},[63,1045,1046],{"class":65,"line":131},[63,1047,154],{"class":69},[63,1049,1050],{"class":65,"line":141},[63,1051,81],{"emptyLinePlaceholder":80},[63,1053,1054,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075],{"class":65,"line":151},[63,1055,1056],{"class":181},"page",[63,1058,197],{"class":69},[63,1060,430],{"class":168},[63,1062,433],{"class":69},[63,1064,437],{"class":436},[63,1066,440],{"class":69},[63,1068,443],{"class":73},[63,1070,197],{"class":69},[63,1072,448],{"class":73},[63,1074,451],{"class":69},[63,1076,175],{"class":69},[63,1078,1079,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106],{"class":65,"line":157},[63,1080,1081],{"class":181},"    r",[63,1083,197],{"class":69},[63,1085,464],{"class":168},[63,1087,203],{"class":69},[63,1089,469],{"class":334},[63,1091,185],{"class":69},[63,1093,474],{"class":69},[63,1095,477],{"class":436},[63,1097,440],{"class":69},[63,1099,443],{"class":73},[63,1101,197],{"class":69},[63,1103,486],{"class":73},[63,1105,451],{"class":69},[63,1107,175],{"class":69},[63,1109,1110,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154],{"class":65,"line":162},[63,1111,1112],{"class":181},"        c",[63,1114,197],{"class":69},[63,1116,501],{"class":168},[63,1118,203],{"class":69},[63,1120,206],{"class":69},[63,1122,508],{"class":209},[63,1124,206],{"class":69},[63,1126,185],{"class":69},[63,1128,515],{"class":181},[63,1130,197],{"class":69},[63,1132,1133],{"class":168},"FontFamily",[63,1135,203],{"class":69},[63,1137,206],{"class":69},[63,1139,1012],{"class":209},[63,1141,206],{"class":69},[63,1143,528],{"class":69},[63,1145,515],{"class":181},[63,1147,197],{"class":69},[63,1149,520],{"class":168},[63,1151,203],{"class":69},[63,1153,525],{"class":334},[63,1155,1156],{"class":69},"))\n",[63,1158,1159,1161,1163,1165,1167,1169,1172,1174],{"class":65,"line":178},[63,1160,1112],{"class":181},[63,1162,197],{"class":69},[63,1164,501],{"class":168},[63,1166,203],{"class":69},[63,1168,206],{"class":69},[63,1170,1171],{"class":209},"ご請求内容は下記の通りです。",[63,1173,206],{"class":69},[63,1175,154],{"class":69},[63,1177,1178],{"class":65,"line":216},[63,1179,590],{"class":69},[63,1181,1182],{"class":65,"line":232},[63,1183,1184],{"class":69},"})\n",[17,1186,1187],{},"招待状や式典用の案内状、それから官公庁向けの公式文書でよく見る組み合わせ。見出しを明朝にし、本文をゴシックにするとフォーマル寄りの紙面になる。e-Tax 添付書類や税務署提出用の帳票なら、この組み合わせのほうが違和感なく収まる。",[13,1189,1191],{"id":1190},"ipa-フォントライセンスの扱い","IPA フォントライセンスの扱い",[17,1193,1194,1195,1200],{},"IPAex は SIL OFL ではなく ",[20,1196,1199],{"href":1197,"rel":1198},"https://www.ipa.go.jp/security/fonts/license.html",[24],"IPA フォントライセンス v1.0"," (OSI 承認済み)。基本は寛容だが、2 点だけ確認しておく:",[1202,1203,1204,1219],"ol",{},[1205,1206,1207,1210,1211,1214,1215,1218],"li",{},[28,1208,1209],{},"ライセンス本文の同梱が必要。"," フォントバイナリを配布する先にライセンス全文が付いている必要がある。",[38,1212,1213],{},"//go:embed"," で TTF を Go バイナリに焼く場合、同時に ",[38,1216,1217],{},"LICENSES/IPA-FONT-1.0.txt"," を置いて NOTICE から参照しておけば問題ない。",[1205,1220,1221,1224,1225,1228],{},[28,1222,1223],{},"フォントのリネーム禁止。"," TTF 自体を改変して再配布する場合、\"IPA\" や \"IPAex\" を含まない別名にする必要がある。ただし",[28,1226,1227],{},"サブセット化はこれに該当しない"," — ライセンス第 3 条第 4 項が明示的に、フォントを使って作成した「出力文書」(Derivative Document) にはこの制約が及ばないと書いている。",[17,1230,1231,1232,1235],{},"つまり、gpdf が ",[38,1233,1234],{},"doc.Generate()"," 時にグリフをサブセット化して PDF に埋め込む行為は license 上セーフ。PDF ファイル自体はフォントプログラムの再配布ではなく「フォントを使って作った文書」扱いになる。",[17,1237,1238],{},"補足として、gpdf のコア OSS リポジトリには IPAex を置いていない (golden file テスト用は Noto 系の SIL OFL フォントを使っている)。これは下流のユーザが、自プロジェクトの LICENSE との組み合わせで IPA ライセンスの整合性をわざわざ確認せずに済むようにするため。アプリケーション側で IPAex を使うのは各プロジェクトの判断で問題ない。",[13,1240,1242],{"id":1241},"ipaex-ゴシック-vs-noto-sans-jpどっちを選ぶか","IPAex ゴシック vs Noto Sans JP、どっちを選ぶか",[756,1244,1245,1257],{},[759,1246,1247],{},[762,1248,1249,1252,1254],{},[765,1250,1251],{},"比較軸",[765,1253,30],{},[765,1255,1256],{},"Noto Sans JP",[772,1258,1259,1270,1280,1291,1305,1316],{},[762,1260,1261,1264,1267],{},[777,1262,1263],{},"ウェイト数",[777,1265,1266],{},"1 (Regular のみ)",[777,1268,1269],{},"9 (Thin 〜 Black)",[762,1271,1272,1275,1277],{},[777,1273,1274],{},"ライセンス",[777,1276,1199],{},[777,1278,1279],{},"SIL OFL 1.1",[762,1281,1282,1285,1288],{},[777,1283,1284],{},"Latin 扱い",[777,1286,1287],{},"IPAex はプロポーショナル / IPA は等幅",[777,1289,1290],{},"プロポーショナル",[762,1292,1293,1296,1302],{},[777,1294,1295],{},"初期インストール",[777,1297,1298,1299],{},"一部の日本語 Linux ディストロ、TeX Live ",[38,1300,1301],{},"ptex-fonts",[777,1303,1304],{},"Android、ChromeOS",[762,1306,1307,1310,1313],{},[777,1308,1309],{},"よく使われる場面",[777,1311,1312],{},"官公庁・税務・学術提出",[777,1314,1315],{},"商用 Web、国際向け",[762,1317,1318,1321,1324],{},[777,1319,1320],{},"ファイルサイズ",[777,1322,1323],{},"7.5 MB (ゴシック単体)",[777,1325,1326],{},"5 MB (Regular 単体)",[17,1328,1329,1332],{},[28,1330,1331],{},"e-Tax の PDF 添付、裁判所提出書類、学会への論文提出"," — つまり出力が日本の制度的な窓口を通るときは IPAex を選ぶ。採点者・レビュア・OCR ツールが IPA に合わせて調整されている。それ以外は Noto Sans JP で十分。レンダリング結果はどちらも実用上そっくりで、選ぶ基準は見た目ではなく「出力先のエコシステムがどちらに馴染んでいるか」。",[13,1334,1335],{"id":1335},"関連記事",[1337,1338,1339,1346,1353,1360],"ul",{},[1205,1340,1341,1345],{},[20,1342,1344],{"href":1343},"/ja/blog/embed-japanese-font","gpdf で日本語フォントを埋め込むには?"," — CJK TTF 全般に効く一般的なレシピ",[1205,1347,1348,1352],{},[20,1349,1351],{"href":1350},"/ja/blog/noto-sans-jp-with-gpdf","Noto Sans JP を gpdf で使うには?"," — SIL OFL で 9 ウェイト揃う選択肢",[1205,1354,1355,1359],{},[20,1356,1358],{"href":1357},"/ja/blog/tofu-boxes-japanese","gpdf で日本語が豆腐文字 (□□□) になる原因と直し方"," — グリフが出ないときのトラブルシュート",[1205,1361,1362,1367,1368,1370],{},[20,1363,1366],{"href":1364,"rel":1365},"https://gpdf.dev/ja/docs/guide/fonts",[24],"フォントガイド"," — ",[38,1369,348],{}," のフルリファレンス",[13,1372,1374],{"id":1373},"gpdf-を使ってみる","gpdf を使ってみる",[17,1376,1377],{},"gpdf は Go の PDF 生成ライブラリ。MIT、外部依存ゼロ、ネイティブ CJK 対応。",[54,1379,1383],{"className":1380,"code":1381,"language":1382,"meta":59,"style":59},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[38,1384,1385],{"__ignoreMap":59},[63,1386,1387,1389,1392],{"class":65,"line":66},[63,1388,58],{"class":73},[63,1390,1391],{"class":209}," get",[63,1393,1394],{"class":209}," github.com/gpdf-dev/gpdf\n",[17,1396,1397,1401,1402],{},[20,1398,1400],{"href":22,"rel":1399},[24],"⭐ GitHub でスター"," · ",[20,1403,1406],{"href":1404,"rel":1405},"https://gpdf.dev/ja/docs/quickstart",[24],"ドキュメントを読む",[1408,1409,1410],"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":59,"searchDepth":77,"depth":77,"links":1412},[1413,1414,1415,1416,1417,1418,1419,1420,1421],{"id":15,"depth":77,"text":15},{"id":34,"depth":77,"text":34},{"id":52,"depth":77,"text":52},{"id":750,"depth":77,"text":751},{"id":840,"depth":77,"text":841},{"id":1190,"depth":77,"text":1191},{"id":1241,"depth":77,"text":1242},{"id":1335,"depth":77,"text":1335},{"id":1373,"depth":77,"text":1374},"2026-04-17","ipaexg.ttf を gpdf.WithFont で登録する。IPAex は Regular 1 ウェイトのみなので、Bold は合成か明朝ペアで対応する。",false,"md",{"name":1427,"totalTime":1428,"tools":1429,"steps":1432},"gpdf ドキュメントで IPAex ゴシックをデフォルトフォントに設定する","PT10M",[1430,1431],"Go 1.22+","ipaexg.ttf (moji.or.jp 配布の IPAex ゴシック v4.01)",[1433,1436,1439,1442,1445],{"name":1434,"text":1435},"moji.or.jp から IPAex フォント一式をダウンロードする","moji.or.jp/ipafont から IPAex00401.zip を取得し、解凍後に ipaexg.ttf と同梱の IPA フォントライセンス v1.0 のテキストファイルを残しておく。",{"name":1437,"text":1438},"TTF のバイト列を読み込む","プログラム起動時に os.ReadFile(\"ipaexg.ttf\") で []byte に読み込む。コンテナ配布なら //go:embed で Go バイナリに焼き付けると取り回しが楽。",{"name":1440,"text":1441},"ドキュメント構築時に登録する","gpdf.WithFont(\"IPAexGothic\", fontBytes) と gpdf.WithDefaultFont(\"IPAexGothic\", 10.5) を gpdf.NewDocument に渡す。10.5 pt は Word の日本語既定サイズと同じ。",{"name":1443,"text":1444},"Bold がない問題に対処する","IPAex にはボールド版がない。template.Bold() で合成 (0.4 pt のストローク重ね) するか、別ファミリとして IPAex 明朝を登録して強調用に使い分ける。",{"name":1446,"text":1447},"ライセンステキストを同梱する","IPA フォントライセンス v1.0 はフォントバイナリの配布先にライセンス全文の同梱を求める。//go:embed する場合は同時に LICENSES/IPA-FONT-1.0.txt を置いて NOTICE から参照する。",null,{},"/ja/blog/ipaex-gothic-gpdf",{"title":5,"description":1423},"ja/blog/009.ipaex-gothic-gpdf",[1454,1455,1456],"recipe","cjk","tutorial","xl0gLtrWe__11ibyPs-oyON7YjMJTtF-j4V0t6aCDW8",1776529263952]