理解您的考虑。
经过调研,发现通过不断尝试autoFit直至单元格容纳下字符串为止再截断至下一行填充,具体代码如下所示:
- using GrapeCity.Documents.Excel;
- var wb = new Workbook();
- var originalColumnWidth = wb.ActiveSheet.Columns[0].ColumnWidthInPixel;
- string text = "君不见黄河之水天上来,奔流到海不复回。君不见高堂明镜悲白发,朝如青丝暮成雪。";
- double margin = 5;
- int row = 0;
- for (int start = 0, end = 1; start < text.Length && end <= text.Length;)
- {
- string temp = text.Substring(start, end - start);
- while (IsFit(wb.ActiveSheet.Range[row, 0], temp, originalColumnWidth))
- {
- end++;
- if (end > text.Length)
- {
- break;
- }
- temp = text.Substring(start, end - start);
- }
- end--;
- wb.ActiveSheet.Range[row, 0].Value = text.Substring(start, end - start);
- start = end;
- end++;
- row++;
- }
- wb.ActiveSheet.Columns[0].ColumnWidthInPixel = originalColumnWidth;
- wb.ActiveSheet.PageSetup.PrintGridlines = true;
- wb.ActiveSheet.PageSetup.PrintHeadings = true;
- wb.Save("F:\\test.pdf");
- bool IsFit(IRange range, string text, double pixelWidth)
- {
- range.Value = text;
- range.AutoFit();
- return range.ColumnWidthInPixel - margin < pixelWidth;
- }
复制代码
上述代码生成的PDF如下图所示:
您可以尝试下看能否满足您的需求。
|