gpt4 book ai didi

c# - 您如何使用 ABCpdf 确定 PDF 文本框字段是否为多行?

转载 作者:行者123 更新时间:2023-11-30 17:01:08 29 4
gpt4 key购买 nike

我可以使用 GetFieldNames() 集合使用 ABCpdf 遍历 PDF 中的所有字段并获取它们的属性,但我似乎无法获取的是该字段是否为多行文本字段。有没有关于如何找到此属性的示例?如果有帮助,我的代码在下面,但可能没有必要。

    ....

foreach (string fieldName in doc.Form.GetFieldNames())
{
WebSupergoo.ABCpdf9.Objects.Field f = doc.Form[fieldName];
dt = GetFieldInstances(dt,f);
}

....

private static DocumentTemplate GetFieldInstances(DocumentTemplate dt, WebSupergoo.ABCpdf9.Objects.Field f)
{
Field field;
Instance inst = new Instance();
int instanceCount = 0;
bool fieldAlreadyExists = dt.Fields.Any(currentField => currentField.Name == f.Name);
if (!fieldAlreadyExists)
{
field = new Field();
field.Name = f.Name;
field.Value = f.Value;
field.Format = f.Format == null ? null : f.Format;
field.PartialName = f.PartialName;
field.TypeID = (int)f.FieldType;

//field.IsMultiline =
//field.IsRequired =
}
else
{
field = (from currentField in dt.Fields where currentField.Name == f.Name select currentField).SingleOrDefault();
instanceCount = field.Instances.Count();
}

if ((Field.FieldTypes)f.FieldType == Field.FieldTypes.Radio || (Field.FieldTypes)f.FieldType == Field.FieldTypes.Checkbox)
{
inst.ExportValue = f.Options[instanceCount];
}
if (f.Kids.Count() > 0)
{
f = f.Kids[instanceCount];
}
inst.Bottom = (int)f.Rect.Bottom;
inst.Height = (int)f.Rect.Height;
inst.Left = (int)f.Rect.Left;
inst.Width = (int)f.Rect.Width;
inst.PageNumber = f.Page.PageNumber;




field.Instances.Add(inst);

if (!fieldAlreadyExists)
{
dt.Fields.Add(field);
}
return dt;
}

最佳答案

我想通了:

public bool GetIsMultiLine(WebSupergoo.ABCpdf9.Objects.Field field)
{
var flags = Atom.GetInt(Atom.GetItem(field.Atom, "Ff"));
var isMultiLine = GetIsBitFlagSet(flags, 13);
return isMultiLine;
}

public bool GetIsRequired(WebSupergoo.ABCpdf9.Objects.Field field)
{
var flags = Atom.GetInt(Atom.GetItem(field.Atom, "Ff"));
var isRequired = GetIsBitFlagSet(flags, 2);
return isRequired;
}

public bool GetIsReadOnly(WebSupergoo.ABCpdf9.Objects.Field field)
{
var flags = Atom.GetInt(Atom.GetItem(field.Atom, "Ff"));
var isReadOnly = GetIsBitFlagSet(flags, 1);
return isReadOnly;
}

private static bool GetIsBitFlagSet(int b, int pos)
{
return (b & (1 << (pos - 1))) != 0;
}

如果您不熟悉无符号整数/二进制转换,I found this site really helpful to understand.

例如,假设为字段标志返回的整数等于 4096。如果您将其输入到 online coversion tool 中在该网站中,它会显示第 13 位位置已打开(从右边开始的第 13 位是 1 而不是 0)。

在 ABCPdf 指南中,它说 Multi-Line 是第 13 位,因此您知道该字段是一个 Multi-Line 字段。

对于必需的第二个位置和只读的第一个位置也是如此。

关于c# - 您如何使用 ABCpdf 确定 PDF 文本框字段是否为多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389794/

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