gpt4 book ai didi

c# - iTextSharp 中多行文本表单字段的对齐问题

转载 作者:行者123 更新时间:2023-12-01 18:53:16 27 4
gpt4 key购买 nike

我编写了一个应用程序,用于以编程方式从数据库填写 PDF 模板中的表单并将结果保存到磁盘。除了未按预期呈现的任何多行文本字段之外,一切都正常工作。它们应该顶部、左对齐,行与行之间没有间隙。

我得到的结果在这里: enter image description here

但是,当我使用任何 PDF 阅读器单击表单字段时,该字段会自行更正为我所期望的内容。看 : enter image description here

我使用的代码是漂亮的样板代码。

            PdfStamper stamper = new PdfStamper(reader, ms, '\0', false);

AcroFields form = stamper.AcroFields;
List<DocumentField> fields = GetData(id);
foreach (DocumentField field in fields)
{
form.SetField(field.FieldName, field.Value);
}

stamper.FormFlattening = true;
stamper.Close();
reader.Close();

我正在使用System.Environment.NewLine来添加回车符。有谁知道可能导致此行为的原因以及使左上角对齐而没有大间隙的解决方案。谢谢。

更新解决方案

我删除了该字段并重新添加它,它的行为符合预期。实际上问题似乎在于我使用了一种名为“Cambria”的字体,如果我将字段设置回使用该字体,则会返回该行为。

最佳答案

请查看 MultiLineField这是为了检验你的指控而写的。在此示例中,我们创建一个具有最简单的多行文本字段的表单:

Rectangle rect = new Rectangle(36, 720, 144, 806);
TextField tf = new TextField(writer, rect, "text");
tf.setOptions(TextField.MULTILINE);
writer.addAnnotation(tf.getTextField());

然后我们像这样填写并展平此表单:

public void createPdf(String filename) throws DocumentException, IOException {
PdfReader reader = new PdfReader(createForm());
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(filename));
AcroFields form = stamper.getAcroFields();
form.setField("text", "A B C D E F\nG H I J K L M N\nO P Q R S T U\r\nV W X Y Z\n\nAlphabet street");
stamper.setFormFlattening(true);
stamper.close();
}

仔细看看字符串:

"A B C D E F\nG H I J K L M N\nO P Q R S T U\r\nV W X Y Z\n\nAlphabet street"

我引入了一些换行符 (\n),甚至是回车/换行符序列 (\r\n)。这些引入了一条新线。仅当我引入多个换行符 (\n\n) 时,才会引入额外的间隙:

enter image description here

您的代码表现不同可能有以下三个原因:

  1. 您的形式不同。您的文本字段有一些非常具体的内容。如果是这样,请分享您的表格以供检查。 [更新:正如评论中提到的,文本字段确实有一些特别之处;更新字段解决了问题。]
  2. 您添加了太多换行符。也许“21 High Street”后面已经有一个换行符。也许您的系统上的换行序列有些奇怪。请注意,这是 PDF:它与操作系统无关,只需使用 /n 就足够了。
  3. 也许您使用的是非官方版本的 iText。这对我们(iText 组)来说非常令人沮丧,但有些人发现有必要创建包含与官方 iText 行为方式不同的代码的分支。确保您使用的是 iText 的正版副本。

无论如何:您在示例中共享的屏幕截图与您的代码不匹配。在您的代码中,您有:

stamper.FormFlattening = true;

这与显示交互性的屏幕截图不一致。仅当您具备以下条件时才可能实现:

stamper.FormFlattening = false;

或者如果此行不存在。

关于c# - iTextSharp 中多行文本表单字段的对齐问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30233783/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com