MigraDoc表格单元格图片问题:重叠单元格与整行拉伸
解决MigraDoc表格中图片重叠单元格与拉伸整行的问题
我之前在MigraDoc里处理表格图片时也碰到过一模一样的问题,这俩坑其实都是因为默认的布局规则没适配你的需求,给你几个针对性的解决办法:
一、解决图片重叠其他单元格的问题
图片重叠大概率是因为没有限制图片在单元格内的布局,或者单元格没有开启内容约束。你可以试试这两个操作:
给单元格设置内边距(Padding)
给图片所在的单元格加上内边距,避免图片紧贴边框,同时让单元格有足够空间容纳图片:// 给图片所在的单元格设置内边距 row[1].Format.LeftPadding = 5; row[1].Format.RightPadding = 5; row[1].Format.TopPadding = 5; row[1].Format.BottomPadding = 5;设置图片的WrapFormat为紧密环绕
强制图片在单元格内约束布局,不会溢出到其他单元格:Image image = row[1].AddImage("C:\\sample.jpg"); image.Width = "3cm"; // 限制图片在单元格内环绕显示 image.WrapFormat.Style = WrapStyle.Tight; image.WrapFormat.DistanceLeft = 0; image.WrapFormat.DistanceRight = 0;
二、解决图片拉伸整行的问题
默认情况下,MigraDoc会自动把行高调整到适应图片高度,导致整行被拉长。你可以通过两种方式控制行高:
手动固定行高
如果不需要行高自适应,直接给行设置固定高度,同时让图片在单元格内居中显示:row = table.AddRow(); // 设置行的固定高度 row.Height = "2cm"; row.HeightRule = RowHeightRule.Exactly; row[0].AddParagraph("title"); Image image = row[1].AddImage("C:\\sample.jpg"); image.Width = "3cm"; // 让图片在单元格内垂直居中 image.RelativeVertical = RelativeVertical.Center; image.WrapFormat.Style = WrapStyle.Tight;让行高自适应但限制最大高度
如果你希望行高能适应内容但不被拉得太长,可以设置行的最大高度,同时让图片自动缩放适配:row = table.AddRow(); // 设置行高自适应,但最大不超过2cm row.Height = "2cm"; row.HeightRule = RowHeightRule.AtMost; Image image = row[1].AddImage("C:\\sample.jpg"); image.Width = "3cm"; image.LockAspectRatio = true; // 保持图片比例,避免变形 image.RelativeVertical = RelativeVertical.Center; image.WrapFormat.Style = WrapStyle.Tight;
整合后的完整代码示例
把上面的修改整合到你的代码里,大概是这样:
Table table = sec.AddTable(); table.Borders.Width = 0.1; // only for visualization // 添加列 Column column = table.AddColumn("6cm"); column = table.AddColumn("7.5cm"); column = table.AddColumn("2.5cm"); // 第一行(带图片的行) Row row = table.AddRow(); // 设置行高为固定值,避免被图片拉伸 row.Height = "2cm"; row.HeightRule = RowHeightRule.Exactly; // 第一个单元格 row[0].AddParagraph("title"); // 第二个单元格(图片所在) row[1].Format.LeftPadding = 5; row[1].Format.RightPadding = 5; row[1].Format.TopPadding = 5; row[1].Format.BottomPadding = 5; Image image = row[1].AddImage("C:\\sample.jpg"); image.Width = "3cm"; image.LockAspectRatio = true; // 保持图片比例,避免拉伸变形 image.RelativeVertical = RelativeVertical.Center; image.WrapFormat.Style = WrapStyle.Tight; // 第二行 row = table.AddRow(); row[0].AddParagraph(" - some text"); // 给第二行设置合适行高,保持表格美观 row.Height = "1cm"; row.HeightRule = RowHeightRule.Exactly;
另外提醒下,开启LockAspectRatio可以避免图片因为设置宽度而被拉伸变形,这个小细节能让表格美观度提升不少~
内容的提问来源于stack exchange,提问作者user2638817
相关产品推荐
相关产品推荐

