[{"data":1,"prerenderedAt":1422},["ShallowReactive",2],{"blog-zh-table-column-widths":3},{"id":4,"title":5,"author":6,"body":10,"date":1391,"description":1392,"draft":1393,"extension":1394,"howTo":1395,"image":1413,"meta":1414,"navigation":154,"path":1415,"seo":1416,"stem":1417,"tags":1418,"updated":1413,"__hash__":1421},"blogZh/zh/blog/014.table-column-widths.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":1380},"minimark",[13,17,35,38,49,121,128,131,135,887,897,901,912,927,933,937,940,954,957,967,1020,1027,1080,1091,1095,1102,1108,1111,1114,1285,1306,1313,1316,1338,1342,1345,1362,1376],[14,15,16],"h2",{"id":16},"换个说法的问题",[18,19,20,21,25,26,30,31,34],"p",{},"我有一个四列的表格。默认 ",[22,23,24],"code",{},"c.Table(header, rows)"," 会把所有列做成等宽，但发票里 ",[27,28,29],"strong",{},"品名"," 列应该宽，",[27,32,33],{},"数量"," 列应该窄。要怎么告诉 gpdf 每列的宽度？我设置的到底是什么单位？",[14,36,37],{"id":37},"一句话回答",[18,39,40,41,44,45,48],{},"把 ",[22,42,43],{},"template.ColumnWidths(...)"," 作为 ",[22,46,47],{},"TableOption"," 传入：",[50,51,56],"pre",{"className":52,"code":53,"language":54,"meta":55,"style":55},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","c.Table(header, rows, template.ColumnWidths(40, 15, 20, 25))\n","go","",[22,57,58],{"__ignoreMap":55},[59,60,63,67,71,75,78,81,84,87,89,92,94,97,99,103,105,108,110,113,115,118],"span",{"class":61,"line":62},"line",1,[59,64,66],{"class":65},"sTEyZ","c",[59,68,70],{"class":69},"sMK4o",".",[59,72,74],{"class":73},"s2Zo4","Table",[59,76,77],{"class":69},"(",[59,79,80],{"class":65},"header",[59,82,83],{"class":69},",",[59,85,86],{"class":65}," rows",[59,88,83],{"class":69},[59,90,91],{"class":65}," template",[59,93,70],{"class":69},[59,95,96],{"class":73},"ColumnWidths",[59,98,77],{"class":69},[59,100,102],{"class":101},"sbssI","40",[59,104,83],{"class":69},[59,106,107],{"class":101}," 15",[59,109,83],{"class":69},[59,111,112],{"class":101}," 20",[59,114,83],{"class":69},[59,116,117],{"class":101}," 25",[59,119,120],{"class":69},"))\n",[18,122,123,124,127],{},"值是 ",[27,125,126],{},"父 Col 内容宽度的百分比","，不是磅。合计不必是 100，但通常应该是——少了右边会留白，多了会从单元格溢出。",[18,129,130],{},"常规情况就这样。有意思的是百分比合计不到 100、传入的值少于列数、以及\"父宽度\"到底指什么。",[14,132,134],{"id":133},"可运行的代码四列发票表格","可运行的代码（四列发票表格）",[50,136,138],{"className":52,"code":137,"language":54,"meta":55,"style":55},"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    header := []string{\"品名\", \"数量\", \"单价\", \"金额\"}\n    rows := [][]string{\n        {\"年度支持合同\", \"1\", \"¥1,200.00\", \"¥1,200.00\"},\n        {\"现场培训（每天）\", \"3\", \"¥800.00\", \"¥2,400.00\"},\n        {\"自定义模板开发\", \"12\", \"¥95.00\", \"¥1,140.00\"},\n    }\n\n    page := doc.AddPage()\n    page.AutoRow(func(r *template.RowBuilder) {\n        r.Col(12, func(c *template.ColBuilder) {\n            c.Table(header, rows,\n                template.ColumnWidths(40, 15, 20, 25),\n                template.TableHeaderStyle(template.BgColor(pdf.Gray(0.92))),\n            )\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",[22,139,140,149,156,166,178,188,193,203,213,223,233,239,244,259,279,303,340,346,351,407,423,465,506,547,553,558,577,611,646,667,695,731,737,743,749,754,776,792,810,815,862,877,882],{"__ignoreMap":55},[59,141,142,145],{"class":61,"line":62},[59,143,144],{"class":69},"package",[59,146,148],{"class":147},"sBMFI"," main\n",[59,150,152],{"class":61,"line":151},2,[59,153,155],{"emptyLinePlaceholder":154},true,"\n",[59,157,159,163],{"class":61,"line":158},3,[59,160,162],{"class":161},"s7zQu","import",[59,164,165],{"class":69}," (\n",[59,167,169,172,175],{"class":61,"line":168},4,[59,170,171],{"class":69},"    \"",[59,173,174],{"class":147},"log",[59,176,177],{"class":69},"\"\n",[59,179,181,183,186],{"class":61,"line":180},5,[59,182,171],{"class":69},[59,184,185],{"class":147},"os",[59,187,177],{"class":69},[59,189,191],{"class":61,"line":190},6,[59,192,155],{"emptyLinePlaceholder":154},[59,194,196,198,201],{"class":61,"line":195},7,[59,197,171],{"class":69},[59,199,200],{"class":147},"github.com/gpdf-dev/gpdf",[59,202,177],{"class":69},[59,204,206,208,211],{"class":61,"line":205},8,[59,207,171],{"class":69},[59,209,210],{"class":147},"github.com/gpdf-dev/gpdf/document",[59,212,177],{"class":69},[59,214,216,218,221],{"class":61,"line":215},9,[59,217,171],{"class":69},[59,219,220],{"class":147},"github.com/gpdf-dev/gpdf/pdf",[59,222,177],{"class":69},[59,224,226,228,231],{"class":61,"line":225},10,[59,227,171],{"class":69},[59,229,230],{"class":147},"github.com/gpdf-dev/gpdf/template",[59,232,177],{"class":69},[59,234,236],{"class":61,"line":235},11,[59,237,238],{"class":69},")\n",[59,240,242],{"class":61,"line":241},12,[59,243,155],{"emptyLinePlaceholder":154},[59,245,247,250,253,256],{"class":61,"line":246},13,[59,248,249],{"class":69},"func",[59,251,252],{"class":73}," main",[59,254,255],{"class":69},"()",[59,257,258],{"class":69}," {\n",[59,260,262,265,268,271,273,276],{"class":61,"line":261},14,[59,263,264],{"class":65},"    doc ",[59,266,267],{"class":69},":=",[59,269,270],{"class":65}," gpdf",[59,272,70],{"class":69},[59,274,275],{"class":73},"NewDocument",[59,277,278],{"class":69},"(\n",[59,280,282,285,287,290,292,295,297,300],{"class":61,"line":281},15,[59,283,284],{"class":65},"        gpdf",[59,286,70],{"class":69},[59,288,289],{"class":73},"WithPageSize",[59,291,77],{"class":69},[59,293,294],{"class":65},"gpdf",[59,296,70],{"class":69},[59,298,299],{"class":65},"A4",[59,301,302],{"class":69},"),\n",[59,304,306,308,310,313,315,318,320,323,325,327,329,332,334,337],{"class":61,"line":305},16,[59,307,284],{"class":65},[59,309,70],{"class":69},[59,311,312],{"class":73},"WithMargins",[59,314,77],{"class":69},[59,316,317],{"class":65},"document",[59,319,70],{"class":69},[59,321,322],{"class":73},"UniformEdges",[59,324,77],{"class":69},[59,326,317],{"class":65},[59,328,70],{"class":69},[59,330,331],{"class":73},"Mm",[59,333,77],{"class":69},[59,335,336],{"class":101},"20",[59,338,339],{"class":69},"))),\n",[59,341,343],{"class":61,"line":342},17,[59,344,345],{"class":69},"    )\n",[59,347,349],{"class":61,"line":348},18,[59,350,155],{"emptyLinePlaceholder":154},[59,352,354,357,359,362,366,369,372,375,377,379,382,384,386,388,390,393,395,397,399,402,404],{"class":61,"line":353},19,[59,355,356],{"class":65},"    header ",[59,358,267],{"class":69},[59,360,361],{"class":69}," []",[59,363,365],{"class":364},"spNyl","string",[59,367,368],{"class":69},"{",[59,370,371],{"class":69},"\"",[59,373,29],{"class":374},"sfazB",[59,376,371],{"class":69},[59,378,83],{"class":69},[59,380,381],{"class":69}," \"",[59,383,33],{"class":374},[59,385,371],{"class":69},[59,387,83],{"class":69},[59,389,381],{"class":69},[59,391,392],{"class":374},"单价",[59,394,371],{"class":69},[59,396,83],{"class":69},[59,398,381],{"class":69},[59,400,401],{"class":374},"金额",[59,403,371],{"class":69},[59,405,406],{"class":69},"}\n",[59,408,410,413,415,418,420],{"class":61,"line":409},20,[59,411,412],{"class":65},"    rows ",[59,414,267],{"class":69},[59,416,417],{"class":69}," [][]",[59,419,365],{"class":364},[59,421,422],{"class":69},"{\n",[59,424,426,429,431,434,436,438,440,443,445,447,449,452,454,456,458,460,462],{"class":61,"line":425},21,[59,427,428],{"class":69},"        {",[59,430,371],{"class":69},[59,432,433],{"class":374},"年度支持合同",[59,435,371],{"class":69},[59,437,83],{"class":69},[59,439,381],{"class":69},[59,441,442],{"class":374},"1",[59,444,371],{"class":69},[59,446,83],{"class":69},[59,448,381],{"class":69},[59,450,451],{"class":374},"¥1,200.00",[59,453,371],{"class":69},[59,455,83],{"class":69},[59,457,381],{"class":69},[59,459,451],{"class":374},[59,461,371],{"class":69},[59,463,464],{"class":69},"},\n",[59,466,468,470,472,475,477,479,481,484,486,488,490,493,495,497,499,502,504],{"class":61,"line":467},22,[59,469,428],{"class":69},[59,471,371],{"class":69},[59,473,474],{"class":374},"现场培训（每天）",[59,476,371],{"class":69},[59,478,83],{"class":69},[59,480,381],{"class":69},[59,482,483],{"class":374},"3",[59,485,371],{"class":69},[59,487,83],{"class":69},[59,489,381],{"class":69},[59,491,492],{"class":374},"¥800.00",[59,494,371],{"class":69},[59,496,83],{"class":69},[59,498,381],{"class":69},[59,500,501],{"class":374},"¥2,400.00",[59,503,371],{"class":69},[59,505,464],{"class":69},[59,507,509,511,513,516,518,520,522,525,527,529,531,534,536,538,540,543,545],{"class":61,"line":508},23,[59,510,428],{"class":69},[59,512,371],{"class":69},[59,514,515],{"class":374},"自定义模板开发",[59,517,371],{"class":69},[59,519,83],{"class":69},[59,521,381],{"class":69},[59,523,524],{"class":374},"12",[59,526,371],{"class":69},[59,528,83],{"class":69},[59,530,381],{"class":69},[59,532,533],{"class":374},"¥95.00",[59,535,371],{"class":69},[59,537,83],{"class":69},[59,539,381],{"class":69},[59,541,542],{"class":374},"¥1,140.00",[59,544,371],{"class":69},[59,546,464],{"class":69},[59,548,550],{"class":61,"line":549},24,[59,551,552],{"class":69},"    }\n",[59,554,556],{"class":61,"line":555},25,[59,557,155],{"emptyLinePlaceholder":154},[59,559,561,564,566,569,571,574],{"class":61,"line":560},26,[59,562,563],{"class":65},"    page ",[59,565,267],{"class":69},[59,567,568],{"class":65}," doc",[59,570,70],{"class":69},[59,572,573],{"class":73},"AddPage",[59,575,576],{"class":69},"()\n",[59,578,580,583,585,588,591,595,598,601,603,606,609],{"class":61,"line":579},27,[59,581,582],{"class":65},"    page",[59,584,70],{"class":69},[59,586,587],{"class":73},"AutoRow",[59,589,590],{"class":69},"(func(",[59,592,594],{"class":593},"sHdIc","r",[59,596,597],{"class":69}," *",[59,599,600],{"class":147},"template",[59,602,70],{"class":69},[59,604,605],{"class":147},"RowBuilder",[59,607,608],{"class":69},")",[59,610,258],{"class":69},[59,612,614,617,619,622,624,626,628,631,633,635,637,639,642,644],{"class":61,"line":613},28,[59,615,616],{"class":65},"        r",[59,618,70],{"class":69},[59,620,621],{"class":73},"Col",[59,623,77],{"class":69},[59,625,524],{"class":101},[59,627,83],{"class":69},[59,629,630],{"class":69}," func(",[59,632,66],{"class":593},[59,634,597],{"class":69},[59,636,600],{"class":147},[59,638,70],{"class":69},[59,640,641],{"class":147},"ColBuilder",[59,643,608],{"class":69},[59,645,258],{"class":69},[59,647,649,652,654,656,658,660,662,664],{"class":61,"line":648},29,[59,650,651],{"class":65},"            c",[59,653,70],{"class":69},[59,655,74],{"class":73},[59,657,77],{"class":69},[59,659,80],{"class":65},[59,661,83],{"class":69},[59,663,86],{"class":65},[59,665,666],{"class":69},",\n",[59,668,670,673,675,677,679,681,683,685,687,689,691,693],{"class":61,"line":669},30,[59,671,672],{"class":65},"                template",[59,674,70],{"class":69},[59,676,96],{"class":73},[59,678,77],{"class":69},[59,680,102],{"class":101},[59,682,83],{"class":69},[59,684,107],{"class":101},[59,686,83],{"class":69},[59,688,112],{"class":101},[59,690,83],{"class":69},[59,692,117],{"class":101},[59,694,302],{"class":69},[59,696,698,700,702,705,707,709,711,714,716,719,721,724,726,729],{"class":61,"line":697},31,[59,699,672],{"class":65},[59,701,70],{"class":69},[59,703,704],{"class":73},"TableHeaderStyle",[59,706,77],{"class":69},[59,708,600],{"class":65},[59,710,70],{"class":69},[59,712,713],{"class":73},"BgColor",[59,715,77],{"class":69},[59,717,718],{"class":65},"pdf",[59,720,70],{"class":69},[59,722,723],{"class":73},"Gray",[59,725,77],{"class":69},[59,727,728],{"class":101},"0.92",[59,730,339],{"class":69},[59,732,734],{"class":61,"line":733},32,[59,735,736],{"class":69},"            )\n",[59,738,740],{"class":61,"line":739},33,[59,741,742],{"class":69},"        })\n",[59,744,746],{"class":61,"line":745},34,[59,747,748],{"class":69},"    })\n",[59,750,752],{"class":61,"line":751},35,[59,753,155],{"emptyLinePlaceholder":154},[59,755,757,760,762,765,767,769,771,774],{"class":61,"line":756},36,[59,758,759],{"class":65},"    data",[59,761,83],{"class":69},[59,763,764],{"class":65}," err ",[59,766,267],{"class":69},[59,768,568],{"class":65},[59,770,70],{"class":69},[59,772,773],{"class":73},"Generate",[59,775,576],{"class":69},[59,777,779,782,784,787,790],{"class":61,"line":778},37,[59,780,781],{"class":161},"    if",[59,783,764],{"class":65},[59,785,786],{"class":69},"!=",[59,788,789],{"class":69}," nil",[59,791,258],{"class":69},[59,793,795,798,800,803,805,808],{"class":61,"line":794},38,[59,796,797],{"class":65},"        log",[59,799,70],{"class":69},[59,801,802],{"class":73},"Fatal",[59,804,77],{"class":69},[59,806,807],{"class":65},"err",[59,809,238],{"class":69},[59,811,813],{"class":61,"line":812},39,[59,814,552],{"class":69},[59,816,818,820,822,824,827,829,832,834,836,839,841,843,846,848,851,854,856,858,860],{"class":61,"line":817},40,[59,819,781],{"class":161},[59,821,764],{"class":65},[59,823,267],{"class":69},[59,825,826],{"class":65}," os",[59,828,70],{"class":69},[59,830,831],{"class":73},"WriteFile",[59,833,77],{"class":69},[59,835,371],{"class":69},[59,837,838],{"class":374},"invoice.pdf",[59,840,371],{"class":69},[59,842,83],{"class":69},[59,844,845],{"class":65}," data",[59,847,83],{"class":69},[59,849,850],{"class":101}," 0o644",[59,852,853],{"class":69},");",[59,855,764],{"class":65},[59,857,786],{"class":69},[59,859,789],{"class":69},[59,861,258],{"class":69},[59,863,865,867,869,871,873,875],{"class":61,"line":864},41,[59,866,797],{"class":65},[59,868,70],{"class":69},[59,870,802],{"class":73},[59,872,77],{"class":69},[59,874,807],{"class":65},[59,876,238],{"class":69},[59,878,880],{"class":61,"line":879},42,[59,881,552],{"class":69},[59,883,885],{"class":61,"line":884},43,[59,886,406],{"class":69},[18,888,889,892,893,896],{},[22,890,891],{},"r.Col(12, ...)"," 占满整行宽度。表格放在这个 Col 里，所以表格的 100% = grid Col 内容区的 100%。",[22,894,895],{},"ColumnWidths(40, 15, 20, 25)"," 合计为 100，每一磅水平空间都被用满。",[14,898,900],{"id":899},"百分比是相对于什么的百分比","百分比是相对于\"什么\"的百分比",[18,902,903,904,907,908,911],{},"传入的数值会被包装成 ",[22,905,906],{},"document.Pct(w)","，对照 ",[27,909,910],{},"表格的内容宽度"," 来解析。表格内容宽度 = 所在 grid Col 的宽度 - 表格自身的 margin / padding / border（实际就是 Col 宽度——表格默认没有装饰）。",[18,913,914,915,918,919,922,923,926],{},"所以如果用 ",[22,916,917],{},"r.Col(6, ...)","（半行）配 ",[22,920,921],{},"ColumnWidths(50, 50)","，每列实际是 ",[27,924,925],{},"行宽的 25%","，不是 50%。百分比是相对于表格的，不是相对于页面的。",[18,928,929,930,932],{},"布局变更时这点很有用。把表格从全宽改成两个并排，",[22,931,96],{}," 不用改——会自动缩放。",[14,934,936],{"id":935},"数学不对劲时-gpdf-会怎么做","数学不对劲时 gpdf 会怎么做",[18,938,939],{},"实际写代码时常见两种情况，布局引擎对它们的处理是确定的，值得了解。",[18,941,942,945,946,949,950,953],{},[27,943,944],{},"情况 1：百分比合计不到 100。"," 每个值按字面使用。三列表格用 ",[22,947,948],{},"ColumnWidths(40, 30, 20)"," 得到 40% / 30% / 20%，右边留白 10%。",[22,951,952],{},"ColumnWidths(50, 50, 50)"," 会溢出——第三列伸出父容器右边，可能挤进相邻列或跑出页面。",[18,955,956],{},"不会做归一化。算术由你负责。",[18,958,959,962,963,966],{},[27,960,961],{},"情况 2：传入的值少于列数。"," 这一种更有意思。没有显式值的尾部列会变成 ",[27,964,965],{},"auto-width","，平分剩余宽度：",[50,968,970],{"className":52,"code":969,"language":54,"meta":55,"style":55},"// 三列表格，只给两个宽度。\nc.Table(header3, rows3, template.ColumnWidths(40, 30))\n// → 40% / 30% / 30%   (第三列拿到 100 - 40 - 30 = 30%)\n",[22,971,972,978,1015],{"__ignoreMap":55},[59,973,974],{"class":61,"line":62},[59,975,977],{"class":976},"sHwdD","// 三列表格，只给两个宽度。\n",[59,979,980,982,984,986,988,991,993,996,998,1000,1002,1004,1006,1008,1010,1013],{"class":61,"line":151},[59,981,66],{"class":65},[59,983,70],{"class":69},[59,985,74],{"class":73},[59,987,77],{"class":69},[59,989,990],{"class":65},"header3",[59,992,83],{"class":69},[59,994,995],{"class":65}," rows3",[59,997,83],{"class":69},[59,999,91],{"class":65},[59,1001,70],{"class":69},[59,1003,96],{"class":73},[59,1005,77],{"class":69},[59,1007,102],{"class":101},[59,1009,83],{"class":69},[59,1011,1012],{"class":101}," 30",[59,1014,120],{"class":69},[59,1016,1017],{"class":61,"line":158},[59,1018,1019],{"class":976},"// → 40% / 30% / 30%   (第三列拿到 100 - 40 - 30 = 30%)\n",[18,1021,1022,1023,1026],{},"如果显式值合计已经达到 100 或更多，auto 列会得到 ",[27,1024,1025],{},"0 宽","，等于消失。如果合计不到 100，剩余按 auto 列的数量均分：",[50,1028,1030],{"className":52,"code":1029,"language":54,"meta":55,"style":55},"// 五列表格，给两个宽度。\nc.Table(header5, rows5, template.ColumnWidths(50, 10))\n// → 50% / 10% / 13.33% / 13.33% / 13.33%   (40% 三等分)\n",[22,1031,1032,1037,1075],{"__ignoreMap":55},[59,1033,1034],{"class":61,"line":62},[59,1035,1036],{"class":976},"// 五列表格，给两个宽度。\n",[59,1038,1039,1041,1043,1045,1047,1050,1052,1055,1057,1059,1061,1063,1065,1068,1070,1073],{"class":61,"line":151},[59,1040,66],{"class":65},[59,1042,70],{"class":69},[59,1044,74],{"class":73},[59,1046,77],{"class":69},[59,1048,1049],{"class":65},"header5",[59,1051,83],{"class":69},[59,1053,1054],{"class":65}," rows5",[59,1056,83],{"class":69},[59,1058,91],{"class":65},[59,1060,70],{"class":69},[59,1062,96],{"class":73},[59,1064,77],{"class":69},[59,1066,1067],{"class":101},"50",[59,1069,83],{"class":69},[59,1071,1072],{"class":101}," 10",[59,1074,120],{"class":69},[59,1076,1077],{"class":61,"line":158},[59,1078,1079],{"class":976},"// → 50% / 10% / 13.33% / 13.33% / 13.33%   (40% 三等分)\n",[18,1081,1082,1083,1086,1087,1090],{},"这条规则里藏着一个小技巧：传 ",[22,1084,1085],{},"0"," 也会让列变成 auto。三列表格写 ",[22,1088,1089],{},"ColumnWidths(0, 30, 30)"," 把后两列固定为 30%，第一列拿剩下的 40%。当你想说\"这几列我要精确控制，其余交给你\"时很合用。",[14,1092,1094],{"id":1093},"反方向值多于列数","反方向：值多于列数",[18,1096,1097,1098,1101],{},"超出列数的值会被默默忽略。两列表格传 ",[22,1099,1100],{},"ColumnWidths(40, 30, 20, 10)","，只用前两个。这种宽容也是 bug 温床——你从表头删掉一列但忘了删对应的宽度值，gpdf 不会警告，也不打日志。",[18,1103,1104,1105,1107],{},"列数本身从表头行的长度推断（没有表头则用第一条 body 行）。加一个表头单元格就多一列，gpdf 会发现并对你传的 ",[22,1106,96],{}," 重新分配。",[14,1109,1110],{"id":1110},"如果不想用百分比",[18,1112,1113],{},"构建器 API 只暴露百分比。如果你确实需要固定宽度的列——比如不随页面变化的 50pt \"数量\"列——就要降到下一层（document 树）：",[50,1115,1117],{"className":52,"code":1116,"language":54,"meta":55,"style":55},"import \"github.com/gpdf-dev/gpdf/document\"\n\ntbl := &document.Table{\n    Columns: []document.TableColumn{\n        {Width: document.Auto},\n        {Width: document.Pt(50)},\n        {Width: document.Pt(80)},\n        {Width: document.Pt(80)},\n    },\n    Header: /* ... */,\n    Body:   /* ... */,\n}\n",[22,1118,1119,1129,1133,1151,1170,1189,1211,1232,1252,1257,1269,1281],{"__ignoreMap":55},[59,1120,1121,1123,1125,1127],{"class":61,"line":62},[59,1122,162],{"class":161},[59,1124,381],{"class":69},[59,1126,210],{"class":147},[59,1128,177],{"class":69},[59,1130,1131],{"class":61,"line":151},[59,1132,155],{"emptyLinePlaceholder":154},[59,1134,1135,1138,1140,1143,1145,1147,1149],{"class":61,"line":158},[59,1136,1137],{"class":65},"tbl ",[59,1139,267],{"class":69},[59,1141,1142],{"class":69}," &",[59,1144,317],{"class":147},[59,1146,70],{"class":69},[59,1148,74],{"class":147},[59,1150,422],{"class":69},[59,1152,1153,1156,1159,1161,1163,1165,1168],{"class":61,"line":168},[59,1154,1155],{"class":65},"    Columns",[59,1157,1158],{"class":69},":",[59,1160,361],{"class":69},[59,1162,317],{"class":147},[59,1164,70],{"class":69},[59,1166,1167],{"class":147},"TableColumn",[59,1169,422],{"class":69},[59,1171,1172,1174,1177,1179,1182,1184,1187],{"class":61,"line":180},[59,1173,428],{"class":69},[59,1175,1176],{"class":65},"Width",[59,1178,1158],{"class":69},[59,1180,1181],{"class":65}," document",[59,1183,70],{"class":69},[59,1185,1186],{"class":65},"Auto",[59,1188,464],{"class":69},[59,1190,1191,1193,1195,1197,1199,1201,1204,1206,1208],{"class":61,"line":190},[59,1192,428],{"class":69},[59,1194,1176],{"class":65},[59,1196,1158],{"class":69},[59,1198,1181],{"class":65},[59,1200,70],{"class":69},[59,1202,1203],{"class":73},"Pt",[59,1205,77],{"class":69},[59,1207,1067],{"class":101},[59,1209,1210],{"class":69},")},\n",[59,1212,1213,1215,1217,1219,1221,1223,1225,1227,1230],{"class":61,"line":195},[59,1214,428],{"class":69},[59,1216,1176],{"class":65},[59,1218,1158],{"class":69},[59,1220,1181],{"class":65},[59,1222,70],{"class":69},[59,1224,1203],{"class":73},[59,1226,77],{"class":69},[59,1228,1229],{"class":101},"80",[59,1231,1210],{"class":69},[59,1233,1234,1236,1238,1240,1242,1244,1246,1248,1250],{"class":61,"line":205},[59,1235,428],{"class":69},[59,1237,1176],{"class":65},[59,1239,1158],{"class":69},[59,1241,1181],{"class":65},[59,1243,70],{"class":69},[59,1245,1203],{"class":73},[59,1247,77],{"class":69},[59,1249,1229],{"class":101},[59,1251,1210],{"class":69},[59,1253,1254],{"class":61,"line":215},[59,1255,1256],{"class":69},"    },\n",[59,1258,1259,1262,1264,1267],{"class":61,"line":225},[59,1260,1261],{"class":65},"    Header",[59,1263,1158],{"class":69},[59,1265,1266],{"class":976}," /* ... */",[59,1268,666],{"class":69},[59,1270,1271,1274,1276,1279],{"class":61,"line":235},[59,1272,1273],{"class":65},"    Body",[59,1275,1158],{"class":69},[59,1277,1278],{"class":976},"   /* ... */",[59,1280,666],{"class":69},[59,1282,1283],{"class":61,"line":241},[59,1284,406],{"class":69},[18,1286,1287,1288,1290,1291,1290,1293,1290,1295,1298,1299,1301,1302,1305],{},"可以混用：document 层的 ",[22,1289,1186],{}," / ",[22,1292,1203],{},[22,1294,331],{},[22,1296,1297],{},"Pct"," 都支持。第一列设为 ",[22,1300,1186],{}," 时拿走三列固定宽度之后剩下的部分。这更接近 CSS 的 ",[22,1303,1304],{},"\u003Ccol>"," 元素，而不是百分比体系。",[18,1307,1308,1309,1312],{},"代价是失去 ",[22,1310,1311],{},"c.Table(header, rows, ...)"," 自动构建单元格的便利，但对那种要在实体信纸抬头上打印、要求列位置稳定的发票，这个权衡值得。",[14,1314,1315],{"id":1315},"相关菜谱",[1317,1318,1319,1328],"ul",{},[1320,1321,1322,1327],"li",{},[1323,1324,1326],"a",{"href":1325},"/zh/blog/12-column-grid","gpdf 中的 12 列网格如何工作？"," ——行的 12 列如何成为表格百分比所基于的\"父宽度\"",[1320,1329,1330,1334,1335,1337],{},[1323,1331,1333],{"href":1332},"/zh/blog/invoice-pdf-go-under-50-lines","50 行以内用 Go 生成发票 PDF"," ——",[22,1336,895],{}," 在完整发票文档中的使用",[14,1339,1341],{"id":1340},"试用-gpdf","试用 gpdf",[18,1343,1344],{},"gpdf 是用于生成 PDF 的 Go 库。MIT 许可，零外部依赖，原生支持 CJK。",[50,1346,1350],{"className":1347,"code":1348,"language":1349,"meta":55,"style":55},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com/gpdf-dev/gpdf\n","bash",[22,1351,1352],{"__ignoreMap":55},[59,1353,1354,1356,1359],{"class":61,"line":62},[59,1355,54],{"class":147},[59,1357,1358],{"class":374}," get",[59,1360,1361],{"class":374}," github.com/gpdf-dev/gpdf\n",[18,1363,1364,1370,1371],{},[1323,1365,1369],{"href":1366,"rel":1367},"https://github.com/gpdf-dev/gpdf",[1368],"nofollow","⭐ Star on GitHub"," · ",[1323,1372,1375],{"href":1373,"rel":1374},"https://gpdf.dev/zh/docs/quickstart",[1368],"阅读文档",[1377,1378,1379],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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}",{"title":55,"searchDepth":151,"depth":151,"links":1381},[1382,1383,1384,1385,1386,1387,1388,1389,1390],{"id":16,"depth":151,"text":16},{"id":37,"depth":151,"text":37},{"id":133,"depth":151,"text":134},{"id":899,"depth":151,"text":900},{"id":935,"depth":151,"text":936},{"id":1093,"depth":151,"text":1094},{"id":1110,"depth":151,"text":1110},{"id":1315,"depth":151,"text":1315},{"id":1340,"depth":151,"text":1341},"2026-04-28","在 c.Table 中传入 template.ColumnWidths(...)。值是相对于父 Col 宽度的百分比。合计 100 占满全宽，未传完的尾部列会自动均分剩余空间。",false,"md",{"name":1396,"totalTime":1397,"tools":1398,"steps":1400},"为 gpdf 构建的表格设置每列的宽度","PT10M",[1399],"Go 1.22+",[1401,1404,1407,1410],{"name":1402,"text":1403},"先不传 ColumnWidths 确认列数","调用 c.Table(header, rows)。不传 ColumnWidths 选项时，gpdf 会从表头推断列数，并把父 Col 宽度等分给所有列。",{"name":1405,"text":1406},"传入合计为 100 的百分比 ColumnWidths","在 c.Table 第三个参数加上 template.ColumnWidths(40, 15, 20, 25)。每个值是表格父宽度（即所在 grid Col 的宽度）的百分比。",{"name":1408,"text":1409},"用 0 把某列标记为自动分配","三列表格写 ColumnWidths(0, 30, 30) 时，后两列固定为 30%，剩余 40% 分给第一列。",{"name":1411,"text":1412},"传入比列数少的值，让尾部列均分剩余宽度","三列表格传 ColumnWidths(40, 30) 会得到 40 / 30 / 30 ——第三列没有显式值，自动拿到剩下的 30%。",null,{},"/zh/blog/table-column-widths",{"title":5,"description":1392},"zh/blog/014.table-column-widths",[1419,1420],"recipe","tutorial","Eqy0eJgRlcNHHatdWpfp4eKsaR1hM1q52WhOlrCY-S4",1779199017837]