TCPDF Textfield问题的默认值为

时间:2017-08-07 08:29:04

标签: php forms tcpdf

我正在尝试使用表单创建PDF文件。我正在使用php和tcpdf。 需要精确定位文本字段以使图像适合背景。 某些文本字段具有默认值(通过“v”属性)。

问题在于,当我单击文本字段来编辑内容时,文本会向侧面移动几个像素(可能是因为活动输入字段周围的边框)。当输入失去焦点时,文本不会返回原始位置。

我试图通过这些屏幕截图来显示问题:

(注意相对于下面一行的文字位置)

Problem examples

我的表单默认设置:

$pdf->setFormDefaultProp(array('lineWidth'=>1, 'borderStyle'=>'solid', 
'fillColor'=>array(), 'strokeColor'=>array(255, 128, 128)));

这是该字段的代码:

$pdf->TextField('test', 47, 6, [], ['v' => 'test(12)'], 8, 13);

到目前为止我尝试过:

  • lineWidth设置为0,但当边框不再可见时,文字仍会移动。

  • borderStyle设置为'none',结果相同。

  • strokeColor设置为[],结果相同。

我想做什么:

  • 将填充设置为默认值(或以其他方式影响其定位)

  • 从活动表单字段中删除边框(不只是让它不可见)

我在这里注意到TCPDF示例中的相同行为:https://tcpdf.org/examples/example_014/

如果单击地址字段,文本会向上移动到左侧。

2 个答案:

答案 0 :(得分:0)

虽然我无法用PHP解决问题,但我设法找到了一个可行的解决方法(至少对我们的项目而言):

如果我通过Javascript插入默认值,则效果不会发生。

$js = "
var fields = {'field1':'test', 'field2':'test2'};
for (var fieldName in fields) {
    if (!fields.hasOwnProperty(fieldName)) continue;
    var field = getField(fieldName);
    if (field && field.value === '') {
        field.value = fields[fieldName];
    }
}
";
$this->pdf->IncludeJS($js);

这有一个缺点,即如果用户清空某个字段,则在下次打开该文件时将再次填写默认值。这对我们的项目来说不是用例,所以它适用于我们,但要记住它!

所以它并不完美,但它帮助我们继续我们的项目。也许搜索此问题的人会发现这有用:)

如果有人找到实际解决方案,我仍然感激不尽!

答案 1 :(得分:0)

我认为你想要区分用户第一次打开(空白)表单,以及他们在清空字段后重新打开它时的区别。

在文本字段中,将值(或默认值)设置为10个空格。在您的javascript中,首先检查10个空格,如果有,请插入默认值。如果该字段只有10个空格,请不要插入默认值。用户不太可能使用10个空格来清除字段。

但如果这不够健壮,请使用用户永远不会编辑的其他文本字段(如版本号)。从空开始,只有在检查字段后插入版本号(或其他),然后插入一组默认值。