【问题标题】:iTextSharp Create Duplicate TextField As ReadOnlyiTextSharp 创建重复的文本字段为只读
【发布时间】:2018-04-06 14:11:23
【问题描述】:

我正在我的 pdf 的另一页上创建现有 TextField 的副本,并且我希望重复的字段是只读的,以便用户只能更改原始字段的值。这是我创建副本的部分:

PdfPCell totalPriceCell = new PdfPCell()
{
    BorderWidthLeft = 0,
    BorderWidthRight = 0,
    BorderWidthTop = 0,
    BorderWidthBottom = 0f
};
BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, false);
TextField tFieldTotalPrice = new TextField(writer, new iTextSharp.text.Rectangle(0, 0), dupTotalPriceName)
{
    FieldName = dupTotalPriceName,
    Alignment = 1,
    FontSize = 12,
    Font = bf
};
tFieldTotalPrice.SetRotationFromPage(doc.PageSize);
FieldPositioningEvents eventsTotalPrice = new FieldPositioningEvents(writer, tFieldTotalPrice.GetTextField());
PdfFormField fieldTotalPrice = tFieldTotalPrice.GetTextField();
fieldTotalPrice.SetFieldFlags(PdfFormField.FF_READ_ONLY);
fieldTotalPrice.SetFieldFlags(PdfFormField.FLAGS_READONLY);
//Divide row number by 2 and keep remainder. If remainder is 0, even. Else, odd.
totalPriceCell.BackgroundColor = r % 2 == 0 ? BaseColor.WHITE : new BaseColor(245, 245, 245);
totalPriceCell.CellEvent = eventsTotalPrice;

以这种方式设置标志不起作用,这是迄今为止我在类似问题上能找到的唯一解决方案。

感谢您的宝贵时间!

【问题讨论】:

  • 你是对的:这不应该工作。看一下ISO 32000。一个字段(抽象键/值对)可以对应两个不同的widget注解(你在文档中看到的),但是只读状态不能在注解级别定义,只能在领域层面。一个字段要么是只读的,要么是非只读的。如果一个字段是只读的,那么所有的小部件注释也是如此。如果你不理解这个解释,可以总结为你正在尝试做一些根据 PDF ISO 标准是不可能的事情。
  • 作为一种变通方法,您可以创建两个具有不同名称的字段。使一个字段可编辑,并使另一个字段只读。然后定义一个动作,当可编辑字段更改时,只读字段也会更改。这可以使用 JavaScript 完成。
  • 我明白了,非常感谢您的解释。我会尝试你的工作

标签: c# itext acrofields


【解决方案1】:

正如 Bruno 精彩解释的那样,根据 PDF ISO 标准,这是无法做到的。

【讨论】:

    猜你喜欢
    • 2019-08-23
    • 2014-01-16
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多