【问题标题】:How to get the X and Y axis of a string or a paragraph from a PDF file?如何从 PDF 文件中获取字符串或段落的 X 轴和 Y 轴?
【发布时间】:2016-03-17 11:29:46
【问题描述】:

我正在为一个名为 vtiger CRM 的系统制作一个模块,对于这个系统,我安装了一个名为 PDFMaker 的模块,它允许我使用 HTML 制作 PDF 文件,PDFMaker 还允许我创建自定义函数以插入到模板中.

我目前有一个自定义函数,它将一个名为 signature 的字符串放入 HTML 模板中。

我需要的是在字符串转换为 PDF 文件后找到字符串的 X 轴和 Y 轴,因为当它从 HTML 模板转换为 PDF 文件时尺寸会发生变化。

我尝试使用 jQuery 中的 .position 函数,但问题在于它适用于 HTML 文件,但不适用于 PDF 文件,这很有意义。

现在我想知道如何从 PDF 文件中的段落或字符串中找到 X 轴和 Y 轴。

创建的 PDF 文件例如发票、报价单等,通常是 A4 纸格式,但可能会有所不同。

这是我此刻的自定义函数:

<?php
    if(!function_exists('signature')){
        function signature($string = 'Signature'){
            $xAxis = '<script>
                $(function(){
                    var p = $("#signature");
                    var position = p.position();
                    document.write(position.left);
                });
            </script>';
            $yAxis = '<script>
                $(function(){
                    var p = $("#signature");
                    var position = p.position();
                    document.write(position.top);
                });
            </script>';

            return $xAxis . ' ' . $yAxis;
        }
    }
?>

它不会向 PDF 文件返回任何内容。

【问题讨论】:

  • 发布您的自定义函数!如果我们不知道使用的 pdf 库,我们应该怎么知道?
  • 我添加了它,虽然我怀疑它会有多大帮助。
  • 它没有,但现在我可以看到它;) 您将不得不查看将 html 模板转换为 pdf 的函数。为什么你甚至需要它的位置?
  • 我需要从 Docusign 使用的 API 的位置,这是一个允许人们以数字方式签署文档的应用程序。由于它是许可产品并且无法更改任何源代码,因此我无法查看转换它的功能。
  • 哎哟......我希望有人会给你一个有用的答案。我看到的唯一可能性是生成 pdf,使用 OCR 查找字符串的位置(这对自己来说很痛苦),然后使用它。或者为每个模板做一个静态位置(如果可能的话)。也许你的 pdf 模块让你有可能做得更好,但我不能从这里判断。

标签: php jquery html pdf vtiger


【解决方案1】:

你必须计算它。 首先,您必须找出 pdf 中使用了多少像素。 (取决于 PDF 的 DPI)。

我们称之为 pdf_width (x) 和 pdf_height (y)

其次你需要找到模板的最大使用宽度。我看到您的模板宽度减小以适合页面。您可以通过获取尽可能靠右的元素的 Position.right 来发现这一点。 我们称之为 max_template_x。

现在我们需要签名文本的长度:

var length = p.position().right - p.position().left;

然后是模板上的真实位置:

if (p.position().right > max_template_x) {
posX = max_template_x - length}

然后将其与模板相乘到pdf配额:

posX = posX * (pdf_width / template_max_x)

现在你有了 x。

对于 y,您必须执行相同的操作,仅使用 pagebrake 并取决于您在签名上方放置的文本数量。

【讨论】:

  • 没有.position.right这样的东西,所以这行不通。
  • 将文本包装在一个 span 中并使用 .width()
  • PDF 中使用的像素数量会根据用户使用的格式而变化。
猜你喜欢
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2022-06-30
  • 1970-01-01
  • 2016-09-16
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多