[{"data":1,"prerenderedAt":1745},["ShallowReactive",2],{"blog-ko-zebra-striped-table-rows":3},{"id":4,"title":5,"author":6,"body":10,"date":1716,"description":1717,"draft":1718,"extension":1719,"howTo":1720,"image":1735,"meta":1736,"navigation":132,"path":1737,"seo":1738,"stem":1739,"tags":1740,"updated":1735,"__hash__":1744},"blogKo/ko/blog/019.zebra-striped-table-rows.md","gpdf 표에 얼룩말 줄무늬 행을 넣으려면?",{"name":7,"url":8,"avatar":9},"Taiki Noda","https://nadai.dev/en/about","https://nadai.dev/og-default.png",{"type":11,"value":12,"toc":1705},"minimark",[13,18,35,39,106,109,113,1144,1150,1154,1165,1244,1247,1250,1254,1261,1338,1341,1352,1356,1363,1577,1580,1590,1594,1635,1639,1665,1669,1672,1689,1701],[14,15,17],"h2",{"id":16},"질문을-다시-풀면","질문을 다시 풀면",[19,20,21,22,26,27,34],"p",{},"청구서, 거래내역, 로그 — 5행을 넘는 표는 시선이 다음 행을 놓치기 시작한다. Bootstrap의 ",[23,24,25],"code",{},".table-striped","처럼 한 줄 걸러 회색 배경이 들어간 줄무늬를 ",[28,29,33],"a",{"href":30,"rel":31},"https://github.com/gpdf-dev/gpdf",[32],"nofollow","gpdf","에서도 넣고 싶다. 단, 행 루프는 직접 쓰고 싶지 않다.",[14,36,38],{"id":37},"한-줄-답변","한 줄 답변",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","c.Table(header, rows, template.TableStripe(pdf.RGBHex(0xF5F5F5)))\n","go","",[23,47,48],{"__ignoreMap":45},[49,50,53,57,61,65,68,71,74,77,79,82,84,87,89,92,94,97,99,103],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sTEyZ","c",[49,58,60],{"class":59},"sMK4o",".",[49,62,64],{"class":63},"s2Zo4","Table",[49,66,67],{"class":59},"(",[49,69,70],{"class":55},"header",[49,72,73],{"class":59},",",[49,75,76],{"class":55}," rows",[49,78,73],{"class":59},[49,80,81],{"class":55}," template",[49,83,60],{"class":59},[49,85,86],{"class":63},"TableStripe",[49,88,67],{"class":59},[49,90,91],{"class":55},"pdf",[49,93,60],{"class":59},[49,95,96],{"class":63},"RGBHex",[49,98,67],{"class":59},[49,100,102],{"class":101},"sbssI","0xF5F5F5",[49,104,105],{"class":59},")))\n",[19,107,108],{},"이게 전부다. gpdf가 교차 색칠을 처리한다. 헤더는 줄무늬 대상에서 빠지고 본문 행에만 적용된다. 1행은 그대로, 2행에 색, 3행 그대로, 4행에 색, 이런 식.",[14,110,112],{"id":111},"동작하는-코드","동작하는 코드",[40,114,116],{"className":42,"code":115,"language":44,"meta":45,"style":45},"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/pdf\"\n    \"github.com/gpdf-dev/gpdf/template\"\n)\n\nfunc main() {\n    doc := gpdf.NewDocument(\n        gpdf.WithPageSize(gpdf.A4),\n        gpdf.WithMargins(document.UniformEdges(document.Mm(20))),\n    )\n\n    brand := pdf.RGBHex(0x1A237E)     // 헤더 배경\n    stripe := pdf.RGBHex(0xF5F5F5)    // 한 줄 걸러 들어갈 줄무늬\n\n    page := doc.AddPage()\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Text(\"1분기 매출\", template.FontSize(20), template.Bold())\n            c.Spacer(document.Mm(4))\n\n            c.Table(\n                []string{\"제품\", \"지역\", \"수량\", \"매출\"},\n                [][]string{\n                    {\"Laptop Pro 15\",  \"북미\",  \"120\", \"₩208,800,000\"},\n                    {\"Wireless Mouse\", \"EU\",   \"640\", \"₩25,728,000\"},\n                    {\"USB-C Hub\",      \"APAC\", \"410\", \"₩27,470,000\"},\n                    {\"Monitor 27\\\"\",   \"북미\",  \"180\", \"₩96,300,000\"},\n                    {\"Keyboard\",       \"EU\",   \"320\", \"₩34,304,000\"},\n                    {\"Webcam HD\",      \"APAC\", \"260\", \"₩31,356,000\"},\n                },\n                template.ColumnWidths(40, 20, 15, 25),\n                template.TableHeaderStyle(\n                    template.TextColor(pdf.White),\n                    template.BgColor(brand),\n                ),\n                template.TableStripe(stripe),\n            )\n        })\n    })\n\n    data, err := doc.Generate()\n    if err != nil {\n        log.Fatal(err)\n    }\n    if err := os.WriteFile(\"sales.pdf\", data, 0o644); err != nil {\n        log.Fatal(err)\n    }\n}\n",[23,117,118,127,134,144,156,166,171,181,191,201,211,217,222,237,257,280,317,323,328,355,378,383,402,435,471,519,545,550,561,612,623,666,708,750,793,834,874,880,913,925,947,964,970,986,992,998,1004,1009,1031,1047,1065,1071,1118,1133,1138],{"__ignoreMap":45},[49,119,120,123],{"class":51,"line":52},[49,121,122],{"class":59},"package",[49,124,126],{"class":125},"sBMFI"," main\n",[49,128,130],{"class":51,"line":129},2,[49,131,133],{"emptyLinePlaceholder":132},true,"\n",[49,135,137,141],{"class":51,"line":136},3,[49,138,140],{"class":139},"s7zQu","import",[49,142,143],{"class":59}," (\n",[49,145,147,150,153],{"class":51,"line":146},4,[49,148,149],{"class":59},"    \"",[49,151,152],{"class":125},"log",[49,154,155],{"class":59},"\"\n",[49,157,159,161,164],{"class":51,"line":158},5,[49,160,149],{"class":59},[49,162,163],{"class":125},"os",[49,165,155],{"class":59},[49,167,169],{"class":51,"line":168},6,[49,170,133],{"emptyLinePlaceholder":132},[49,172,174,176,179],{"class":51,"line":173},7,[49,175,149],{"class":59},[49,177,178],{"class":125},"github.com/gpdf-dev/gpdf",[49,180,155],{"class":59},[49,182,184,186,189],{"class":51,"line":183},8,[49,185,149],{"class":59},[49,187,188],{"class":125},"github.com/gpdf-dev/gpdf/document",[49,190,155],{"class":59},[49,192,194,196,199],{"class":51,"line":193},9,[49,195,149],{"class":59},[49,197,198],{"class":125},"github.com/gpdf-dev/gpdf/pdf",[49,200,155],{"class":59},[49,202,204,206,209],{"class":51,"line":203},10,[49,205,149],{"class":59},[49,207,208],{"class":125},"github.com/gpdf-dev/gpdf/template",[49,210,155],{"class":59},[49,212,214],{"class":51,"line":213},11,[49,215,216],{"class":59},")\n",[49,218,220],{"class":51,"line":219},12,[49,221,133],{"emptyLinePlaceholder":132},[49,223,225,228,231,234],{"class":51,"line":224},13,[49,226,227],{"class":59},"func",[49,229,230],{"class":63}," main",[49,232,233],{"class":59},"()",[49,235,236],{"class":59}," {\n",[49,238,240,243,246,249,251,254],{"class":51,"line":239},14,[49,241,242],{"class":55},"    doc ",[49,244,245],{"class":59},":=",[49,247,248],{"class":55}," gpdf",[49,250,60],{"class":59},[49,252,253],{"class":63},"NewDocument",[49,255,256],{"class":59},"(\n",[49,258,260,263,265,268,270,272,274,277],{"class":51,"line":259},15,[49,261,262],{"class":55},"        gpdf",[49,264,60],{"class":59},[49,266,267],{"class":63},"WithPageSize",[49,269,67],{"class":59},[49,271,33],{"class":55},[49,273,60],{"class":59},[49,275,276],{"class":55},"A4",[49,278,279],{"class":59},"),\n",[49,281,283,285,287,290,292,295,297,300,302,304,306,309,311,314],{"class":51,"line":282},16,[49,284,262],{"class":55},[49,286,60],{"class":59},[49,288,289],{"class":63},"WithMargins",[49,291,67],{"class":59},[49,293,294],{"class":55},"document",[49,296,60],{"class":59},[49,298,299],{"class":63},"UniformEdges",[49,301,67],{"class":59},[49,303,294],{"class":55},[49,305,60],{"class":59},[49,307,308],{"class":63},"Mm",[49,310,67],{"class":59},[49,312,313],{"class":101},"20",[49,315,316],{"class":59},"))),\n",[49,318,320],{"class":51,"line":319},17,[49,321,322],{"class":59},"    )\n",[49,324,326],{"class":51,"line":325},18,[49,327,133],{"emptyLinePlaceholder":132},[49,329,331,334,336,339,341,343,345,348,351],{"class":51,"line":330},19,[49,332,333],{"class":55},"    brand ",[49,335,245],{"class":59},[49,337,338],{"class":55}," pdf",[49,340,60],{"class":59},[49,342,96],{"class":63},[49,344,67],{"class":59},[49,346,347],{"class":101},"0x1A237E",[49,349,350],{"class":59},")",[49,352,354],{"class":353},"sHwdD","     // 헤더 배경\n",[49,356,358,361,363,365,367,369,371,373,375],{"class":51,"line":357},20,[49,359,360],{"class":55},"    stripe ",[49,362,245],{"class":59},[49,364,338],{"class":55},[49,366,60],{"class":59},[49,368,96],{"class":63},[49,370,67],{"class":59},[49,372,102],{"class":101},[49,374,350],{"class":59},[49,376,377],{"class":353},"    // 한 줄 걸러 들어갈 줄무늬\n",[49,379,381],{"class":51,"line":380},21,[49,382,133],{"emptyLinePlaceholder":132},[49,384,386,389,391,394,396,399],{"class":51,"line":385},22,[49,387,388],{"class":55},"    page ",[49,390,245],{"class":59},[49,392,393],{"class":55}," doc",[49,395,60],{"class":59},[49,397,398],{"class":63},"AddPage",[49,400,401],{"class":59},"()\n",[49,403,405,408,410,413,416,420,423,426,428,431,433],{"class":51,"line":404},23,[49,406,407],{"class":55},"    page",[49,409,60],{"class":59},[49,411,412],{"class":63},"AutoRow",[49,414,415],{"class":59},"(func(",[49,417,419],{"class":418},"sHdIc","r",[49,421,422],{"class":59}," *",[49,424,425],{"class":125},"template",[49,427,60],{"class":59},[49,429,430],{"class":125},"RowBuilder",[49,432,350],{"class":59},[49,434,236],{"class":59},[49,436,438,441,443,446,448,451,453,456,458,460,462,464,467,469],{"class":51,"line":437},24,[49,439,440],{"class":55},"        r",[49,442,60],{"class":59},[49,444,445],{"class":63},"Col",[49,447,67],{"class":59},[49,449,450],{"class":101},"12",[49,452,73],{"class":59},[49,454,455],{"class":59}," func(",[49,457,56],{"class":418},[49,459,422],{"class":59},[49,461,425],{"class":125},[49,463,60],{"class":59},[49,465,466],{"class":125},"ColBuilder",[49,468,350],{"class":59},[49,470,236],{"class":59},[49,472,474,477,479,482,484,487,491,493,495,497,499,502,504,506,509,511,513,516],{"class":51,"line":473},25,[49,475,476],{"class":55},"            c",[49,478,60],{"class":59},[49,480,481],{"class":63},"Text",[49,483,67],{"class":59},[49,485,486],{"class":59},"\"",[49,488,490],{"class":489},"sfazB","1분기 매출",[49,492,486],{"class":59},[49,494,73],{"class":59},[49,496,81],{"class":55},[49,498,60],{"class":59},[49,500,501],{"class":63},"FontSize",[49,503,67],{"class":59},[49,505,313],{"class":101},[49,507,508],{"class":59},"),",[49,510,81],{"class":55},[49,512,60],{"class":59},[49,514,515],{"class":63},"Bold",[49,517,518],{"class":59},"())\n",[49,520,522,524,526,529,531,533,535,537,539,542],{"class":51,"line":521},26,[49,523,476],{"class":55},[49,525,60],{"class":59},[49,527,528],{"class":63},"Spacer",[49,530,67],{"class":59},[49,532,294],{"class":55},[49,534,60],{"class":59},[49,536,308],{"class":63},[49,538,67],{"class":59},[49,540,541],{"class":101},"4",[49,543,544],{"class":59},"))\n",[49,546,548],{"class":51,"line":547},27,[49,549,133],{"emptyLinePlaceholder":132},[49,551,553,555,557,559],{"class":51,"line":552},28,[49,554,476],{"class":55},[49,556,60],{"class":59},[49,558,64],{"class":63},[49,560,256],{"class":59},[49,562,564,567,571,574,576,579,581,583,586,589,591,593,595,598,600,602,604,607,609],{"class":51,"line":563},29,[49,565,566],{"class":59},"                []",[49,568,570],{"class":569},"spNyl","string",[49,572,573],{"class":59},"{",[49,575,486],{"class":59},[49,577,578],{"class":489},"제품",[49,580,486],{"class":59},[49,582,73],{"class":59},[49,584,585],{"class":59}," \"",[49,587,588],{"class":489},"지역",[49,590,486],{"class":59},[49,592,73],{"class":59},[49,594,585],{"class":59},[49,596,597],{"class":489},"수량",[49,599,486],{"class":59},[49,601,73],{"class":59},[49,603,585],{"class":59},[49,605,606],{"class":489},"매출",[49,608,486],{"class":59},[49,610,611],{"class":59},"},\n",[49,613,615,618,620],{"class":51,"line":614},30,[49,616,617],{"class":59},"                [][]",[49,619,570],{"class":569},[49,621,622],{"class":59},"{\n",[49,624,626,629,631,634,636,638,641,644,646,648,650,653,655,657,659,662,664],{"class":51,"line":625},31,[49,627,628],{"class":59},"                    {",[49,630,486],{"class":59},[49,632,633],{"class":489},"Laptop Pro 15",[49,635,486],{"class":59},[49,637,73],{"class":59},[49,639,640],{"class":59},"  \"",[49,642,643],{"class":489},"북미",[49,645,486],{"class":59},[49,647,73],{"class":59},[49,649,640],{"class":59},[49,651,652],{"class":489},"120",[49,654,486],{"class":59},[49,656,73],{"class":59},[49,658,585],{"class":59},[49,660,661],{"class":489},"₩208,800,000",[49,663,486],{"class":59},[49,665,611],{"class":59},[49,667,669,671,673,676,678,680,682,685,687,689,692,695,697,699,701,704,706],{"class":51,"line":668},32,[49,670,628],{"class":59},[49,672,486],{"class":59},[49,674,675],{"class":489},"Wireless Mouse",[49,677,486],{"class":59},[49,679,73],{"class":59},[49,681,585],{"class":59},[49,683,684],{"class":489},"EU",[49,686,486],{"class":59},[49,688,73],{"class":59},[49,690,691],{"class":59},"   \"",[49,693,694],{"class":489},"640",[49,696,486],{"class":59},[49,698,73],{"class":59},[49,700,585],{"class":59},[49,702,703],{"class":489},"₩25,728,000",[49,705,486],{"class":59},[49,707,611],{"class":59},[49,709,711,713,715,718,720,722,725,728,730,732,734,737,739,741,743,746,748],{"class":51,"line":710},33,[49,712,628],{"class":59},[49,714,486],{"class":59},[49,716,717],{"class":489},"USB-C Hub",[49,719,486],{"class":59},[49,721,73],{"class":59},[49,723,724],{"class":59},"      \"",[49,726,727],{"class":489},"APAC",[49,729,486],{"class":59},[49,731,73],{"class":59},[49,733,585],{"class":59},[49,735,736],{"class":489},"410",[49,738,486],{"class":59},[49,740,73],{"class":59},[49,742,585],{"class":59},[49,744,745],{"class":489},"₩27,470,000",[49,747,486],{"class":59},[49,749,611],{"class":59},[49,751,753,755,757,760,763,765,767,769,771,773,775,777,780,782,784,786,789,791],{"class":51,"line":752},34,[49,754,628],{"class":59},[49,756,486],{"class":59},[49,758,759],{"class":489},"Monitor 27",[49,761,762],{"class":55},"\\\"",[49,764,486],{"class":59},[49,766,73],{"class":59},[49,768,691],{"class":59},[49,770,643],{"class":489},[49,772,486],{"class":59},[49,774,73],{"class":59},[49,776,640],{"class":59},[49,778,779],{"class":489},"180",[49,781,486],{"class":59},[49,783,73],{"class":59},[49,785,585],{"class":59},[49,787,788],{"class":489},"₩96,300,000",[49,790,486],{"class":59},[49,792,611],{"class":59},[49,794,796,798,800,803,805,807,810,812,814,816,818,821,823,825,827,830,832],{"class":51,"line":795},35,[49,797,628],{"class":59},[49,799,486],{"class":59},[49,801,802],{"class":489},"Keyboard",[49,804,486],{"class":59},[49,806,73],{"class":59},[49,808,809],{"class":59},"       \"",[49,811,684],{"class":489},[49,813,486],{"class":59},[49,815,73],{"class":59},[49,817,691],{"class":59},[49,819,820],{"class":489},"320",[49,822,486],{"class":59},[49,824,73],{"class":59},[49,826,585],{"class":59},[49,828,829],{"class":489},"₩34,304,000",[49,831,486],{"class":59},[49,833,611],{"class":59},[49,835,837,839,841,844,846,848,850,852,854,856,858,861,863,865,867,870,872],{"class":51,"line":836},36,[49,838,628],{"class":59},[49,840,486],{"class":59},[49,842,843],{"class":489},"Webcam HD",[49,845,486],{"class":59},[49,847,73],{"class":59},[49,849,724],{"class":59},[49,851,727],{"class":489},[49,853,486],{"class":59},[49,855,73],{"class":59},[49,857,585],{"class":59},[49,859,860],{"class":489},"260",[49,862,486],{"class":59},[49,864,73],{"class":59},[49,866,585],{"class":59},[49,868,869],{"class":489},"₩31,356,000",[49,871,486],{"class":59},[49,873,611],{"class":59},[49,875,877],{"class":51,"line":876},37,[49,878,879],{"class":59},"                },\n",[49,881,883,886,888,891,893,896,898,901,903,906,908,911],{"class":51,"line":882},38,[49,884,885],{"class":55},"                template",[49,887,60],{"class":59},[49,889,890],{"class":63},"ColumnWidths",[49,892,67],{"class":59},[49,894,895],{"class":101},"40",[49,897,73],{"class":59},[49,899,900],{"class":101}," 20",[49,902,73],{"class":59},[49,904,905],{"class":101}," 15",[49,907,73],{"class":59},[49,909,910],{"class":101}," 25",[49,912,279],{"class":59},[49,914,916,918,920,923],{"class":51,"line":915},39,[49,917,885],{"class":55},[49,919,60],{"class":59},[49,921,922],{"class":63},"TableHeaderStyle",[49,924,256],{"class":59},[49,926,928,931,933,936,938,940,942,945],{"class":51,"line":927},40,[49,929,930],{"class":55},"                    template",[49,932,60],{"class":59},[49,934,935],{"class":63},"TextColor",[49,937,67],{"class":59},[49,939,91],{"class":55},[49,941,60],{"class":59},[49,943,944],{"class":55},"White",[49,946,279],{"class":59},[49,948,950,952,954,957,959,962],{"class":51,"line":949},41,[49,951,930],{"class":55},[49,953,60],{"class":59},[49,955,956],{"class":63},"BgColor",[49,958,67],{"class":59},[49,960,961],{"class":55},"brand",[49,963,279],{"class":59},[49,965,967],{"class":51,"line":966},42,[49,968,969],{"class":59},"                ),\n",[49,971,973,975,977,979,981,984],{"class":51,"line":972},43,[49,974,885],{"class":55},[49,976,60],{"class":59},[49,978,86],{"class":63},[49,980,67],{"class":59},[49,982,983],{"class":55},"stripe",[49,985,279],{"class":59},[49,987,989],{"class":51,"line":988},44,[49,990,991],{"class":59},"            )\n",[49,993,995],{"class":51,"line":994},45,[49,996,997],{"class":59},"        })\n",[49,999,1001],{"class":51,"line":1000},46,[49,1002,1003],{"class":59},"    })\n",[49,1005,1007],{"class":51,"line":1006},47,[49,1008,133],{"emptyLinePlaceholder":132},[49,1010,1012,1015,1017,1020,1022,1024,1026,1029],{"class":51,"line":1011},48,[49,1013,1014],{"class":55},"    data",[49,1016,73],{"class":59},[49,1018,1019],{"class":55}," err ",[49,1021,245],{"class":59},[49,1023,393],{"class":55},[49,1025,60],{"class":59},[49,1027,1028],{"class":63},"Generate",[49,1030,401],{"class":59},[49,1032,1034,1037,1039,1042,1045],{"class":51,"line":1033},49,[49,1035,1036],{"class":139},"    if",[49,1038,1019],{"class":55},[49,1040,1041],{"class":59},"!=",[49,1043,1044],{"class":59}," nil",[49,1046,236],{"class":59},[49,1048,1050,1053,1055,1058,1060,1063],{"class":51,"line":1049},50,[49,1051,1052],{"class":55},"        log",[49,1054,60],{"class":59},[49,1056,1057],{"class":63},"Fatal",[49,1059,67],{"class":59},[49,1061,1062],{"class":55},"err",[49,1064,216],{"class":59},[49,1066,1068],{"class":51,"line":1067},51,[49,1069,1070],{"class":59},"    }\n",[49,1072,1074,1076,1078,1080,1083,1085,1088,1090,1092,1095,1097,1099,1102,1104,1107,1110,1112,1114,1116],{"class":51,"line":1073},52,[49,1075,1036],{"class":139},[49,1077,1019],{"class":55},[49,1079,245],{"class":59},[49,1081,1082],{"class":55}," os",[49,1084,60],{"class":59},[49,1086,1087],{"class":63},"WriteFile",[49,1089,67],{"class":59},[49,1091,486],{"class":59},[49,1093,1094],{"class":489},"sales.pdf",[49,1096,486],{"class":59},[49,1098,73],{"class":59},[49,1100,1101],{"class":55}," data",[49,1103,73],{"class":59},[49,1105,1106],{"class":101}," 0o644",[49,1108,1109],{"class":59},");",[49,1111,1019],{"class":55},[49,1113,1041],{"class":59},[49,1115,1044],{"class":59},[49,1117,236],{"class":59},[49,1119,1121,1123,1125,1127,1129,1131],{"class":51,"line":1120},53,[49,1122,1052],{"class":55},[49,1124,60],{"class":59},[49,1126,1057],{"class":63},[49,1128,67],{"class":59},[49,1130,1062],{"class":55},[49,1132,216],{"class":59},[49,1134,1136],{"class":51,"line":1135},54,[49,1137,1070],{"class":59},[49,1139,1141],{"class":51,"line":1140},55,[49,1142,1143],{"class":59},"}\n",[19,1145,1146,1149],{},[23,1147,1148],{},"go run main.go",". 본문 6행 중 3행에 색이 들어가고, 헤더는 진한 남색에 흰 글씨. 월요일 아침 메일에 첨부되는 그 보고서 모양 그대로다.",[14,1151,1153],{"id":1152},"교차-색칠이-작동하는-방식","교차 색칠이 작동하는 방식",[19,1155,1156,1157,1160,1161,1164],{},"내부적으로 gpdf는 본문 행을 0부터 시작하는 인덱스 ",[23,1158,1159],{},"i","로 순회하면서 ",[23,1162,1163],{},"i%2 == 1","인 행에만 줄무늬 색을 칠한다. 헤더는 별도 슬라이스라 카운트에 포함되지 않는다.",[1166,1167,1168,1184],"table",{},[1169,1170,1171],"thead",{},[1172,1173,1174,1178,1181],"tr",{},[1175,1176,1177],"th",{},"본문 행 인덱스 (0부터)",[1175,1179,1180],{},"시각 위치",[1175,1182,1183],{},"줄무늬?",[1185,1186,1187,1199,1213,1223,1235],"tbody",{},[1172,1188,1189,1193,1196],{},[1190,1191,1192],"td",{},"0",[1190,1194,1195],{},"1행",[1190,1197,1198],{},"없음",[1172,1200,1201,1204,1207],{},[1190,1202,1203],{},"1",[1190,1205,1206],{},"2행",[1190,1208,1209],{},[1210,1211,1212],"strong",{},"있음",[1172,1214,1215,1218,1221],{},[1190,1216,1217],{},"2",[1190,1219,1220],{},"3행",[1190,1222,1198],{},[1172,1224,1225,1228,1231],{},[1190,1226,1227],{},"3",[1190,1229,1230],{},"4행",[1190,1232,1233],{},[1210,1234,1212],{},[1172,1236,1237,1240,1242],{},[1190,1238,1239],{},"...",[1190,1241,1239],{},[1190,1243,1239],{},[19,1245,1246],{},"Bootstrap과 동일한 패리티다. 첫 행은 깔끔하고, 줄무늬는 시각적인 \"쉼표\" 역할을 한다. 흰 행 → 옅은 색 행 → 흰 행으로 시선이 자연스럽게 흐른다.",[19,1248,1249],{},"패리티를 뒤집는 옵션(짝수 대신 홀수 행에 색)은 없다. 정 뒤집고 싶으면 본문 맨 앞에 빈 행을 넣으면 되지만, 그렇게까지 하는 사람은 보지 못했다.",[14,1251,1253],{"id":1252},"색-고르기","색 고르기",[19,1255,1256,1257,1260],{},"줄무늬의 본질은 ",[1210,1258,1259],{},"눈에 띄지 않게","다. 본문과 경쟁하는 색을 고른 순간 줄무늬는 의미를 잃는다.",[40,1262,1264],{"className":42,"code":1263,"language":44,"meta":45,"style":45},"pdf.RGBHex(0xF5F5F5) // 부드러운 따뜻한 회색. Bootstrap 기본값 근처\npdf.RGBHex(0xFAFAFA) // 더 옅게, 작은 글씨에선 거의 안 보임\npdf.RGBHex(0xEEF2FF) // 브랜드 색의 아주 옅은 변형 (헤더가 같은 계열일 때 좋음)\npdf.Gray(0.96)       // 그레이스케일. PDF/A 워크플로에서 몇 바이트 절약\n",[23,1265,1266,1283,1301,1319],{"__ignoreMap":45},[49,1267,1268,1270,1272,1274,1276,1278,1280],{"class":51,"line":52},[49,1269,91],{"class":55},[49,1271,60],{"class":59},[49,1273,96],{"class":63},[49,1275,67],{"class":59},[49,1277,102],{"class":101},[49,1279,350],{"class":59},[49,1281,1282],{"class":353}," // 부드러운 따뜻한 회색. Bootstrap 기본값 근처\n",[49,1284,1285,1287,1289,1291,1293,1296,1298],{"class":51,"line":129},[49,1286,91],{"class":55},[49,1288,60],{"class":59},[49,1290,96],{"class":63},[49,1292,67],{"class":59},[49,1294,1295],{"class":101},"0xFAFAFA",[49,1297,350],{"class":59},[49,1299,1300],{"class":353}," // 더 옅게, 작은 글씨에선 거의 안 보임\n",[49,1302,1303,1305,1307,1309,1311,1314,1316],{"class":51,"line":136},[49,1304,91],{"class":55},[49,1306,60],{"class":59},[49,1308,96],{"class":63},[49,1310,67],{"class":59},[49,1312,1313],{"class":101},"0xEEF2FF",[49,1315,350],{"class":59},[49,1317,1318],{"class":353}," // 브랜드 색의 아주 옅은 변형 (헤더가 같은 계열일 때 좋음)\n",[49,1320,1321,1323,1325,1328,1330,1333,1335],{"class":51,"line":146},[49,1322,91],{"class":55},[49,1324,60],{"class":59},[49,1326,1327],{"class":63},"Gray",[49,1329,67],{"class":59},[49,1331,1332],{"class":101},"0.96",[49,1334,350],{"class":59},[49,1336,1337],{"class":353},"       // 그레이스케일. PDF/A 워크플로에서 몇 바이트 절약\n",[19,1339,1340],{},"채도가 높은 색은 피한다. 60% 채도의 파란 줄무늬는 \"이 행이 선택됨/중요함\"으로 읽히고, 행을 가로지르는 시선 흐름을 끊어버린다. 그건 줄무늬의 목적과 정반대다.",[19,1342,1343,1344,1347,1348,1351],{},"다크 테마(슬라이드형 보고서에서 가끔 본다) ",[23,1345,1346],{},"0x1A1A1A"," 페이지엔 ",[23,1349,1350],{},"pdf.RGBHex(0x202020)"," 정도. 낮은 대비를 유지한다는 원칙은 같다.",[14,1353,1355],{"id":1354},"셀-테두리와-조합","셀 테두리와 조합",[19,1357,1358,1359,1362],{},"짧은 표라면 줄무늬만으로 충분하다. 회계 보고서처럼 밀도가 높은 표에선 ",[23,1360,1361],{},"WithTableCellBorder","로 셀 사이에 헤어라인을 깔면 깔끔해진다:",[40,1364,1366],{"className":42,"code":1365,"language":44,"meta":45,"style":45},"hairline := template.Border(\n    template.BorderWidth(document.Pt(0.5)),\n    template.BorderColor(pdf.Gray(0.85)),\n)\n\nc.Table(header, rows,\n    template.ColumnWidths(40, 20, 15, 25),\n    template.TableHeaderStyle(\n        template.TextColor(pdf.White),\n        template.BgColor(brand),\n    ),\n    template.TableStripe(pdf.RGBHex(0xF5F5F5)),\n    template.WithTableCellBorder(hairline),\n)\n",[23,1367,1368,1384,1411,1435,1439,1443,1462,1488,1498,1517,1531,1536,1558,1573],{"__ignoreMap":45},[49,1369,1370,1373,1375,1377,1379,1382],{"class":51,"line":52},[49,1371,1372],{"class":55},"hairline ",[49,1374,245],{"class":59},[49,1376,81],{"class":55},[49,1378,60],{"class":59},[49,1380,1381],{"class":63},"Border",[49,1383,256],{"class":59},[49,1385,1386,1389,1391,1394,1396,1398,1400,1403,1405,1408],{"class":51,"line":129},[49,1387,1388],{"class":55},"    template",[49,1390,60],{"class":59},[49,1392,1393],{"class":63},"BorderWidth",[49,1395,67],{"class":59},[49,1397,294],{"class":55},[49,1399,60],{"class":59},[49,1401,1402],{"class":63},"Pt",[49,1404,67],{"class":59},[49,1406,1407],{"class":101},"0.5",[49,1409,1410],{"class":59},")),\n",[49,1412,1413,1415,1417,1420,1422,1424,1426,1428,1430,1433],{"class":51,"line":136},[49,1414,1388],{"class":55},[49,1416,60],{"class":59},[49,1418,1419],{"class":63},"BorderColor",[49,1421,67],{"class":59},[49,1423,91],{"class":55},[49,1425,60],{"class":59},[49,1427,1327],{"class":63},[49,1429,67],{"class":59},[49,1431,1432],{"class":101},"0.85",[49,1434,1410],{"class":59},[49,1436,1437],{"class":51,"line":146},[49,1438,216],{"class":59},[49,1440,1441],{"class":51,"line":158},[49,1442,133],{"emptyLinePlaceholder":132},[49,1444,1445,1447,1449,1451,1453,1455,1457,1459],{"class":51,"line":168},[49,1446,56],{"class":55},[49,1448,60],{"class":59},[49,1450,64],{"class":63},[49,1452,67],{"class":59},[49,1454,70],{"class":55},[49,1456,73],{"class":59},[49,1458,76],{"class":55},[49,1460,1461],{"class":59},",\n",[49,1463,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486],{"class":51,"line":173},[49,1465,1388],{"class":55},[49,1467,60],{"class":59},[49,1469,890],{"class":63},[49,1471,67],{"class":59},[49,1473,895],{"class":101},[49,1475,73],{"class":59},[49,1477,900],{"class":101},[49,1479,73],{"class":59},[49,1481,905],{"class":101},[49,1483,73],{"class":59},[49,1485,910],{"class":101},[49,1487,279],{"class":59},[49,1489,1490,1492,1494,1496],{"class":51,"line":183},[49,1491,1388],{"class":55},[49,1493,60],{"class":59},[49,1495,922],{"class":63},[49,1497,256],{"class":59},[49,1499,1500,1503,1505,1507,1509,1511,1513,1515],{"class":51,"line":193},[49,1501,1502],{"class":55},"        template",[49,1504,60],{"class":59},[49,1506,935],{"class":63},[49,1508,67],{"class":59},[49,1510,91],{"class":55},[49,1512,60],{"class":59},[49,1514,944],{"class":55},[49,1516,279],{"class":59},[49,1518,1519,1521,1523,1525,1527,1529],{"class":51,"line":203},[49,1520,1502],{"class":55},[49,1522,60],{"class":59},[49,1524,956],{"class":63},[49,1526,67],{"class":59},[49,1528,961],{"class":55},[49,1530,279],{"class":59},[49,1532,1533],{"class":51,"line":213},[49,1534,1535],{"class":59},"    ),\n",[49,1537,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556],{"class":51,"line":219},[49,1539,1388],{"class":55},[49,1541,60],{"class":59},[49,1543,86],{"class":63},[49,1545,67],{"class":59},[49,1547,91],{"class":55},[49,1549,60],{"class":59},[49,1551,96],{"class":63},[49,1553,67],{"class":59},[49,1555,102],{"class":101},[49,1557,1410],{"class":59},[49,1559,1560,1562,1564,1566,1568,1571],{"class":51,"line":224},[49,1561,1388],{"class":55},[49,1563,60],{"class":59},[49,1565,1361],{"class":63},[49,1567,67],{"class":59},[49,1569,1570],{"class":55},"hairline",[49,1572,279],{"class":59},[49,1574,1575],{"class":51,"line":239},[49,1576,216],{"class":59},[19,1578,1579],{},"헤어라인 + 옅은 줄무늬 = 회계 부서가 출력하는 그 익숙한 양식 그대로다. 테두리 색은 줄무늬보다 더 옅게. 줄무늬가 주, 테두리는 보조라는 순서를 유지한다.",[19,1581,1582,1583,1585,1586,1589],{},"외곽선만 원한다면 ",[23,1584,1361],{}," 대신 ",[23,1587,1588],{},"WithTableBorder","를 쓴다.",[14,1591,1593],{"id":1592},"_10분-날리는-함정","10분 날리는 함정",[1595,1596,1597,1611,1623,1629],"ul",{},[1598,1599,1600,1603,1604,1607,1608,60],"li",{},[1210,1601,1602],{},"색 값의 범위 착각",". ",[23,1605,1606],{},"pdf.RGB(245, 245, 245)","는 새카만 박스가 된다. 생성자는 0–255가 아니라 0.0–1.0을 받는다. CSS 감각으로 쓰고 싶다면 ",[23,1609,1610],{},"pdf.RGBHex(0xF5F5F5)",[1598,1612,1613,1603,1616,1618,1619,1622],{},[1210,1614,1615],{},"헤더에 줄무늬를 적용하려는 시도",[23,1617,86],{},"는 헤더를 건드리지 않는다. 헤더에 색을 넣으려면 ",[23,1620,1621],{},"TableHeaderStyle(template.BgColor(...))","을 써야 한다. 둘을 헷갈려서 \"왜 헤더에 색이 안 들어가지\" 하다가 30분 보내는 게 가장 흔한 첫 실수다.",[1598,1624,1625,1628],{},[1210,1626,1627],{},"두 색을 번갈아 쓰고 싶다",". gpdf는 줄무늬 색을 하나만 받는다. white → gray → blue 3색 사이클은 없다. 만들 순 있지만 가독성에 도움이 안 돼서 안 넣었다.",[1598,1630,1631,1634],{},[1210,1632,1633],{},"3행짜리 표에 줄무늬",". 줄무늬는 본문 4–5행 이상이어야 효과가 난다. 2–3행이면 \"한 칸만 선택된 것처럼\" 보일 뿐이다. 짧은 표는 그냥 줄무늬 없이 둔다.",[14,1636,1638],{"id":1637},"관련-레시피","관련 레시피",[1595,1640,1641,1651,1658],{},[1598,1642,1643,1647,1648,1650],{},[28,1644,1646],{"href":1645},"/ko/blog/table-column-widths","표 컬럼 너비를 직접 지정하려면?"," — ",[23,1649,890],{}," 상세.",[1598,1652,1653,1657],{},[28,1654,1656],{"href":1655},"/ko/blog/add-custom-truetype-font","gpdf에 사용자 TrueType 폰트를 등록하려면?"," — 줄무늬 표를 브랜드 폰트로 렌더.",[1598,1659,1660,1664],{},[28,1661,1663],{"href":1662},"/ko/blog/invoice-pdf-go-under-50-lines","Go로 50줄 이내에 청구서 PDF 만들기"," — 헤더 스타일, 줄무늬, 합계행이 들어간 실전 표.",[14,1666,1668],{"id":1667},"gpdf-써보기","gpdf 써보기",[19,1670,1671],{},"gpdf는 Go용 PDF 생성 라이브러리. MIT 라이선스, 외부 의존성 0, 순수 Go TrueType 처리.",[40,1673,1677],{"className":1674,"code":1675,"language":1676,"meta":45,"style":45},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[23,1678,1679],{"__ignoreMap":45},[49,1680,1681,1683,1686],{"class":51,"line":52},[49,1682,44],{"class":125},[49,1684,1685],{"class":489}," get",[49,1687,1688],{"class":489}," github.com/gpdf-dev/gpdf\n",[19,1690,1691,1695,1696],{},[28,1692,1694],{"href":30,"rel":1693},[32],"⭐ GitHub에서 Star"," · ",[28,1697,1700],{"href":1698,"rel":1699},"https://gpdf.dev/ko/docs/quickstart",[32],"문서 보기",[1702,1703,1704],"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .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 .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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":45,"searchDepth":129,"depth":129,"links":1706},[1707,1708,1709,1710,1711,1712,1713,1714,1715],{"id":16,"depth":129,"text":17},{"id":37,"depth":129,"text":38},{"id":111,"depth":129,"text":112},{"id":1152,"depth":129,"text":1153},{"id":1252,"depth":129,"text":1253},{"id":1354,"depth":129,"text":1355},{"id":1592,"depth":129,"text":1593},{"id":1637,"depth":129,"text":1638},{"id":1667,"depth":129,"text":1668},"2026-05-04","template.TableStripe만 넘기면 된다. gpdf가 본문 행에 한 줄 걸러 배경색을 칠한다. 행 루프도, 셀별 스타일 지정도 필요 없다.",false,"md",{"name":1721,"totalTime":1722,"tools":1723,"steps":1725},"gpdf 표에 얼룩말 줄무늬 적용하기","PT5M",[1724,178],"Go 1.22+",[1726,1729,1732],{"name":1727,"text":1728},"줄무늬 색을 정한다","pdf.RGBHex(0xF5F5F5)로 부드러운 회색을 쓰거나, pdf.RGB(r, g, b)에 0.0–1.0 범위 값을 넘긴다. 본문이 읽히는 한도 내에서 최대한 옅게.",{"name":1730,"text":1731},"Table 호출에 template.TableStripe를 전달한다","컬럼 안에서 c.Table(header, rows, template.TableStripe(stripeColor))로 호출하면 gpdf가 본문 행을 한 줄씩 걸러 색을 칠한다.",{"name":1733,"text":1734},"TableHeaderStyle와 함께 써서 대비를 만든다","template.TableHeaderStyle(template.TextColor(pdf.White), template.BgColor(brand))을 같이 쓰면 헤더가 시각적으로 분리되고 줄무늬가 살아난다.",null,{},"/ko/blog/zebra-striped-table-rows",{"title":5,"description":1717},"ko/blog/019.zebra-striped-table-rows",[1741,1742,1743],"recipe","tutorial","templates","xMYuqAiJ7jGebjFS5QTetTeWkLbJFJG3sHxwJiQX0Ww",1779199026792]