【问题标题】:How do I text wrap to next acrofield in iTextSharp?如何在 iTextSharp 中将文本换行到下一个 acrofield?
【发布时间】:2011-11-01 23:19:06
【问题描述】:

如何让文本从一个 acrofield 换行到下一个?我有一个客户给我们的 adobe pdf doc。它有一个重叠的 acro 字段(都具有相同的名称)。他们希望文本在到达行尾时从一个换行到另一个。我在那里看到的所有其他示例都没有处理填充包装的 acro 字段。请帮忙!

                // loop through disabilities and display them
                foreach (var disability in formNature.Disabilities)
                {
                    fields.SetField("EVALUATION", disability.PrimaryDisabilityName + "; ");
                }

理论上,这应该遍历他们在 Web 表单中输入的所有残疾,并在到达每一行末尾时进行文本换行时一个接一个地显示它们。但相反,它只在一个字段中显示一项。

【问题讨论】:

    标签: c# pdf-generation itextsharp


    【解决方案1】:

    很遗憾,这不是一个完整的答案。

    首先,当您调用SetField() 时,您将删除该字段的当前内容并将其替换为您的新值。当在循环中完成时,只有最后一个值将被存储。您需要做的是遍历每个值并将它们连接成一个大字符串。

    string buf = '';
    foreach (var disability in formNature.Disabilities)
    {
        buf += disability.PrimaryDisabilityName + "; ";
    }
    buf = buf.Trim();
    

    其次,据我所知,PDF 标准不支持链接溢出字段,这正是您所寻找的。我知道完成您正在尝试的唯一方法是实际测量字符串并将它们与字段的宽度进行比较并根据需要截断它们。为此,您需要找到用于给定字段的字体,从中创建一个BaseFont 并使用它来测量字符串。然后将其与字段的矩形进行比较,并仅使用“适合”该字段的字符。根据需要重复。

    话虽如此,我真的非常推荐您只需编辑 PDF 并将多个字段替换为一个支持多行的大字段。你的生活会轻松很多。

    【讨论】:

    • 是的,PDF 不适用于 Word Publishing,但针对最终交付/便携性进行了优化。你是程序员是模拟文字出版软件。我自己也有同样的问题:使用 SetField,所以我需要使用 PdfCell 来测量字符串(不添加到文档中)以检测何时发生溢出。
    猜你喜欢
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多