[{"data":1,"prerenderedAt":2128},["ShallowReactive",2],{"blog-ko-align-column-right-edge":3},{"id":4,"title":5,"author":6,"body":10,"date":2092,"description":2093,"draft":2094,"extension":2095,"howTo":2096,"image":2118,"meta":2119,"navigation":261,"path":2120,"seo":2121,"stem":2122,"tags":2123,"updated":2118,"__hash__":2127},"blogKo/ko/blog/028.align-column-right-edge.md","gpdf에서 Col을 행의 오른쪽 끝에 붙이려면?",{"name":7,"url":8,"avatar":9},"Taiki Noda","https://nadai.dev/ko/about","https://nadai.dev/og-default.png",{"type":11,"value":12,"toc":2081},"minimark",[13,18,34,37,65,238,241,244,1292,1296,1299,1310,1430,1485,1491,1498,1514,1518,1521,1612,1620,1639,1643,1646,1789,1808,1812,1815,1984,1987,2001,2005,2041,2045,2048,2065,2077],[14,15,17],"h2",{"id":16},"질문을-다른-말로","질문을 다른 말로",[19,20,21,25,26,33],"p",{},[22,23,24],"code",{},"r.Col(4, ...)"," 하나만 넣은 행을 만들고 그 열이 페이지 오른쪽에 오기를 기대했습니다. 실제로는 왼쪽에 폭 1/3로 그려지고 오른쪽에 큰 여백이 남았습니다. 아니면 열은 오른쪽으로 갔는데 안의 텍스트가 여전히 왼쪽에 붙어 있습니다. ",[27,28,32],"a",{"href":29,"rel":30},"https://github.com/gpdf-dev/gpdf",[31],"nofollow","gpdf","에서 올바른 방법은 무엇일까요?",[14,35,36],{"id":36},"결론",[19,38,39,40,43,44,47,48,51,52,64],{},"gpdf에는 ",[22,41,42],{},"Offset","도, ",[22,45,46],{},"Push","도, 행 단위 ",[22,49,50],{},"Justify","도 없습니다. ",[53,54,55,56,59,60,63],"strong",{},"열을 오른쪽으로 미는 것은 빈 채움 ",[22,57,58],{},"Col",", 안의 텍스트를 오른쪽으로 보내는 것은 ",[22,61,62],{},"template.AlignRight()","."," 서로 다른 두 가지이고 거의 항상 둘 다 필요합니다.",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","page.AutoRow(func(r *template.RowBuilder) {\n    r.Col(8, func(c *template.ColBuilder) {}) // 채움\n    r.Col(4, func(c *template.ColBuilder) {\n        c.Text(\"합계: ₩25,575,000\", template.AlignRight())\n    })\n})\n","go","",[22,73,74,115,159,191,226,232],{"__ignoreMap":71},[75,76,79,83,86,90,93,97,100,104,106,109,112],"span",{"class":77,"line":78},"line",1,[75,80,82],{"class":81},"sTEyZ","page",[75,84,63],{"class":85},"sMK4o",[75,87,89],{"class":88},"s2Zo4","AutoRow",[75,91,92],{"class":85},"(func(",[75,94,96],{"class":95},"sHdIc","r",[75,98,99],{"class":85}," *",[75,101,103],{"class":102},"sBMFI","template",[75,105,63],{"class":85},[75,107,108],{"class":102},"RowBuilder",[75,110,111],{"class":85},")",[75,113,114],{"class":85}," {\n",[75,116,118,121,123,125,128,132,135,138,141,143,145,147,150,152,155],{"class":77,"line":117},2,[75,119,120],{"class":81},"    r",[75,122,63],{"class":85},[75,124,58],{"class":88},[75,126,127],{"class":85},"(",[75,129,131],{"class":130},"sbssI","8",[75,133,134],{"class":85},",",[75,136,137],{"class":85}," func(",[75,139,140],{"class":95},"c",[75,142,99],{"class":85},[75,144,103],{"class":102},[75,146,63],{"class":85},[75,148,149],{"class":102},"ColBuilder",[75,151,111],{"class":85},[75,153,154],{"class":85}," {})",[75,156,158],{"class":157},"sHwdD"," // 채움\n",[75,160,162,164,166,168,170,173,175,177,179,181,183,185,187,189],{"class":77,"line":161},3,[75,163,120],{"class":81},[75,165,63],{"class":85},[75,167,58],{"class":88},[75,169,127],{"class":85},[75,171,172],{"class":130},"4",[75,174,134],{"class":85},[75,176,137],{"class":85},[75,178,140],{"class":95},[75,180,99],{"class":85},[75,182,103],{"class":102},[75,184,63],{"class":85},[75,186,149],{"class":102},[75,188,111],{"class":85},[75,190,114],{"class":85},[75,192,194,197,199,202,204,207,211,213,215,218,220,223],{"class":77,"line":193},4,[75,195,196],{"class":81},"        c",[75,198,63],{"class":85},[75,200,201],{"class":88},"Text",[75,203,127],{"class":85},[75,205,206],{"class":85},"\"",[75,208,210],{"class":209},"sfazB","합계: ₩25,575,000",[75,212,206],{"class":85},[75,214,134],{"class":85},[75,216,217],{"class":81}," template",[75,219,63],{"class":85},[75,221,222],{"class":88},"AlignRight",[75,224,225],{"class":85},"())\n",[75,227,229],{"class":77,"line":228},5,[75,230,231],{"class":85},"    })\n",[75,233,235],{"class":77,"line":234},6,[75,236,237],{"class":85},"})\n",[14,239,240],{"id":240},"코드",[19,242,243],{},"완전한 프로그램입니다. 많은 사람이 이 질문에 도달하게 되는 청구서 헤더 모양입니다.",[66,245,247],{"className":68,"code":246,"language":70,"meta":71,"style":71},"package main\n\nimport (\n    \"log\"\n    \"os\"\n\n    \"github.com/gpdf-dev/gpdf/document\"\n    \"github.com/gpdf-dev/gpdf/pdf\"\n    \"github.com/gpdf-dev/gpdf/template\"\n)\n\nfunc main() {\n    doc := template.New(\n        template.WithPageSize(document.A4),\n        template.WithMargins(document.UniformEdges(document.Mm(20))),\n    )\n\n    page := doc.AddPage()\n\n    // 왼쪽 블록과 오른쪽 블록을 한 행에: 8 + 4 = 12.\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(8, func(c *template.ColBuilder) {\n            c.Text(\"주식회사 애크미\", template.Bold(), template.FontSize(16))\n            c.Text(\"서울시 강남구 테헤란로 1-2-3\", template.TextColor(pdf.Gray(0.4)))\n        })\n        r.Col(4, func(c *template.ColBuilder) {\n            c.Text(\"청구서 No.1042\", template.AlignRight(), template.Bold())\n            c.Text(\"발행일 2026-09-02\", template.AlignRight(),\n                template.TextColor(pdf.Gray(0.4)))\n        })\n    })\n\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Spacer(document.Mm(10))\n        })\n    })\n\n    // 합계 블록: 8 스팬의 공백 뒤에 4 스팬을 여백에 밀착시킵니다.\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(8, func(c *template.ColBuilder) {})\n        r.Col(4, func(c *template.ColBuilder) {\n            c.Text(\"소계:       ₩23,250,000\", template.AlignRight())\n            c.Text(\"부가세 10%:  ₩2,325,000\", template.AlignRight())\n            c.Spacer(document.Mm(2))\n            c.Line(template.LineThickness(document.Pt(1)))\n            c.Spacer(document.Mm(2))\n            c.Text(\"합계:       ₩25,575,000\", template.AlignRight(),\n                template.Bold(), template.FontSize(14))\n        })\n    })\n\n    data, err := doc.Generate()\n    if err != nil {\n        log.Fatal(err)\n    }\n    if err := os.WriteFile(\"right_aligned.pdf\", data, 0o644); err != nil {\n        log.Fatal(err)\n    }\n}\n",[22,248,249,257,263,272,283,292,296,306,316,326,332,337,351,370,394,430,436,441,460,465,471,497,529,575,620,626,657,693,722,746,751,756,761,786,818,843,848,853,858,864,889,921,952,980,1008,1032,1067,1090,1118,1142,1147,1152,1157,1179,1195,1213,1219,1266,1281,1286],{"__ignoreMap":71},[75,250,251,254],{"class":77,"line":78},[75,252,253],{"class":85},"package",[75,255,256],{"class":102}," main\n",[75,258,259],{"class":77,"line":117},[75,260,262],{"emptyLinePlaceholder":261},true,"\n",[75,264,265,269],{"class":77,"line":161},[75,266,268],{"class":267},"s7zQu","import",[75,270,271],{"class":85}," (\n",[75,273,274,277,280],{"class":77,"line":193},[75,275,276],{"class":85},"    \"",[75,278,279],{"class":102},"log",[75,281,282],{"class":85},"\"\n",[75,284,285,287,290],{"class":77,"line":228},[75,286,276],{"class":85},[75,288,289],{"class":102},"os",[75,291,282],{"class":85},[75,293,294],{"class":77,"line":234},[75,295,262],{"emptyLinePlaceholder":261},[75,297,299,301,304],{"class":77,"line":298},7,[75,300,276],{"class":85},[75,302,303],{"class":102},"github.com/gpdf-dev/gpdf/document",[75,305,282],{"class":85},[75,307,309,311,314],{"class":77,"line":308},8,[75,310,276],{"class":85},[75,312,313],{"class":102},"github.com/gpdf-dev/gpdf/pdf",[75,315,282],{"class":85},[75,317,319,321,324],{"class":77,"line":318},9,[75,320,276],{"class":85},[75,322,323],{"class":102},"github.com/gpdf-dev/gpdf/template",[75,325,282],{"class":85},[75,327,329],{"class":77,"line":328},10,[75,330,331],{"class":85},")\n",[75,333,335],{"class":77,"line":334},11,[75,336,262],{"emptyLinePlaceholder":261},[75,338,340,343,346,349],{"class":77,"line":339},12,[75,341,342],{"class":85},"func",[75,344,345],{"class":88}," main",[75,347,348],{"class":85},"()",[75,350,114],{"class":85},[75,352,354,357,360,362,364,367],{"class":77,"line":353},13,[75,355,356],{"class":81},"    doc ",[75,358,359],{"class":85},":=",[75,361,217],{"class":81},[75,363,63],{"class":85},[75,365,366],{"class":88},"New",[75,368,369],{"class":85},"(\n",[75,371,373,376,378,381,383,386,388,391],{"class":77,"line":372},14,[75,374,375],{"class":81},"        template",[75,377,63],{"class":85},[75,379,380],{"class":88},"WithPageSize",[75,382,127],{"class":85},[75,384,385],{"class":81},"document",[75,387,63],{"class":85},[75,389,390],{"class":81},"A4",[75,392,393],{"class":85},"),\n",[75,395,397,399,401,404,406,408,410,413,415,417,419,422,424,427],{"class":77,"line":396},15,[75,398,375],{"class":81},[75,400,63],{"class":85},[75,402,403],{"class":88},"WithMargins",[75,405,127],{"class":85},[75,407,385],{"class":81},[75,409,63],{"class":85},[75,411,412],{"class":88},"UniformEdges",[75,414,127],{"class":85},[75,416,385],{"class":81},[75,418,63],{"class":85},[75,420,421],{"class":88},"Mm",[75,423,127],{"class":85},[75,425,426],{"class":130},"20",[75,428,429],{"class":85},"))),\n",[75,431,433],{"class":77,"line":432},16,[75,434,435],{"class":85},"    )\n",[75,437,439],{"class":77,"line":438},17,[75,440,262],{"emptyLinePlaceholder":261},[75,442,444,447,449,452,454,457],{"class":77,"line":443},18,[75,445,446],{"class":81},"    page ",[75,448,359],{"class":85},[75,450,451],{"class":81}," doc",[75,453,63],{"class":85},[75,455,456],{"class":88},"AddPage",[75,458,459],{"class":85},"()\n",[75,461,463],{"class":77,"line":462},19,[75,464,262],{"emptyLinePlaceholder":261},[75,466,468],{"class":77,"line":467},20,[75,469,470],{"class":157},"    // 왼쪽 블록과 오른쪽 블록을 한 행에: 8 + 4 = 12.\n",[75,472,474,477,479,481,483,485,487,489,491,493,495],{"class":77,"line":473},21,[75,475,476],{"class":81},"    page",[75,478,63],{"class":85},[75,480,89],{"class":88},[75,482,92],{"class":85},[75,484,96],{"class":95},[75,486,99],{"class":85},[75,488,103],{"class":102},[75,490,63],{"class":85},[75,492,108],{"class":102},[75,494,111],{"class":85},[75,496,114],{"class":85},[75,498,500,503,505,507,509,511,513,515,517,519,521,523,525,527],{"class":77,"line":499},22,[75,501,502],{"class":81},"        r",[75,504,63],{"class":85},[75,506,58],{"class":88},[75,508,127],{"class":85},[75,510,131],{"class":130},[75,512,134],{"class":85},[75,514,137],{"class":85},[75,516,140],{"class":95},[75,518,99],{"class":85},[75,520,103],{"class":102},[75,522,63],{"class":85},[75,524,149],{"class":102},[75,526,111],{"class":85},[75,528,114],{"class":85},[75,530,532,535,537,539,541,543,546,548,550,552,554,557,560,562,564,567,569,572],{"class":77,"line":531},23,[75,533,534],{"class":81},"            c",[75,536,63],{"class":85},[75,538,201],{"class":88},[75,540,127],{"class":85},[75,542,206],{"class":85},[75,544,545],{"class":209},"주식회사 애크미",[75,547,206],{"class":85},[75,549,134],{"class":85},[75,551,217],{"class":81},[75,553,63],{"class":85},[75,555,556],{"class":88},"Bold",[75,558,559],{"class":85},"(),",[75,561,217],{"class":81},[75,563,63],{"class":85},[75,565,566],{"class":88},"FontSize",[75,568,127],{"class":85},[75,570,571],{"class":130},"16",[75,573,574],{"class":85},"))\n",[75,576,578,580,582,584,586,588,591,593,595,597,599,602,604,607,609,612,614,617],{"class":77,"line":577},24,[75,579,534],{"class":81},[75,581,63],{"class":85},[75,583,201],{"class":88},[75,585,127],{"class":85},[75,587,206],{"class":85},[75,589,590],{"class":209},"서울시 강남구 테헤란로 1-2-3",[75,592,206],{"class":85},[75,594,134],{"class":85},[75,596,217],{"class":81},[75,598,63],{"class":85},[75,600,601],{"class":88},"TextColor",[75,603,127],{"class":85},[75,605,606],{"class":81},"pdf",[75,608,63],{"class":85},[75,610,611],{"class":88},"Gray",[75,613,127],{"class":85},[75,615,616],{"class":130},"0.4",[75,618,619],{"class":85},")))\n",[75,621,623],{"class":77,"line":622},25,[75,624,625],{"class":85},"        })\n",[75,627,629,631,633,635,637,639,641,643,645,647,649,651,653,655],{"class":77,"line":628},26,[75,630,502],{"class":81},[75,632,63],{"class":85},[75,634,58],{"class":88},[75,636,127],{"class":85},[75,638,172],{"class":130},[75,640,134],{"class":85},[75,642,137],{"class":85},[75,644,140],{"class":95},[75,646,99],{"class":85},[75,648,103],{"class":102},[75,650,63],{"class":85},[75,652,149],{"class":102},[75,654,111],{"class":85},[75,656,114],{"class":85},[75,658,660,662,664,666,668,670,673,675,677,679,681,683,685,687,689,691],{"class":77,"line":659},27,[75,661,534],{"class":81},[75,663,63],{"class":85},[75,665,201],{"class":88},[75,667,127],{"class":85},[75,669,206],{"class":85},[75,671,672],{"class":209},"청구서 No.1042",[75,674,206],{"class":85},[75,676,134],{"class":85},[75,678,217],{"class":81},[75,680,63],{"class":85},[75,682,222],{"class":88},[75,684,559],{"class":85},[75,686,217],{"class":81},[75,688,63],{"class":85},[75,690,556],{"class":88},[75,692,225],{"class":85},[75,694,696,698,700,702,704,706,709,711,713,715,717,719],{"class":77,"line":695},28,[75,697,534],{"class":81},[75,699,63],{"class":85},[75,701,201],{"class":88},[75,703,127],{"class":85},[75,705,206],{"class":85},[75,707,708],{"class":209},"발행일 2026-09-02",[75,710,206],{"class":85},[75,712,134],{"class":85},[75,714,217],{"class":81},[75,716,63],{"class":85},[75,718,222],{"class":88},[75,720,721],{"class":85},"(),\n",[75,723,725,728,730,732,734,736,738,740,742,744],{"class":77,"line":724},29,[75,726,727],{"class":81},"                template",[75,729,63],{"class":85},[75,731,601],{"class":88},[75,733,127],{"class":85},[75,735,606],{"class":81},[75,737,63],{"class":85},[75,739,611],{"class":88},[75,741,127],{"class":85},[75,743,616],{"class":130},[75,745,619],{"class":85},[75,747,749],{"class":77,"line":748},30,[75,750,625],{"class":85},[75,752,754],{"class":77,"line":753},31,[75,755,231],{"class":85},[75,757,759],{"class":77,"line":758},32,[75,760,262],{"emptyLinePlaceholder":261},[75,762,764,766,768,770,772,774,776,778,780,782,784],{"class":77,"line":763},33,[75,765,476],{"class":81},[75,767,63],{"class":85},[75,769,89],{"class":88},[75,771,92],{"class":85},[75,773,96],{"class":95},[75,775,99],{"class":85},[75,777,103],{"class":102},[75,779,63],{"class":85},[75,781,108],{"class":102},[75,783,111],{"class":85},[75,785,114],{"class":85},[75,787,789,791,793,795,797,800,802,804,806,808,810,812,814,816],{"class":77,"line":788},34,[75,790,502],{"class":81},[75,792,63],{"class":85},[75,794,58],{"class":88},[75,796,127],{"class":85},[75,798,799],{"class":130},"12",[75,801,134],{"class":85},[75,803,137],{"class":85},[75,805,140],{"class":95},[75,807,99],{"class":85},[75,809,103],{"class":102},[75,811,63],{"class":85},[75,813,149],{"class":102},[75,815,111],{"class":85},[75,817,114],{"class":85},[75,819,821,823,825,828,830,832,834,836,838,841],{"class":77,"line":820},35,[75,822,534],{"class":81},[75,824,63],{"class":85},[75,826,827],{"class":88},"Spacer",[75,829,127],{"class":85},[75,831,385],{"class":81},[75,833,63],{"class":85},[75,835,421],{"class":88},[75,837,127],{"class":85},[75,839,840],{"class":130},"10",[75,842,574],{"class":85},[75,844,846],{"class":77,"line":845},36,[75,847,625],{"class":85},[75,849,851],{"class":77,"line":850},37,[75,852,231],{"class":85},[75,854,856],{"class":77,"line":855},38,[75,857,262],{"emptyLinePlaceholder":261},[75,859,861],{"class":77,"line":860},39,[75,862,863],{"class":157},"    // 합계 블록: 8 스팬의 공백 뒤에 4 스팬을 여백에 밀착시킵니다.\n",[75,865,867,869,871,873,875,877,879,881,883,885,887],{"class":77,"line":866},40,[75,868,476],{"class":81},[75,870,63],{"class":85},[75,872,89],{"class":88},[75,874,92],{"class":85},[75,876,96],{"class":95},[75,878,99],{"class":85},[75,880,103],{"class":102},[75,882,63],{"class":85},[75,884,108],{"class":102},[75,886,111],{"class":85},[75,888,114],{"class":85},[75,890,892,894,896,898,900,902,904,906,908,910,912,914,916,918],{"class":77,"line":891},41,[75,893,502],{"class":81},[75,895,63],{"class":85},[75,897,58],{"class":88},[75,899,127],{"class":85},[75,901,131],{"class":130},[75,903,134],{"class":85},[75,905,137],{"class":85},[75,907,140],{"class":95},[75,909,99],{"class":85},[75,911,103],{"class":102},[75,913,63],{"class":85},[75,915,149],{"class":102},[75,917,111],{"class":85},[75,919,920],{"class":85}," {})\n",[75,922,924,926,928,930,932,934,936,938,940,942,944,946,948,950],{"class":77,"line":923},42,[75,925,502],{"class":81},[75,927,63],{"class":85},[75,929,58],{"class":88},[75,931,127],{"class":85},[75,933,172],{"class":130},[75,935,134],{"class":85},[75,937,137],{"class":85},[75,939,140],{"class":95},[75,941,99],{"class":85},[75,943,103],{"class":102},[75,945,63],{"class":85},[75,947,149],{"class":102},[75,949,111],{"class":85},[75,951,114],{"class":85},[75,953,955,957,959,961,963,965,968,970,972,974,976,978],{"class":77,"line":954},43,[75,956,534],{"class":81},[75,958,63],{"class":85},[75,960,201],{"class":88},[75,962,127],{"class":85},[75,964,206],{"class":85},[75,966,967],{"class":209},"소계:       ₩23,250,000",[75,969,206],{"class":85},[75,971,134],{"class":85},[75,973,217],{"class":81},[75,975,63],{"class":85},[75,977,222],{"class":88},[75,979,225],{"class":85},[75,981,983,985,987,989,991,993,996,998,1000,1002,1004,1006],{"class":77,"line":982},44,[75,984,534],{"class":81},[75,986,63],{"class":85},[75,988,201],{"class":88},[75,990,127],{"class":85},[75,992,206],{"class":85},[75,994,995],{"class":209},"부가세 10%:  ₩2,325,000",[75,997,206],{"class":85},[75,999,134],{"class":85},[75,1001,217],{"class":81},[75,1003,63],{"class":85},[75,1005,222],{"class":88},[75,1007,225],{"class":85},[75,1009,1011,1013,1015,1017,1019,1021,1023,1025,1027,1030],{"class":77,"line":1010},45,[75,1012,534],{"class":81},[75,1014,63],{"class":85},[75,1016,827],{"class":88},[75,1018,127],{"class":85},[75,1020,385],{"class":81},[75,1022,63],{"class":85},[75,1024,421],{"class":88},[75,1026,127],{"class":85},[75,1028,1029],{"class":130},"2",[75,1031,574],{"class":85},[75,1033,1035,1037,1039,1042,1044,1046,1048,1051,1053,1055,1057,1060,1062,1065],{"class":77,"line":1034},46,[75,1036,534],{"class":81},[75,1038,63],{"class":85},[75,1040,1041],{"class":88},"Line",[75,1043,127],{"class":85},[75,1045,103],{"class":81},[75,1047,63],{"class":85},[75,1049,1050],{"class":88},"LineThickness",[75,1052,127],{"class":85},[75,1054,385],{"class":81},[75,1056,63],{"class":85},[75,1058,1059],{"class":88},"Pt",[75,1061,127],{"class":85},[75,1063,1064],{"class":130},"1",[75,1066,619],{"class":85},[75,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088],{"class":77,"line":1069},47,[75,1071,534],{"class":81},[75,1073,63],{"class":85},[75,1075,827],{"class":88},[75,1077,127],{"class":85},[75,1079,385],{"class":81},[75,1081,63],{"class":85},[75,1083,421],{"class":88},[75,1085,127],{"class":85},[75,1087,1029],{"class":130},[75,1089,574],{"class":85},[75,1091,1093,1095,1097,1099,1101,1103,1106,1108,1110,1112,1114,1116],{"class":77,"line":1092},48,[75,1094,534],{"class":81},[75,1096,63],{"class":85},[75,1098,201],{"class":88},[75,1100,127],{"class":85},[75,1102,206],{"class":85},[75,1104,1105],{"class":209},"합계:       ₩25,575,000",[75,1107,206],{"class":85},[75,1109,134],{"class":85},[75,1111,217],{"class":81},[75,1113,63],{"class":85},[75,1115,222],{"class":88},[75,1117,721],{"class":85},[75,1119,1121,1123,1125,1127,1129,1131,1133,1135,1137,1140],{"class":77,"line":1120},49,[75,1122,727],{"class":81},[75,1124,63],{"class":85},[75,1126,556],{"class":88},[75,1128,559],{"class":85},[75,1130,217],{"class":81},[75,1132,63],{"class":85},[75,1134,566],{"class":88},[75,1136,127],{"class":85},[75,1138,1139],{"class":130},"14",[75,1141,574],{"class":85},[75,1143,1145],{"class":77,"line":1144},50,[75,1146,625],{"class":85},[75,1148,1150],{"class":77,"line":1149},51,[75,1151,231],{"class":85},[75,1153,1155],{"class":77,"line":1154},52,[75,1156,262],{"emptyLinePlaceholder":261},[75,1158,1160,1163,1165,1168,1170,1172,1174,1177],{"class":77,"line":1159},53,[75,1161,1162],{"class":81},"    data",[75,1164,134],{"class":85},[75,1166,1167],{"class":81}," err ",[75,1169,359],{"class":85},[75,1171,451],{"class":81},[75,1173,63],{"class":85},[75,1175,1176],{"class":88},"Generate",[75,1178,459],{"class":85},[75,1180,1182,1185,1187,1190,1193],{"class":77,"line":1181},54,[75,1183,1184],{"class":267},"    if",[75,1186,1167],{"class":81},[75,1188,1189],{"class":85},"!=",[75,1191,1192],{"class":85}," nil",[75,1194,114],{"class":85},[75,1196,1198,1201,1203,1206,1208,1211],{"class":77,"line":1197},55,[75,1199,1200],{"class":81},"        log",[75,1202,63],{"class":85},[75,1204,1205],{"class":88},"Fatal",[75,1207,127],{"class":85},[75,1209,1210],{"class":81},"err",[75,1212,331],{"class":85},[75,1214,1216],{"class":77,"line":1215},56,[75,1217,1218],{"class":85},"    }\n",[75,1220,1222,1224,1226,1228,1231,1233,1236,1238,1240,1243,1245,1247,1250,1252,1255,1258,1260,1262,1264],{"class":77,"line":1221},57,[75,1223,1184],{"class":267},[75,1225,1167],{"class":81},[75,1227,359],{"class":85},[75,1229,1230],{"class":81}," os",[75,1232,63],{"class":85},[75,1234,1235],{"class":88},"WriteFile",[75,1237,127],{"class":85},[75,1239,206],{"class":85},[75,1241,1242],{"class":209},"right_aligned.pdf",[75,1244,206],{"class":85},[75,1246,134],{"class":85},[75,1248,1249],{"class":81}," data",[75,1251,134],{"class":85},[75,1253,1254],{"class":130}," 0o644",[75,1256,1257],{"class":85},");",[75,1259,1167],{"class":81},[75,1261,1189],{"class":85},[75,1263,1192],{"class":85},[75,1265,114],{"class":85},[75,1267,1269,1271,1273,1275,1277,1279],{"class":77,"line":1268},58,[75,1270,1200],{"class":81},[75,1272,63],{"class":85},[75,1274,1205],{"class":88},[75,1276,127],{"class":85},[75,1278,1210],{"class":81},[75,1280,331],{"class":85},[75,1282,1284],{"class":77,"line":1283},59,[75,1285,1218],{"class":85},[75,1287,1289],{"class":77,"line":1288},60,[75,1290,1291],{"class":85},"}\n",[14,1293,1295],{"id":1294},"왜-채움-열이-필요한가","왜 채움 열이 필요한가",[19,1297,1298],{},"이 부분은 외우기보다 이해해 둘 가치가 있습니다. gpdf 레이아웃에서 마주치는 다른 몇 가지 의외의 동작도 같이 설명되기 때문입니다.",[19,1300,1301,1302,1305,1306,1309],{},"행은 수평 방향 박스입니다. ",[22,1303,1304],{},"RowBuilder.build","는 ",[22,1307,1308],{},"r.cols","를 순서대로 돌면서 열마다 자식 박스를 하나씩 만드는데, 그 자식에 설정하는 스타일은 폭 하나뿐입니다.",[66,1311,1313],{"className":68,"code":1312,"language":70,"meta":71,"style":71},"colBox := &document.Box{\n    Content: cb.buildNodes(),\n    BoxStyle: document.BoxStyle{\n        Width: document.Pct(float64(col.span) / float64(gridColumns) * 100),\n    },\n}\n",[22,1314,1315,1335,1353,1370,1421,1426],{"__ignoreMap":71},[75,1316,1317,1320,1322,1325,1327,1329,1332],{"class":77,"line":78},[75,1318,1319],{"class":81},"colBox ",[75,1321,359],{"class":85},[75,1323,1324],{"class":85}," &",[75,1326,385],{"class":102},[75,1328,63],{"class":85},[75,1330,1331],{"class":102},"Box",[75,1333,1334],{"class":85},"{\n",[75,1336,1337,1340,1343,1346,1348,1351],{"class":77,"line":117},[75,1338,1339],{"class":81},"    Content",[75,1341,1342],{"class":85},":",[75,1344,1345],{"class":81}," cb",[75,1347,63],{"class":85},[75,1349,1350],{"class":88},"buildNodes",[75,1352,721],{"class":85},[75,1354,1355,1358,1360,1363,1365,1368],{"class":77,"line":161},[75,1356,1357],{"class":81},"    BoxStyle",[75,1359,1342],{"class":85},[75,1361,1362],{"class":102}," document",[75,1364,63],{"class":85},[75,1366,1367],{"class":102},"BoxStyle",[75,1369,1334],{"class":85},[75,1371,1372,1375,1377,1379,1381,1384,1386,1390,1392,1395,1397,1399,1401,1404,1407,1409,1412,1414,1416,1419],{"class":77,"line":193},[75,1373,1374],{"class":81},"        Width",[75,1376,1342],{"class":85},[75,1378,1362],{"class":81},[75,1380,63],{"class":85},[75,1382,1383],{"class":88},"Pct",[75,1385,127],{"class":85},[75,1387,1389],{"class":1388},"spNyl","float64",[75,1391,127],{"class":85},[75,1393,1394],{"class":81},"col",[75,1396,63],{"class":85},[75,1398,75],{"class":81},[75,1400,111],{"class":85},[75,1402,1403],{"class":85}," /",[75,1405,1406],{"class":1388}," float64",[75,1408,127],{"class":85},[75,1410,1411],{"class":81},"gridColumns",[75,1413,111],{"class":85},[75,1415,99],{"class":85},[75,1417,1418],{"class":130}," 100",[75,1420,393],{"class":85},[75,1422,1423],{"class":77,"line":228},[75,1424,1425],{"class":85},"    },\n",[75,1427,1428],{"class":77,"line":234},[75,1429,1291],{"class":85},[19,1431,1432,1434,1435,1438,1439,1442,1443,1446,1447,1450,1451,1450,1454,1450,1457,1450,1460,1450,1463,1450,1466,1450,1469,1450,1472,1450,1475,1450,1478,1450,1481,1484],{},[22,1433,1411],{},"는 12입니다. 즉 ",[22,1436,1437],{},"Col(4)","는 말 그대로 \"행 폭의 33.33%인 박스\"이고 그 이상은 아닙니다. 행은 자식을 왼쪽에서 오른쪽으로 배치하다가 자식이 떨어지면 멈춥니다. 남은 공간이라는 개념 자체가 없는데, ",[22,1440,1441],{},"document.BoxStyle","에 ",[22,1444,1445],{},"JustifyContent"," 필드가 없기 때문입니다. 저장소 전체를 grep해도 나오지 않습니다. 있는 것은 ",[22,1448,1449],{},"Width",", ",[22,1452,1453],{},"Height",[22,1455,1456],{},"MinWidth",[22,1458,1459],{},"MaxWidth",[22,1461,1462],{},"MinHeight",[22,1464,1465],{},"MaxHeight",[22,1467,1468],{},"Margin",[22,1470,1471],{},"Padding",[22,1473,1474],{},"Border",[22,1476,1477],{},"Background",[22,1479,1480],{},"Direction",[22,1482,1483],{},"Position","뿐입니다. 어휘는 이게 전부입니다.",[19,1486,1487,1488,1490],{},"그래서 ",[22,1489,1437],{}," 하나만 두면 폭 33.33%짜리 박스 하나만 들어 있는 행이 되고, 그것이 수평 흐름의 시작 지점에 놓입니다. 나머지 66.67%는 \"열 오른쪽의 빈 공간\"이 아니라 아예 아무것도 아닙니다. 밀어낼 상대가 없습니다.",[19,1492,1493,1494,1497],{},"채움용 ",[22,1495,1496],{},"Col(8)","은 그 공간을 차지할 무언가를 레이아웃 엔진에 줍니다. 트리에 빈 박스 하나가 늘어날 뿐 렌더링 결과에는 아무것도 나오지 않습니다.",[19,1499,1500,1501,1503,1504,1507,1508,1507,1511,1513],{},"덧붙이면 ",[22,1502,1496],{},"이 특별한 것은 아닙니다. ",[22,1505,1506],{},"Col(6)"," + ",[22,1509,1510],{},"Col(3)",[22,1512,1510],{},"도 마지막 블록을 똑같이 오른쪽 끝으로 보내고, 나중에 채움 쪽에 콘텐츠를 넣어도 구조를 다시 짤 필요가 없습니다.",[14,1515,1517],{"id":1516},"함정-열은-오른쪽-텍스트는-왼쪽","함정: 열은 오른쪽, 텍스트는 왼쪽",[19,1519,1520],{},"시간을 가장 많이 잡아먹는 실수가 이것입니다.",[66,1522,1524],{"className":68,"code":1523,"language":70,"meta":71,"style":71},"r.Col(8, func(c *template.ColBuilder) {})\nr.Col(4, func(c *template.ColBuilder) {\n    c.Text(\"합계: ₩25,575,000\") // ← AlignRight 없음\n})\n",[22,1525,1526,1556,1586,1608],{"__ignoreMap":71},[75,1527,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554],{"class":77,"line":78},[75,1529,96],{"class":81},[75,1531,63],{"class":85},[75,1533,58],{"class":88},[75,1535,127],{"class":85},[75,1537,131],{"class":130},[75,1539,134],{"class":85},[75,1541,137],{"class":85},[75,1543,140],{"class":95},[75,1545,99],{"class":85},[75,1547,103],{"class":102},[75,1549,63],{"class":85},[75,1551,149],{"class":102},[75,1553,111],{"class":85},[75,1555,920],{"class":85},[75,1557,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584],{"class":77,"line":117},[75,1559,96],{"class":81},[75,1561,63],{"class":85},[75,1563,58],{"class":88},[75,1565,127],{"class":85},[75,1567,172],{"class":130},[75,1569,134],{"class":85},[75,1571,137],{"class":85},[75,1573,140],{"class":95},[75,1575,99],{"class":85},[75,1577,103],{"class":102},[75,1579,63],{"class":85},[75,1581,149],{"class":102},[75,1583,111],{"class":85},[75,1585,114],{"class":85},[75,1587,1588,1591,1593,1595,1597,1599,1601,1603,1605],{"class":77,"line":161},[75,1589,1590],{"class":81},"    c",[75,1592,63],{"class":85},[75,1594,201],{"class":88},[75,1596,127],{"class":85},[75,1598,206],{"class":85},[75,1600,210],{"class":209},[75,1602,206],{"class":85},[75,1604,111],{"class":85},[75,1606,1607],{"class":157}," // ← AlignRight 없음\n",[75,1609,1610],{"class":77,"line":193},[75,1611,237],{"class":85},[19,1613,1614,1615,1619],{},"열은 원하는 자리에 있습니다. 텍스트는 그렇지 않습니다. 열의 왼쪽 경계, 즉 페이지의 66.67% 지점에서 시작하기 때문에 ",[1616,1617,1618],"em",{},"어느 정도는"," 오른쪽 정렬처럼 보입니다. 금액 자릿수가 전부 같은 동안에는 눈치채지 못하다가, 세 자리 숫자와 다섯 자리 숫자가 나란히 놓이면서 소수점이 어긋나는 순간에야 알아차리게 됩니다.",[19,1621,1622,1305,1624,127,1627,1630,1631,1634,1635,1638],{},[22,1623,62],{},[22,1625,1626],{},"TextOption",[22,1628,1629],{},"TextAlign","을 설정하는 ",[22,1632,1633],{},"func(*document.Style)",")이라서 개별 ",[22,1636,1637],{},"c.Text"," 호출에 붙입니다. 열 단위로 한 번에 설정하는 방법은 없습니다. 블록 안의 모든 줄에 써야 합니다.",[14,1640,1642],{"id":1641},"표-이미지-페이지-번호","표, 이미지, 페이지 번호",[19,1644,1645],{},"텍스트 옵션은 다른 요소 내부까지 닿지 않습니다. 요소마다 전용 입구가 있습니다.",[66,1647,1649],{"className":68,"code":1648,"language":70,"meta":71,"style":71},"// Table: header 슬라이스와 위치로 대응되는 열별 정렬.\nc.Table(header, rows, template.ColumnAlign(\n    document.AlignLeft, document.AlignRight, document.AlignRight,\n))\n\n// Image: 속한 열 안에서의 정렬.\nc.Image(logoBytes, template.WithAlign(document.AlignRight))\n\n// 페이지 번호는 TextOption을 받으므로 AlignRight가 그대로 동작합니다.\nc.PageNumber(template.AlignRight())\n",[22,1650,1651,1656,1686,1715,1719,1723,1728,1761,1765,1770],{"__ignoreMap":71},[75,1652,1653],{"class":77,"line":78},[75,1654,1655],{"class":157},"// Table: header 슬라이스와 위치로 대응되는 열별 정렬.\n",[75,1657,1658,1660,1662,1665,1667,1670,1672,1675,1677,1679,1681,1684],{"class":77,"line":117},[75,1659,140],{"class":81},[75,1661,63],{"class":85},[75,1663,1664],{"class":88},"Table",[75,1666,127],{"class":85},[75,1668,1669],{"class":81},"header",[75,1671,134],{"class":85},[75,1673,1674],{"class":81}," rows",[75,1676,134],{"class":85},[75,1678,217],{"class":81},[75,1680,63],{"class":85},[75,1682,1683],{"class":88},"ColumnAlign",[75,1685,369],{"class":85},[75,1687,1688,1691,1693,1696,1698,1700,1702,1704,1706,1708,1710,1712],{"class":77,"line":161},[75,1689,1690],{"class":81},"    document",[75,1692,63],{"class":85},[75,1694,1695],{"class":81},"AlignLeft",[75,1697,134],{"class":85},[75,1699,1362],{"class":81},[75,1701,63],{"class":85},[75,1703,222],{"class":81},[75,1705,134],{"class":85},[75,1707,1362],{"class":81},[75,1709,63],{"class":85},[75,1711,222],{"class":81},[75,1713,1714],{"class":85},",\n",[75,1716,1717],{"class":77,"line":193},[75,1718,574],{"class":85},[75,1720,1721],{"class":77,"line":228},[75,1722,262],{"emptyLinePlaceholder":261},[75,1724,1725],{"class":77,"line":234},[75,1726,1727],{"class":157},"// Image: 속한 열 안에서의 정렬.\n",[75,1729,1730,1732,1734,1737,1739,1742,1744,1746,1748,1751,1753,1755,1757,1759],{"class":77,"line":298},[75,1731,140],{"class":81},[75,1733,63],{"class":85},[75,1735,1736],{"class":88},"Image",[75,1738,127],{"class":85},[75,1740,1741],{"class":81},"logoBytes",[75,1743,134],{"class":85},[75,1745,217],{"class":81},[75,1747,63],{"class":85},[75,1749,1750],{"class":88},"WithAlign",[75,1752,127],{"class":85},[75,1754,385],{"class":81},[75,1756,63],{"class":85},[75,1758,222],{"class":81},[75,1760,574],{"class":85},[75,1762,1763],{"class":77,"line":308},[75,1764,262],{"emptyLinePlaceholder":261},[75,1766,1767],{"class":77,"line":318},[75,1768,1769],{"class":157},"// 페이지 번호는 TextOption을 받으므로 AlignRight가 그대로 동작합니다.\n",[75,1771,1772,1774,1776,1779,1781,1783,1785,1787],{"class":77,"line":328},[75,1773,140],{"class":81},[75,1775,63],{"class":85},[75,1777,1778],{"class":88},"PageNumber",[75,1780,127],{"class":85},[75,1782,103],{"class":81},[75,1784,63],{"class":85},[75,1786,222],{"class":88},[75,1788,225],{"class":85},[19,1790,1791,1793,1794,1796,1797,1800,1801,1803,1804,1807],{},[22,1792,1683],{},"이 받는 것은 ",[22,1795,1626],{},"이 아니라 ",[22,1798,1799],{},"document.TextAlign"," 값입니다. ",[22,1802,62],{},"가 아니라 ",[22,1805,1806],{},"document.AlignRight",". 헷갈리기 쉽지만 컴파일러가 바로 알려 줍니다.",[14,1809,1811],{"id":1810},"행으로-해결이-안-될-때","행으로 해결이 안 될 때",[19,1813,1814],{},"페이지의 다른 요소와 무관하게 좌표에 고정하고 싶은 것 — 결제 완료 도장, 대각선 워터마크, 모서리 표시 — 은 그리드 밖으로 나갑니다.",[66,1816,1818],{"className":68,"code":1817,"language":70,"meta":71,"style":71},"page.Absolute(document.Mm(140), document.Mm(60),\n    func(c *template.ColBuilder) {\n        c.Text(\"결제완료\", template.AlignRight(), template.Bold(),\n            template.FontSize(28), template.TextColor(pdf.RGBHex(0xC62828)))\n    },\n    template.AbsoluteWidth(document.Mm(50)),\n)\n",[22,1819,1820,1858,1877,1912,1950,1954,1980],{"__ignoreMap":71},[75,1821,1822,1824,1826,1829,1831,1833,1835,1837,1839,1842,1845,1847,1849,1851,1853,1856],{"class":77,"line":78},[75,1823,82],{"class":81},[75,1825,63],{"class":85},[75,1827,1828],{"class":88},"Absolute",[75,1830,127],{"class":85},[75,1832,385],{"class":81},[75,1834,63],{"class":85},[75,1836,421],{"class":88},[75,1838,127],{"class":85},[75,1840,1841],{"class":130},"140",[75,1843,1844],{"class":85},"),",[75,1846,1362],{"class":81},[75,1848,63],{"class":85},[75,1850,421],{"class":88},[75,1852,127],{"class":85},[75,1854,1855],{"class":130},"60",[75,1857,393],{"class":85},[75,1859,1860,1863,1865,1867,1869,1871,1873,1875],{"class":77,"line":117},[75,1861,1862],{"class":85},"    func(",[75,1864,140],{"class":95},[75,1866,99],{"class":85},[75,1868,103],{"class":102},[75,1870,63],{"class":85},[75,1872,149],{"class":102},[75,1874,111],{"class":85},[75,1876,114],{"class":85},[75,1878,1879,1881,1883,1885,1887,1889,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910],{"class":77,"line":161},[75,1880,196],{"class":81},[75,1882,63],{"class":85},[75,1884,201],{"class":88},[75,1886,127],{"class":85},[75,1888,206],{"class":85},[75,1890,1891],{"class":209},"결제완료",[75,1893,206],{"class":85},[75,1895,134],{"class":85},[75,1897,217],{"class":81},[75,1899,63],{"class":85},[75,1901,222],{"class":88},[75,1903,559],{"class":85},[75,1905,217],{"class":81},[75,1907,63],{"class":85},[75,1909,556],{"class":88},[75,1911,721],{"class":85},[75,1913,1914,1917,1919,1921,1923,1926,1928,1930,1932,1934,1936,1938,1940,1943,1945,1948],{"class":77,"line":193},[75,1915,1916],{"class":81},"            template",[75,1918,63],{"class":85},[75,1920,566],{"class":88},[75,1922,127],{"class":85},[75,1924,1925],{"class":130},"28",[75,1927,1844],{"class":85},[75,1929,217],{"class":81},[75,1931,63],{"class":85},[75,1933,601],{"class":88},[75,1935,127],{"class":85},[75,1937,606],{"class":81},[75,1939,63],{"class":85},[75,1941,1942],{"class":88},"RGBHex",[75,1944,127],{"class":85},[75,1946,1947],{"class":130},"0xC62828",[75,1949,619],{"class":85},[75,1951,1952],{"class":77,"line":228},[75,1953,1425],{"class":85},[75,1955,1956,1959,1961,1964,1966,1968,1970,1972,1974,1977],{"class":77,"line":234},[75,1957,1958],{"class":81},"    template",[75,1960,63],{"class":85},[75,1962,1963],{"class":88},"AbsoluteWidth",[75,1965,127],{"class":85},[75,1967,385],{"class":81},[75,1969,63],{"class":85},[75,1971,421],{"class":88},[75,1973,127],{"class":85},[75,1975,1976],{"class":130},"50",[75,1978,1979],{"class":85},")),\n",[75,1981,1982],{"class":77,"line":298},[75,1983,331],{"class":85},[19,1985,1986],{},"이건 비상구이지 정석이 아닙니다. 평범한 콘텐츠를 위해 x 좌표를 계산하고 있다면 답은 채움 열 쪽입니다.",[19,1988,1989,1990,1992,1993,1996,1997,2000],{},"마지막으로 하나 더. ",[22,1991,58],{},"은 개별 스팬을 1〜12로 클램프하지만 ",[1616,1994,1995],{},"합계","는 아무도 검사하지 않습니다. 한 행에 ",[22,1998,1999],{},"Col(5)","를 셋 쓰면 폭 백분율 합이 125%가 되고, 세 번째 열은 줄바꿈 없이 오른쪽 여백을 넘어갑니다. gpdf는 경고하지 않습니다. 스팬은 직접 세세요.",[14,2002,2004],{"id":2003},"관련-레시피","관련 레시피",[2006,2007,2008,2016,2023,2034],"ul",{},[2009,2010,2011,2015],"li",{},[27,2012,2014],{"href":2013},"/ko/blog/12-column-grid","gpdf의 12-컬럼 그리드는 어떻게 동작하나?"," — 그리드 전체 설명",[2009,2017,2018,2022],{},[27,2019,2021],{"href":2020},"/ko/blog/nest-row-in-col","Col 안에 Row를 중첩하려면?"," — 평면 그리드의 또 다른 질문",[2009,2024,2025,2029,2030,2033],{},[27,2026,2028],{"href":2027},"/ko/blog/table-column-widths","표의 열 너비를 지정하려면?"," — ",[22,2031,2032],{},"c.Table"," 내부의 너비와 정렬",[2009,2035,2036,2040],{},[27,2037,2039],{"href":2038},"/ko/blog/invoice-pdf-go-under-50-lines","Go로 50줄 이내에 청구서 PDF 만들기"," — 이 패턴을 문서 전체에서 쓰는 예",[14,2042,2044],{"id":2043},"gpdf-써-보기","gpdf 써 보기",[19,2046,2047],{},"gpdf는 Go용 PDF 생성 라이브러리입니다. MIT 라이선스, 외부 의존성 제로, CJK 기본 지원.",[66,2049,2053],{"className":2050,"code":2051,"language":2052,"meta":71,"style":71},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[22,2054,2055],{"__ignoreMap":71},[75,2056,2057,2059,2062],{"class":77,"line":78},[75,2058,70],{"class":102},[75,2060,2061],{"class":209}," get",[75,2063,2064],{"class":209}," github.com/gpdf-dev/gpdf\n",[19,2066,2067,2071,2072],{},[27,2068,2070],{"href":29,"rel":2069},[31],"⭐ GitHub에서 Star"," · ",[27,2073,2076],{"href":2074,"rel":2075},"https://gpdf.dev/ko/docs/quickstart",[31],"문서 읽기",[2078,2079,2080],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":71,"searchDepth":117,"depth":117,"links":2082},[2083,2084,2085,2086,2087,2088,2089,2090,2091],{"id":16,"depth":117,"text":17},{"id":36,"depth":117,"text":36},{"id":240,"depth":117,"text":240},{"id":1294,"depth":117,"text":1295},{"id":1516,"depth":117,"text":1517},{"id":1641,"depth":117,"text":1642},{"id":1810,"depth":117,"text":1811},{"id":2003,"depth":117,"text":2004},{"id":2043,"depth":117,"text":2044},"2026-09-02","두 가지가 필요합니다. 빈 채움 Col로 열을 오른쪽 끝까지 밀고, template.AlignRight()로 열 안의 텍스트를 오른쪽 정렬합니다. 서로 다른 문제입니다.",false,"md",{"name":2097,"totalTime":2098,"tools":2099,"steps":2102},"gpdf에서 Col을 행의 오른쪽 끝에 배치하기","PT10M",[2100,2101],"Go 1.22+","github.com/gpdf-dev/gpdf",[2103,2106,2109,2112,2115],{"name":2104,"text":2105},"어느 쪽 오른쪽인지 구분하기","열 박스를 행의 오른쪽 끝에 두는 것과 그 열 안의 텍스트를 오른쪽 정렬하는 것은 별개의 문제이고 해법도 다릅니다. 대부분의 레이아웃은 둘 다 필요합니다.",{"name":2107,"text":2108},"스팬 합계가 12가 되도록 채움 Col 추가하기","오른쪽에 두고 싶은 열 앞에 빈 콜백을 넘긴 r.Col을 씁니다. r.Col(8, func(c *template.ColBuilder) {}) 다음에 r.Col(4, ...)를 쓰면 4 스팬 열이 오른쪽 여백에 딱 붙습니다.",{"name":2110,"text":2111},"텍스트 옵션에 AlignRight 넘기기","그 열 안의 모든 c.Text에 template.AlignRight()를 붙입니다. 빠뜨리면 오른쪽에 있는 열의 왼쪽 끝에 텍스트가 놓이는데, 여기서 가장 흔한 실수입니다.",{"name":2113,"text":2114},"표와 이미지는 전용 옵션 사용하기","텍스트 정렬 옵션은 Table이나 Image 내부까지 닿지 않습니다. 표에는 template.ColumnAlign(document.AlignRight), 이미지에는 template.WithAlign(document.AlignRight)를 씁니다.",{"name":2116,"text":2117},"행으로 해결이 안 될 때만 page.Absolute 쓰기","page.Absolute(x, y, fn, template.AbsoluteWidth(w))는 그리드 밖 고정 좌표에 배치합니다. 도장이나 워터마크용이지 일반적인 오른쪽 정렬 콘텐츠용이 아닙니다.",null,{},"/ko/blog/align-column-right-edge",{"title":5,"description":2093},"ko/blog/028.align-column-right-edge",[2124,2125,2126],"recipe","tutorial","templates","Zmss9r7AAeXud2QQj9VBqhd6NQNn4NAI7kE_5aDjAvc",1788360643864]