首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带iTextsharp的PDF复选框

带iTextsharp的PDF复选框
EN

Stack Overflow用户
提问于 2016-03-10 22:27:17
回答 1查看 793关注 0票数 0

我有一个Android应用程序,它需要生成一个PDF文档,其中包含从数据库中获取的各种数据。包括表和复选框在内的所有操作都很好,这些都是我用这段代码生成的:

代码语言:javascript
运行
复制
    private PdfFormField WriteCheckbox(ref PdfContentByte pcb, float xPos, float yPos, string fldName, bool cbState)
    {
        yPos = yPos - 2f;
        float cbDist = 1f;
        Rectangle cbRect = new Rectangle(xPos, yPos, xPos + DEFAULT_CHECKBOX_SIZE, yPos + DEFAULT_CHECKBOX_SIZE);
        RadioCheckField checkbox = new RadioCheckField(pcb.PdfWriter, cbRect, "", "");
        checkbox.CheckType = RadioCheckField.TYPE_SQUARE;
        checkbox.BorderColor = BaseColor.BLACK;
        checkbox.BorderStyle = PdfBorderDictionary.STYLE_SOLID;
        checkbox.BorderWidth = 0.5f;
        checkbox.FieldName = fldName;

        if(cbState)
        {
            pcb.SetLineWidth(1.2f);
            pcb.MoveTo(xPos + DEFAULT_CHECKBOX_DISTANCE, yPos + cbDist);
            pcb.LineTo(xPos + DEFAULT_CHECKBOX_SIZE - cbDist - 1, yPos + DEFAULT_CHECKBOX_SIZE - cbDist - 1);
            pcb.MoveTo(xPos + DEFAULT_CHECKBOX_SIZE - cbDist - 1, yPos + cbDist);
            pcb.LineTo(xPos + DEFAULT_CHECKBOX_DISTANCE, yPos + DEFAULT_CHECKBOX_SIZE - cbDist - 1);
        }

        pcb.Stroke();

        return(checkbox.RadioField);
    }

生成的PDF在平板电脑(Nexus 7)上是正确的,但是当我复制它,欺骗我的PC,打开如果与Acrobat,所有在正确的地方,除了我画的方块,以显示复选框。我可以看到我画在广场内的十字架,但不能看到周围的广场。发生什么事了?

这是到生成的pdf:2.pdf?dl=0的链接。

这是指向Nexus 7屏幕截图的链接,显示的文件完全相同:

任何提示都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-11 11:26:12

我画的显示复选框的方块

你的代码不画任何正方形。

你的代码所做的,实际上令人惊讶,

  • 它创建了大量的复选框AcroForm表单字段,没有一个选中,没有一个命名,有一个方形可视化选择,和
  • 它在页面内容中绘制一个十字,位于您似乎想要显示的位置上。

因此,即使创建的PDF是有效的,它也会激怒人们,因为他们显然不能取消选择预选的条目,而只是第二次选择它们,导致两个交叉交叉。

您的复选框边框只出现在某些PDF查看器上,而不出现在另一些查看器上,其原因与在this answer中解释问题"iText - Java Android - Adding fields to existing pdf"的原因相同。

AcroForm表单字段需要有一个非空的名称。 AcroForm窗体内容将被发送到某个服务进行自动评估,因此它们必须被命名,并且必须根据各自的名称加以区分。

一些PDF查看器很早就认识到,他们无法正确处理空名称的字段,因此,甚至不会显示它们,而其他查看器则会在稍后尝试保存或发布表单时识别这些字段,或者根本不识别它,从而产生中断的输出。

但是,即使单独命名了这些框,也应该决定是否要使用AcroForm表单字段。在前一种情况下,您只需添加正确命名的表单字段,并将它们设置为选中与否;在后一种情况下,您将在页面内容中绘制完整的复选框外观(而不仅仅是复选标记),而根本不使用表单字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35928599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档