我正在尝试使用表单创建PDF文件。我正在使用php和tcpdf。 需要精确定位文本字段以使图像适合背景。 某些文本字段具有默认值(通过“v”属性)。
问题在于,当我单击文本字段来编辑内容时,文本会向侧面移动几个像素(可能是因为活动输入字段周围的边框)。当输入失去焦点时,文本不会返回原始位置。
我试图通过这些屏幕截图来显示问题:
(注意相对于下面一行的文字位置)
我的表单默认设置:
$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/
如果单击地址字段,文本会向上移动到左侧。
答案 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个空格来清除字段。
但如果这不够健壮,请使用用户永远不会编辑的其他文本字段(如版本号)。从空开始,只有在检查字段后插入版本号(或其他),然后插入一组默认值。