C#PDFSharp和MigraDoc在不浪费空间的情况下生成一个表



我最近开始了一个使用PDF sharp+Migra Doc的项目,我遇到了一个我在其他帖子中看到的问题,没有自动修复。如果表行没有足够的空间,它将在下一页上生成;如果仍然没有足够的空格,它将进入边框,文本将丢失。我正在考虑一个变通办法,但我不确定该怎么做。

我的想法如下:

如果我能够检查给定字符串的单元格中可以容纳多少行文本,我就可以创建一个变量,并在每次添加文本时增加它。对于多余的文本,我可以简单地创建一个新行(它将自动添加到下一页(,从而解决我的问题。即使我没有计算行数,有没有办法检查行是否对当前页面来说太大?如果在给定的时间,我可以检查单元格是否太大,并将自动发送到下一页,我可以将字符串修剪到适合的位置,保存不适合的剩余单词,并最大限度地增加页面内的空间。

这就是当前生成文档的方式

有办法解决这个问题吗?当涉及到30-40页的文档时,空白是无用的,也是对资源的浪费。

一个极端的选项:在代码中进行布局,并使用PDFsharp绘制文本
另请参阅:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3192

MigraDoc单元格可以包含具有不同字体属性(常规、粗体…(和大小的不同字体的混合体。如果混合使用不同的字体,测量大小和创建新行可能会变得复杂,但如果单元格只使用一种字体,则会变得简单
另请参阅:
https://forum.pdfsharp.net/viewtopic.php?f=8&t=3196

如果表的行相当大(超过一两行文本(,就会出现表的空间问题。也许表格不是呈现信息的最佳选择。你的要求有多严格?你能离开桌子吗?

最终起作用的解决方案如下:

  • 设置文档的样式,包括页眉
  • 根据使用的数据创建一个for循环,该循环将在表中输入所需的行
  • 循环的顶部必须在文档中添加一行
  • 在变量中保存文档当前包含的页数(在进入循环之前最初声明为1(
  • 克隆文档,检查您传递的文档是否包含与当前文档相同或更多的编号。如果文档包含更多页面,则表示您输入的行超过了页面。我能够通过在每次添加新行时呈现文档来实现这一点
  • 需要一个内部循环来修剪行中的文本。我的做法是把文本分成句子,如果它包含3个以上的句子,就删掉,否则就转到下一页
  • 请确保始终删除内部循环中的最后一行,否则将得到相同的数据

这可能不是最有效的方法,但它在Azure服务器上以不到2秒的时间在表中呈现30多页的文档。我希望这能在某个时候帮助到别人。

相关内容

最新更新