[{"data":1,"prerenderedAt":1453},["ShallowReactive",2],{"blog-ko-ipaex-gothic-gpdf":3},{"id":4,"title":5,"author":6,"body":9,"date":1417,"description":1418,"draft":1419,"extension":1420,"howTo":1421,"image":1443,"meta":1444,"navigation":84,"path":1445,"seo":1446,"stem":1447,"tags":1448,"updated":1443,"__hash__":1452},"blogKo/ko/blog/009.ipaex-gothic-gpdf.md","gpdf에서 IPAex 고딕(IPAex Gothic)을 사용하려면?",{"name":7,"url":8},"gpdf team","https://gpdf.dev",{"type":10,"value":11,"toc":1406},"minimark",[12,17,34,38,53,57,726,746,750,753,816,823,835,839,842,845,854,886,892,1182,1185,1189,1198,1225,1232,1235,1239,1324,1327,1331,1366,1370,1373,1390,1402],[13,14,16],"h2",{"id":15},"질문을-다시-말하면","질문을 다시 말하면",[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,37],{"id":36},"빠른-답","빠른 답",[18,39,40,44,45,48,49,52],{},[41,42,43],"code",{},"ipaexg.ttf","를 ",[41,46,47],{},"gpdf.WithFont(\"IPAexGothic\", bytes)","로 등록하고 기본 폰트로 설정한다. Bold는 ",[41,50,51],{},"template.Bold()","로 합성하거나 IPAex 명조와 페어링한다. IPAex는 Regular 한 가지 굵기만 제공하기 때문이다. 바이너리 배포 시 라이선스 전문을 동봉한다.",[13,54,56],{"id":55},"완성된-예제","완성된 예제",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"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,65,66,79,86,96,108,118,123,133,143,153,159,164,180,218,234,252,258,263,282,305,343,369,394,400,405,424,458,495,543,563,583,589,595,600,621,634,649,654,700,715,720],{"__ignoreMap":63},[67,68,71,75],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"sMK4o","package",[67,76,78],{"class":77},"sBMFI"," main\n",[67,80,82],{"class":69,"line":81},2,[67,83,85],{"emptyLinePlaceholder":84},true,"\n",[67,87,89,93],{"class":69,"line":88},3,[67,90,92],{"class":91},"s7zQu","import",[67,94,95],{"class":73}," (\n",[67,97,99,102,105],{"class":69,"line":98},4,[67,100,101],{"class":73},"    \"",[67,103,104],{"class":77},"log",[67,106,107],{"class":73},"\"\n",[67,109,111,113,116],{"class":69,"line":110},5,[67,112,101],{"class":73},[67,114,115],{"class":77},"os",[67,117,107],{"class":73},[67,119,121],{"class":69,"line":120},6,[67,122,85],{"emptyLinePlaceholder":84},[67,124,126,128,131],{"class":69,"line":125},7,[67,127,101],{"class":73},[67,129,130],{"class":77},"github.com/gpdf-dev/gpdf",[67,132,107],{"class":73},[67,134,136,138,141],{"class":69,"line":135},8,[67,137,101],{"class":73},[67,139,140],{"class":77},"github.com/gpdf-dev/gpdf/document",[67,142,107],{"class":73},[67,144,146,148,151],{"class":69,"line":145},9,[67,147,101],{"class":73},[67,149,150],{"class":77},"github.com/gpdf-dev/gpdf/template",[67,152,107],{"class":73},[67,154,156],{"class":69,"line":155},10,[67,157,158],{"class":73},")\n",[67,160,162],{"class":69,"line":161},11,[67,163,85],{"emptyLinePlaceholder":84},[67,165,167,170,174,177],{"class":69,"line":166},12,[67,168,169],{"class":73},"func",[67,171,173],{"class":172},"s2Zo4"," main",[67,175,176],{"class":73},"()",[67,178,179],{"class":73}," {\n",[67,181,183,187,190,193,196,199,202,205,208,211,214,216],{"class":69,"line":182},13,[67,184,186],{"class":185},"sTEyZ","    font",[67,188,189],{"class":73},",",[67,191,192],{"class":185}," err ",[67,194,195],{"class":73},":=",[67,197,198],{"class":185}," os",[67,200,201],{"class":73},".",[67,203,204],{"class":172},"ReadFile",[67,206,207],{"class":73},"(",[67,209,210],{"class":73},"\"",[67,212,43],{"class":213},"sfazB",[67,215,210],{"class":73},[67,217,158],{"class":73},[67,219,221,224,226,229,232],{"class":69,"line":220},14,[67,222,223],{"class":91},"    if",[67,225,192],{"class":185},[67,227,228],{"class":73},"!=",[67,230,231],{"class":73}," nil",[67,233,179],{"class":73},[67,235,237,240,242,245,247,250],{"class":69,"line":236},15,[67,238,239],{"class":185},"        log",[67,241,201],{"class":73},[67,243,244],{"class":172},"Fatal",[67,246,207],{"class":73},[67,248,249],{"class":185},"err",[67,251,158],{"class":73},[67,253,255],{"class":69,"line":254},16,[67,256,257],{"class":73},"    }\n",[67,259,261],{"class":69,"line":260},17,[67,262,85],{"emptyLinePlaceholder":84},[67,264,266,269,271,274,276,279],{"class":69,"line":265},18,[67,267,268],{"class":185},"    doc ",[67,270,195],{"class":73},[67,272,273],{"class":185}," gpdf",[67,275,201],{"class":73},[67,277,278],{"class":172},"NewDocument",[67,280,281],{"class":73},"(\n",[67,283,285,288,290,293,295,297,299,302],{"class":69,"line":284},19,[67,286,287],{"class":185},"        gpdf",[67,289,201],{"class":73},[67,291,292],{"class":172},"WithPageSize",[67,294,207],{"class":73},[67,296,26],{"class":185},[67,298,201],{"class":73},[67,300,301],{"class":185},"A4",[67,303,304],{"class":73},"),\n",[67,306,308,310,312,315,317,320,322,325,327,329,331,334,336,340],{"class":69,"line":307},20,[67,309,287],{"class":185},[67,311,201],{"class":73},[67,313,314],{"class":172},"WithMargins",[67,316,207],{"class":73},[67,318,319],{"class":185},"document",[67,321,201],{"class":73},[67,323,324],{"class":172},"UniformEdges",[67,326,207],{"class":73},[67,328,319],{"class":185},[67,330,201],{"class":73},[67,332,333],{"class":172},"Mm",[67,335,207],{"class":73},[67,337,339],{"class":338},"sbssI","25",[67,341,342],{"class":73},"))),\n",[67,344,346,348,350,353,355,357,360,362,364,367],{"class":69,"line":345},21,[67,347,287],{"class":185},[67,349,201],{"class":73},[67,351,352],{"class":172},"WithFont",[67,354,207],{"class":73},[67,356,210],{"class":73},[67,358,359],{"class":213},"IPAexGothic",[67,361,210],{"class":73},[67,363,189],{"class":73},[67,365,366],{"class":185}," font",[67,368,304],{"class":73},[67,370,372,374,376,379,381,383,385,387,389,392],{"class":69,"line":371},22,[67,373,287],{"class":185},[67,375,201],{"class":73},[67,377,378],{"class":172},"WithDefaultFont",[67,380,207],{"class":73},[67,382,210],{"class":73},[67,384,359],{"class":213},[67,386,210],{"class":73},[67,388,189],{"class":73},[67,390,391],{"class":338}," 10.5",[67,393,304],{"class":73},[67,395,397],{"class":69,"line":396},23,[67,398,399],{"class":73},"    )\n",[67,401,403],{"class":69,"line":402},24,[67,404,85],{"emptyLinePlaceholder":84},[67,406,408,411,413,416,418,421],{"class":69,"line":407},25,[67,409,410],{"class":185},"    page ",[67,412,195],{"class":73},[67,414,415],{"class":185}," doc",[67,417,201],{"class":73},[67,419,420],{"class":172},"AddPage",[67,422,423],{"class":73},"()\n",[67,425,427,430,432,435,438,442,445,448,450,453,456],{"class":69,"line":426},26,[67,428,429],{"class":185},"    page",[67,431,201],{"class":73},[67,433,434],{"class":172},"AutoRow",[67,436,437],{"class":73},"(func(",[67,439,441],{"class":440},"sHdIc","r",[67,443,444],{"class":73}," *",[67,446,447],{"class":77},"template",[67,449,201],{"class":73},[67,451,452],{"class":77},"RowBuilder",[67,454,455],{"class":73},")",[67,457,179],{"class":73},[67,459,461,464,466,469,471,474,476,479,482,484,486,488,491,493],{"class":69,"line":460},27,[67,462,463],{"class":185},"        r",[67,465,201],{"class":73},[67,467,468],{"class":172},"Col",[67,470,207],{"class":73},[67,472,473],{"class":338},"12",[67,475,189],{"class":73},[67,477,478],{"class":73}," func(",[67,480,481],{"class":440},"c",[67,483,444],{"class":73},[67,485,447],{"class":77},[67,487,201],{"class":73},[67,489,490],{"class":77},"ColBuilder",[67,492,455],{"class":73},[67,494,179],{"class":73},[67,496,498,501,503,506,508,510,513,515,517,520,522,525,527,530,533,535,537,540],{"class":69,"line":497},28,[67,499,500],{"class":185},"            c",[67,502,201],{"class":73},[67,504,505],{"class":172},"Text",[67,507,207],{"class":73},[67,509,210],{"class":73},[67,511,512],{"class":213},"請求書",[67,514,210],{"class":73},[67,516,189],{"class":73},[67,518,519],{"class":185}," template",[67,521,201],{"class":73},[67,523,524],{"class":172},"FontSize",[67,526,207],{"class":73},[67,528,529],{"class":338},"24",[67,531,532],{"class":73},"),",[67,534,519],{"class":185},[67,536,201],{"class":73},[67,538,539],{"class":172},"Bold",[67,541,542],{"class":73},"())\n",[67,544,546,548,550,552,554,556,559,561],{"class":69,"line":545},29,[67,547,500],{"class":185},[67,549,201],{"class":73},[67,551,505],{"class":172},[67,553,207],{"class":73},[67,555,210],{"class":73},[67,557,558],{"class":213},"令和8年4月17日発行",[67,560,210],{"class":73},[67,562,158],{"class":73},[67,564,566,568,570,572,574,576,579,581],{"class":69,"line":565},30,[67,567,500],{"class":185},[67,569,201],{"class":73},[67,571,505],{"class":172},[67,573,207],{"class":73},[67,575,210],{"class":73},[67,577,578],{"class":213},"金額: ¥100,000 (税込)",[67,580,210],{"class":73},[67,582,158],{"class":73},[67,584,586],{"class":69,"line":585},31,[67,587,588],{"class":73},"        })\n",[67,590,592],{"class":69,"line":591},32,[67,593,594],{"class":73},"    })\n",[67,596,598],{"class":69,"line":597},33,[67,599,85],{"emptyLinePlaceholder":84},[67,601,603,606,608,610,612,614,616,619],{"class":69,"line":602},34,[67,604,605],{"class":185},"    data",[67,607,189],{"class":73},[67,609,192],{"class":185},[67,611,195],{"class":73},[67,613,415],{"class":185},[67,615,201],{"class":73},[67,617,618],{"class":172},"Generate",[67,620,423],{"class":73},[67,622,624,626,628,630,632],{"class":69,"line":623},35,[67,625,223],{"class":91},[67,627,192],{"class":185},[67,629,228],{"class":73},[67,631,231],{"class":73},[67,633,179],{"class":73},[67,635,637,639,641,643,645,647],{"class":69,"line":636},36,[67,638,239],{"class":185},[67,640,201],{"class":73},[67,642,244],{"class":172},[67,644,207],{"class":73},[67,646,249],{"class":185},[67,648,158],{"class":73},[67,650,652],{"class":69,"line":651},37,[67,653,257],{"class":73},[67,655,657,659,661,663,665,667,670,672,674,677,679,681,684,686,689,692,694,696,698],{"class":69,"line":656},38,[67,658,223],{"class":91},[67,660,192],{"class":185},[67,662,195],{"class":73},[67,664,198],{"class":185},[67,666,201],{"class":73},[67,668,669],{"class":172},"WriteFile",[67,671,207],{"class":73},[67,673,210],{"class":73},[67,675,676],{"class":213},"invoice.pdf",[67,678,210],{"class":73},[67,680,189],{"class":73},[67,682,683],{"class":185}," data",[67,685,189],{"class":73},[67,687,688],{"class":338}," 0o644",[67,690,691],{"class":73},");",[67,693,192],{"class":185},[67,695,228],{"class":73},[67,697,231],{"class":73},[67,699,179],{"class":73},[67,701,703,705,707,709,711,713],{"class":69,"line":702},39,[67,704,239],{"class":185},[67,706,201],{"class":73},[67,708,244],{"class":172},[67,710,207],{"class":73},[67,712,249],{"class":185},[67,714,158],{"class":73},[67,716,718],{"class":69,"line":717},40,[67,719,257],{"class":73},[67,721,723],{"class":69,"line":722},41,[67,724,725],{"class":73},"}\n",[18,727,728,732,733,736,737,44,739,742,743,201],{},[21,729,731],{"href":30,"rel":730},[25],"moji.or.jp/ipafont","에서 ",[41,734,735],{},"IPAex00401.zip","을 받아 ",[41,738,43],{},[41,740,741],{},"main.go"," 옆에 두고 ",[41,744,745],{},"go run main.go",[13,747,749],{"id":748},"어느-ipa-파일이-맞는가","어느 IPA 파일이 맞는가",[18,751,752],{},"zip을 열면 TTF 세 개와 라이선스가 들어 있다. 이름이 비슷해 혼동하기 쉽다:",[754,755,756,769],"table",{},[757,758,759],"thead",{},[760,761,762,766],"tr",{},[763,764,765],"th",{},"파일",[763,767,768],{},"내용",[770,771,772,786,799],"tbody",{},[760,773,774,779],{},[775,776,777],"td",{},[41,778,43],{},[775,780,781,785],{},[782,783,784],"strong",{},"IPAex Gothic"," — 산세리프, 서양 문자는 프로포셔널. 일반 문서는 이것.",[760,787,788,793],{},[775,789,790],{},[41,791,792],{},"ipaexm.ttf",[775,794,795,798],{},[782,796,797],{},"IPAex Mincho"," — 세리프(명조), 서양 문자는 프로포셔널. 본문 길거나 고딕과 짝지어 강조할 때.",[760,800,801,806],{},[775,802,803],{},[41,804,805],{},"ipag.ttf",[775,807,808,811,812,815],{},[782,809,810],{},"IPA Gothic"," (\"ex\" 없음) — 산세리프, ",[782,813,814],{},"서양 문자가 고정폭",". 요즘은 잘 안 쓴다.",[18,817,818,819,822],{},"IPAex의 \"ex\"는 extended proportional의 약어다. 원본 IPA 폰트는 서양 문자를 CJK 전각 격자에 맞춰 배치하기 때문에 영문·국문 혼용 시 늘어져 보인다. IPAex는 서양 문자를 프로포셔널로 만들면서 CJK는 기본 격자에 유지한다. 영문 단어, URL, 숫자가 들어가는 거의 모든 업무 문서에서 ",[782,820,821],{},"IPAex","가 맞다.",[18,824,825,826,828,829,831,832,834],{},"기존 프로젝트가 ",[41,827,805],{},"를 쓴다면 대개 역사적 이유다(원본 IPA Gothic 2003년, IPAex 2010년 출시). 패밀리명을 ",[41,830,359],{},"으로 유지하고 파일만 ",[41,833,43],{},"로 바꾸면 코드는 한 줄만 수정하면 된다.",[13,836,838],{"id":837},"bold-파일이-없는-문제","Bold 파일이 없는 문제",[18,840,841],{},"IPAex는 패밀리당 Regular 한 굵기만 배포된다. 9단 굵기를 내는 Noto Sans JP에 비하면 눈에 띄는 단점이고, IPAex를 고려했다가 접는 가장 흔한 이유이기도 하다.",[18,843,844],{},"gpdf에서 대응법은 둘이다.",[18,846,847,850,851,853],{},[782,848,849],{},"합성 볼드."," ",[41,852,51],{},"가 Regular 글리프 위에 스트로크를 덧입힌다. 타이포그래피 관점에서는 치트다 — 진짜 볼드 굵기는 두꺼운 획으로 새로 그려진 윤곽을 가진다. 하지만 10 pt 이상 인보이스 제목이나 표 라벨이라면 독자 대부분에게는 구분되지 않는다:",[58,855,857],{"className":60,"code":856,"language":62,"meta":63,"style":63},"c.Text(\"合計金額\", template.Bold())\n",[41,858,859],{"__ignoreMap":63},[67,860,861,863,865,867,869,871,874,876,878,880,882,884],{"class":69,"line":70},[67,862,481],{"class":185},[67,864,201],{"class":73},[67,866,505],{"class":172},[67,868,207],{"class":73},[67,870,210],{"class":73},[67,872,873],{"class":213},"合計金額",[67,875,210],{"class":73},[67,877,189],{"class":73},[67,879,519],{"class":185},[67,881,201],{"class":73},[67,883,539],{"class":172},[67,885,542],{"class":73},[18,887,888,891],{},[782,889,890],{},"IPAex 명조와 페어링."," 일본 조판의 고전적인 강조법은 볼드화가 아니라 세리프/산세리프 전환이다. 두 패밀리를 함께 등록한다:",[58,893,895],{"className":60,"code":894,"language":62,"meta":63,"style":63},"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,896,897,925,952,956,971,995,1019,1041,1045,1049,1074,1105,1154,1173,1177],{"__ignoreMap":63},[67,898,899,902,904,907,909,911,913,915,917,919,921,923],{"class":69,"line":70},[67,900,901],{"class":185},"gothic",[67,903,189],{"class":73},[67,905,906],{"class":185}," _ ",[67,908,195],{"class":73},[67,910,198],{"class":185},[67,912,201],{"class":73},[67,914,204],{"class":172},[67,916,207],{"class":73},[67,918,210],{"class":73},[67,920,43],{"class":213},[67,922,210],{"class":73},[67,924,158],{"class":73},[67,926,927,930,932,934,936,938,940,942,944,946,948,950],{"class":69,"line":81},[67,928,929],{"class":185},"mincho",[67,931,189],{"class":73},[67,933,906],{"class":185},[67,935,195],{"class":73},[67,937,198],{"class":185},[67,939,201],{"class":73},[67,941,204],{"class":172},[67,943,207],{"class":73},[67,945,210],{"class":73},[67,947,792],{"class":213},[67,949,210],{"class":73},[67,951,158],{"class":73},[67,953,954],{"class":69,"line":88},[67,955,85],{"emptyLinePlaceholder":84},[67,957,958,961,963,965,967,969],{"class":69,"line":98},[67,959,960],{"class":185},"doc ",[67,962,195],{"class":73},[67,964,273],{"class":185},[67,966,201],{"class":73},[67,968,278],{"class":172},[67,970,281],{"class":73},[67,972,973,976,978,980,982,984,986,988,990,993],{"class":69,"line":110},[67,974,975],{"class":185},"    gpdf",[67,977,201],{"class":73},[67,979,352],{"class":172},[67,981,207],{"class":73},[67,983,210],{"class":73},[67,985,359],{"class":213},[67,987,210],{"class":73},[67,989,189],{"class":73},[67,991,992],{"class":185}," gothic",[67,994,304],{"class":73},[67,996,997,999,1001,1003,1005,1007,1010,1012,1014,1017],{"class":69,"line":120},[67,998,975],{"class":185},[67,1000,201],{"class":73},[67,1002,352],{"class":172},[67,1004,207],{"class":73},[67,1006,210],{"class":73},[67,1008,1009],{"class":213},"IPAexMincho",[67,1011,210],{"class":73},[67,1013,189],{"class":73},[67,1015,1016],{"class":185}," mincho",[67,1018,304],{"class":73},[67,1020,1021,1023,1025,1027,1029,1031,1033,1035,1037,1039],{"class":69,"line":125},[67,1022,975],{"class":185},[67,1024,201],{"class":73},[67,1026,378],{"class":172},[67,1028,207],{"class":73},[67,1030,210],{"class":73},[67,1032,359],{"class":213},[67,1034,210],{"class":73},[67,1036,189],{"class":73},[67,1038,391],{"class":338},[67,1040,304],{"class":73},[67,1042,1043],{"class":69,"line":135},[67,1044,158],{"class":73},[67,1046,1047],{"class":69,"line":145},[67,1048,85],{"emptyLinePlaceholder":84},[67,1050,1051,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072],{"class":69,"line":155},[67,1052,1053],{"class":185},"page",[67,1055,201],{"class":73},[67,1057,434],{"class":172},[67,1059,437],{"class":73},[67,1061,441],{"class":440},[67,1063,444],{"class":73},[67,1065,447],{"class":77},[67,1067,201],{"class":73},[67,1069,452],{"class":77},[67,1071,455],{"class":73},[67,1073,179],{"class":73},[67,1075,1076,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101,1103],{"class":69,"line":161},[67,1077,1078],{"class":185},"    r",[67,1080,201],{"class":73},[67,1082,468],{"class":172},[67,1084,207],{"class":73},[67,1086,473],{"class":338},[67,1088,189],{"class":73},[67,1090,478],{"class":73},[67,1092,481],{"class":440},[67,1094,444],{"class":73},[67,1096,447],{"class":77},[67,1098,201],{"class":73},[67,1100,490],{"class":77},[67,1102,455],{"class":73},[67,1104,179],{"class":73},[67,1106,1107,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151],{"class":69,"line":166},[67,1108,1109],{"class":185},"        c",[67,1111,201],{"class":73},[67,1113,505],{"class":172},[67,1115,207],{"class":73},[67,1117,210],{"class":73},[67,1119,512],{"class":213},[67,1121,210],{"class":73},[67,1123,189],{"class":73},[67,1125,519],{"class":185},[67,1127,201],{"class":73},[67,1129,1130],{"class":172},"FontFamily",[67,1132,207],{"class":73},[67,1134,210],{"class":73},[67,1136,1009],{"class":213},[67,1138,210],{"class":73},[67,1140,532],{"class":73},[67,1142,519],{"class":185},[67,1144,201],{"class":73},[67,1146,524],{"class":172},[67,1148,207],{"class":73},[67,1150,529],{"class":338},[67,1152,1153],{"class":73},"))\n",[67,1155,1156,1158,1160,1162,1164,1166,1169,1171],{"class":69,"line":182},[67,1157,1109],{"class":185},[67,1159,201],{"class":73},[67,1161,505],{"class":172},[67,1163,207],{"class":73},[67,1165,210],{"class":73},[67,1167,1168],{"class":213},"ご請求内容は下記の通りです。",[67,1170,210],{"class":73},[67,1172,158],{"class":73},[67,1174,1175],{"class":69,"line":220},[67,1176,594],{"class":73},[67,1178,1179],{"class":69,"line":236},[67,1180,1181],{"class":73},"})\n",[18,1183,1184],{},"일본의 청첩장, 공식 보고서에서 흔히 보이는 조합이다 — 제목은 명조, 본문은 고딕. 문서가 관공서로 갈 예정이라면 이 조합이 저쪽에서 기대하는 모양새일 가능성이 높다.",[13,1186,1188],{"id":1187},"ipa-font-license-간단히","IPA Font License 간단히",[18,1190,1191,1192,1197],{},"IPAex는 SIL OFL이 아니라 ",[21,1193,1196],{"href":1194,"rel":1195},"https://opensource.org/licenses/IPA",[25],"IPA Font License Agreement v1.0","이다 (OSI 승인). 전반적으로 관대하지만 짚어둘 두 가지:",[1199,1200,1201,1215],"ol",{},[1202,1203,1204,850,1207,1210,1211,1214],"li",{},[782,1205,1206],{},"라이선스 전문을 폰트 바이너리와 함께 유지한다.",[41,1208,1209],{},"//go:embed","로 TTF를 Go 바이너리에 넣는다면 라이선스 파일도 같이 넣는다. 프로젝트 루트에 ",[41,1212,1213],{},"LICENSES/IPA-FONT-1.0.txt","를 두면 대부분의 배포 상황에서 충분하다.",[1202,1216,1217,1220,1221,1224],{},[782,1218,1219],{},"폰트 이름을 바꾸지 않는다."," TTF 자체를 수정해 재배포하는 경우, 파생물에는 \"IPA\"나 \"IPAex\"를 포함하지 않는 다른 이름을 붙여야 한다. 단, 이 제약은 렌더링 시의 글리프 서브셋에는 ",[782,1222,1223],{},"적용되지 않는다",". 라이선스 제3조 4항이 폰트로 생성한 \"출력 문서\"를 명명 제약에서 명시적으로 제외한다.",[18,1226,1227,1228,1231],{},"정리하자면, ",[41,1229,1230],{},"doc.Generate()","에서 gpdf가 서브셋을 만드는 것은 라이선스상 안전하다. PDF에 포함되는 서브셋은 다른 이름을 필요로 하지 않고 \"파생 폰트 프로그램\" 조항을 트리거하지도 않는다. 폰트를 재배포하는 것이 아니라 문서를 만드는 것이다.",[18,1233,1234],{},"덧붙이자면, gpdf 코어 OSS 저장소에는 IPAex를 넣지 않는다 (golden 테스트는 Noto 계열 SIL OFL 폰트를 쓴다). 하위 사용자가 자기 프로젝트 최상위 LICENSE와 IPA 라이선스 호환성을 일일이 따지지 않도록 하기 위해서다. 애플리케이션에서 IPAex를 쓰는 것은 그 프로젝트의 판단이지 우리의 결정이 아니다.",[13,1236,1238],{"id":1237},"ipaex-vs-noto-sans-jp-어느-쪽을-고르나","IPAex vs Noto Sans JP, 어느 쪽을 고르나",[754,1240,1241,1253],{},[757,1242,1243],{},[760,1244,1245,1248,1250],{},[763,1246,1247],{},"축",[763,1249,784],{},[763,1251,1252],{},"Noto Sans JP",[770,1254,1255,1266,1277,1288,1302,1313],{},[760,1256,1257,1260,1263],{},[775,1258,1259],{},"굵기 수",[775,1261,1262],{},"1 (Regular)",[775,1264,1265],{},"9 (Thin → Black)",[760,1267,1268,1271,1274],{},[775,1269,1270],{},"라이선스",[775,1272,1273],{},"IPA Font License v1.0",[775,1275,1276],{},"SIL OFL 1.1",[760,1278,1279,1282,1285],{},[775,1280,1281],{},"서양 문자",[775,1283,1284],{},"프로포셔널(IPAex) 또는 고정폭(IPA)",[775,1286,1287],{},"프로포셔널",[760,1289,1290,1293,1299],{},[775,1291,1292],{},"기본 설치",[775,1294,1295,1296],{},"일부 일본 Linux 배포판, TeX Live ",[41,1297,1298],{},"ptex-fonts",[775,1300,1301],{},"Android, ChromeOS",[760,1303,1304,1307,1310],{},[775,1305,1306],{},"전형적 용도",[775,1308,1309],{},"일본 정부, 법률, 학술",[775,1311,1312],{},"소비자 웹, 국제용",[760,1314,1315,1318,1321],{},[775,1316,1317],{},"파일 크기",[775,1319,1320],{},"7.5 MB (Gothic)",[775,1322,1323],{},"5 MB (Regular 단독)",[18,1325,1326],{},"출력이 일본의 제도적 경계를 넘는 경우 — e-Tax PDF 첨부, 법원 제출 문서, 일본 저널로의 학술 논문 제출 — 에는 IPAex를 고른다. 그 생태계의 평가자, 심사자, OCR 도구가 IPA에 맞춰져 있기 때문이다. 그 외에는 Noto Sans JP로 충분하다. 렌더링 결과는 실용상 거의 같고, 선택 기준은 미감이 아니라 \"어느 생태계에 출력하느냐\"다.",[13,1328,1330],{"id":1329},"관련-레시피","관련 레시피",[1332,1333,1334,1341,1348,1355],"ul",{},[1202,1335,1336,1340],{},[21,1337,1339],{"href":1338},"/ko/blog/embed-japanese-font","gpdf에서 일본어 폰트를 임베드하려면?"," — 모든 CJK TTF에 적용되는 일반 레시피",[1202,1342,1343,1347],{},[21,1344,1346],{"href":1345},"/ko/blog/noto-sans-jp-with-gpdf","gpdf에서 Noto Sans JP를 사용하려면?"," — SIL OFL에 9굵기가 있는 대안",[1202,1349,1350,1354],{},[21,1351,1353],{"href":1352},"/ko/blog/tofu-boxes-japanese","gpdf로 만든 PDF에서 일본어가 네모로 나올 때"," — 글리프가 표시되지 않을 때의 트러블슈팅",[1202,1356,1357,1362,1363,1365],{},[21,1358,1361],{"href":1359,"rel":1360},"https://gpdf.dev/ko/docs/guide/fonts",[25],"폰트 가이드"," — ",[41,1364,352],{}," 전체 레퍼런스",[13,1367,1369],{"id":1368},"gpdf를-써보자","gpdf를 써보자",[18,1371,1372],{},"gpdf는 Go용 PDF 생성 라이브러리다. MIT 라이선스, 외부 의존성 0, 네이티브 CJK 지원.",[58,1374,1378],{"className":1375,"code":1376,"language":1377,"meta":63,"style":63},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[41,1379,1380],{"__ignoreMap":63},[67,1381,1382,1384,1387],{"class":69,"line":70},[67,1383,62],{"class":77},[67,1385,1386],{"class":213}," get",[67,1388,1389],{"class":213}," github.com/gpdf-dev/gpdf\n",[18,1391,1392,1396,1397],{},[21,1393,1395],{"href":23,"rel":1394},[25],"⭐ GitHub에서 Star"," · ",[21,1398,1401],{"href":1399,"rel":1400},"https://gpdf.dev/ko/docs/quickstart",[25],"문서 읽기",[1403,1404,1405],"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":63,"searchDepth":81,"depth":81,"links":1407},[1408,1409,1410,1411,1412,1413,1414,1415,1416],{"id":15,"depth":81,"text":16},{"id":36,"depth":81,"text":37},{"id":55,"depth":81,"text":56},{"id":748,"depth":81,"text":749},{"id":837,"depth":81,"text":838},{"id":1187,"depth":81,"text":1188},{"id":1237,"depth":81,"text":1238},{"id":1329,"depth":81,"text":1330},{"id":1368,"depth":81,"text":1369},"2026-04-17","ipaexg.ttf를 gpdf.WithFont로 등록한다. IPAex는 Regular 한 가지 굵기만 제공하므로 볼드는 합성하거나 명조와 페어링한다.",false,"md",{"name":1422,"totalTime":1423,"tools":1424,"steps":1427},"gpdf 문서에서 IPAex Gothic을 기본 폰트로 쓰기","PT10M",[1425,1426],"Go 1.22+","ipaexg.ttf (moji.or.jp의 IPAex Gothic v4.01)",[1428,1431,1434,1437,1440],{"name":1429,"text":1430},"moji.or.jp에서 IPAex 폰트 묶음을 다운로드한다","moji.or.jp/ipafont에서 IPAex00401.zip을 받아 압축을 풀고 ipaexg.ttf와 함께 들어 있는 IPA Font License Agreement v1.0 텍스트 파일을 함께 보관한다.",{"name":1432,"text":1433},"TTF 바이트를 읽는다","프로그램 시작 시 os.ReadFile(\"ipaexg.ttf\")로 []byte에 로드한다. 컨테이너 배포라면 //go:embed로 Go 바이너리에 포함시키는 편이 배포하기 쉽다.",{"name":1435,"text":1436},"문서 생성 시점에 등록한다","gpdf.WithFont(\"IPAexGothic\", fontBytes)와 gpdf.WithDefaultFont(\"IPAexGothic\", 10.5)를 gpdf.NewDocument에 전달한다. 10.5 pt는 Word의 일본어 문서 기본 포인트와 동일하다.",{"name":1438,"text":1439},"Bold 파일이 없는 문제를 다룬다","IPAex Gothic에는 볼드 변형이 없다. template.Bold()로 합성(gpdf가 0.4 pt 스트로크 덧그림)하거나, IPAex 명조를 별도 패밀리로 등록해 강조용으로 쓴다.",{"name":1441,"text":1442},"배포물에 라이선스 파일을 동봉한다","IPA Font License v1.0은 폰트 바이너리가 배포되는 곳에 라이선스 전문이 함께 있기를 요구한다. //go:embed로 TTF를 넣는다면 LICENSES/IPA-FONT-1.0.txt도 함께 넣고 NOTICE에서 참조한다.",null,{},"/ko/blog/ipaex-gothic-gpdf",{"title":5,"description":1418},"ko/blog/009.ipaex-gothic-gpdf",[1449,1450,1451],"recipe","cjk","tutorial","dE7TE_idJEGimuYycCNJCNfMqSTeI2W1tJNtMSjpqso",1776529266608]