我的Android应用需要生成包含从数据库中提取的各种数据的PDF文档。一切都运行正常,包括表和复选框,我用这段代码生成:
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 Reader,除了我绘制的正方形外,所有位于正确的位置以显示复选框。我可以看到我在正方形内画的十字架,但不是周围的正方形。发生了什么事?
这是生成的pdf的链接: https://www.dropbox.com/s/p388bw7egjsbi80/curit_2015_2.pdf?dl=0
这是Nexus 7屏幕截图的链接,显示了相同的文件:
任何提示都会非常感激。
答案 0 :(得分:0)
我绘制的正方形以显示复选框
您的代码不会绘制任何正方形。
你的代码做了什么,实际上是令人惊讶的,
因此,即使创建的PDF有效,它也可能会激怒人们,因为他们显然无法取消选择预先选择的条目,只是第二次选择它们会导致两个重叠的交叉。
您的复选框边框仅显示在某些PDF查看器上而不显示在其他PDF查看器上的原因与问题this answer的"iText - Java Android - Adding fields to existing pdf"中所述相同:
AcroForm表单字段需要具有非空名称。 AcroForm表单内容应发送到某个服务进行自动评估,因此必须对它们进行命名,并且它们必须能够通过各自的名称进行区分。名。
一些PDF观众很早就认识到他们无法正确处理空名字段,因此,甚至不会显示它们,而其他观众在以后尝试保存或发布表单时会认出来,或者不要根本不会识别它,产生破碎的输出。
但即使在单独命名框之后,您仍应决定是否要使用AcroForm表单字段。在前一种情况下,您只需添加正确命名的表单字段并将其设置为是否选中,在后一种情况下,您将在页面内容中绘制完整的复选框外观(不仅仅是复选标记),而根本不使用表单字段。 / p>