c# - IText 7多行字段不自动换行
问题描述
我们最近从 ITextSharp 切换到 IText 7,一切似乎都运行良好。但是后来我们的一位客户将他收到的 pdf 文件发回给我们,并且似乎不像在 ITextSharp 上那样,多行字段会自动换行。
我们现在的解决方法是每 130 个字符分割我们的字符串,并将 a\n
放在最近的空间中。对于任何有同样问题的人,这里是我们使用的代码:
public static void SetFormatted(this PdfFormField field, string txt)
{
var rect = field.GetPdfObject().GetAsRectangle(new PdfName("Rect"));
var fontSize = field.GetFontSize();
var div = fontSize / 2.2;
int length = (int)(rect.GetWidth() / div);
field.SetValue(Format(txt, length));
}
private static string Format(string text, int length)
{
if (text.Length > length)
{
if (text.IndexOf(' ') == 0)
text = text.Substring(1);
string temp = text.Substring(0, length);
int indexOfN = temp.IndexOf("\n");
if (indexOfN > 0)
{
return temp.Substring(0, indexOfN) + Format(text.Substring(indexOfN), length);
}
int index = temp.LastIndexOf(' ');
temp = temp.Substring(0, index) + "\n";
return temp + Format(text.Substring(index), length);
}
return text;
}
但这更多是临时解决方案,而不是解决方案。
(我知道我说的是 130 个字符,但它在我们的领域中是这样划分的。它计算它应该是什么。我不保证它会 100% 为你工作)
我们尝试使用field.SetRichText(ourTxt)
,但它只是没有显示,并且该字段启用了 RTF。
解决方案
推荐阅读
- excel - Excel VBA 代码,用于在一个单元格中进行多项选择的数据验证 - 用于多列
- xml - 使用 XML 和 XSL 创建 SVG 折线图
- mysql - 从表中查找不匹配的用户
- python-3.x - UnicodeEncodeError:“ascii”编解码器无法对位置 2-7 中的字符进行编码:序数不在范围内(128)
- javascript - 为什么我的函数在延迟后不删除元素?
- math - 计算向量端点
- laravel - Laravel 发现意外数据
- parsing - 自定义解析返回值,保留未命名的终端
- python-3.x - 与另一个线程或进程共享 asyncio.Queue
- azure - 使用 Terraform 部署期间在 Azure VM 上安装 DSC 扩展的问题