我有一个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,所有在正确的地方,除了我画的方块,以显示复选框。我可以看到我画在广场内的十字架,但不能看到周围的广场。发生什么事了?
这是到生成的pdf:2.pdf?dl=0的链接。
这是指向Nexus 7屏幕截图的链接,显示的文件完全相同:
任何提示都将不胜感激。
发布于 2016-03-11 11:26:12
我画的显示复选框的方块
你的代码不画任何正方形。
你的代码所做的,实际上令人惊讶,
因此,即使创建的PDF是有效的,它也会激怒人们,因为他们显然不能取消选择预选的条目,而只是第二次选择它们,导致两个交叉交叉。
您的复选框边框只出现在某些PDF查看器上,而不出现在另一些查看器上,其原因与在this answer中解释问题"iText - Java Android - Adding fields to existing pdf"的原因相同。
AcroForm表单字段需要有一个非空的名称。 AcroForm窗体内容将被发送到某个服务进行自动评估,因此它们必须被命名,并且必须根据各自的名称加以区分。
一些PDF查看器很早就认识到,他们无法正确处理空名称的字段,因此,甚至不会显示它们,而其他查看器则会在稍后尝试保存或发布表单时识别这些字段,或者根本不识别它,从而产生中断的输出。
但是,即使单独命名了这些框,也应该决定是否要使用AcroForm表单字段。在前一种情况下,您只需添加正确命名的表单字段,并将它们设置为选中与否;在后一种情况下,您将在页面内容中绘制完整的复选框外观(而不仅仅是复选标记),而根本不使用表单字段。
https://stackoverflow.com/questions/35928599
复制相似问题