【问题标题】:TCPDF Textfield issues with default value默认值的 TCPDF 文本字段问题
【发布时间】:2017-08-07 08:29:04
【问题描述】:

我正在尝试使用表单创建 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/

如果您点击地址字段,文本会向上和向左移动。

【问题讨论】:

    标签: php forms tcpdf


    【解决方案1】:

    虽然我无法用 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);
    

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

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

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

    【讨论】:

      【解决方案2】:

      我认为您想区分用户第一次打开(空白)表单时,与他们在保存该字段后重新打开它并清空该字段时。

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

      但如果这还不够健壮,请使用另一个用户永远不会编辑的文本字段(如版本号)。开始时为空,仅在您检查该字段并插入您的一组默认值后才插入版本号(或其他)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-27
        • 2015-08-01
        • 2020-09-14
        • 2022-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多