php - TCPDF 垂直拉伸(stretch)文本

标签 php resize tcpdf imagick

我正在开发一个项目,需要使用给定大小的矩形拉伸(stretch)文本。 我为此尝试了 imagick,但存在一些质量损失。

例如,我有一个尺寸为 203x78(任何尺寸)的盒子,并写了一个文本“LOREM IPSUM LOREM”(任何文本)。我希望此文本完全适合我给定的尺寸 203x78,无论字体大小如何,无论其他什么,只是质量并完全适合我的盒子。

我找不到比 imagick 更好的方法: 首先绘制与我的框字体大小最接近的透明文本(当然更小),然后绘制图像。之后,将其调整为我的盒子大小。 调整大小时,我尝试了 imagick 中的任何过滤器。 除了小尺寸的文本之外,没有其他任何东西。例如。字体大小 20px,我的某些框大小比在任何一边绘制约 1-3px 大。 我的意思是,20px 绘制的文本大小是 40x18,但我的框是 41x20。因此将其大小调整为 41x20,但任何效果和效果值都变得模糊。

所以我想使用 TCPDF 创建文本,并希望调整文本大小以适合任何给定的大小。配件必须水平和垂直完全贴合,完全拉伸(stretch)。 我选择 PDF 是因为 PDF 中的文本采用矢量格式,并且在调整任何大小时不会丢失。

TCPDF 有水平拉伸(stretch),但我找不到任何方法可以两侧拉伸(stretch)。

其他信息: 需要使用 ttf 文件创建文本。 需要透明 png 输出。 水平拉伸(stretch)不得与字符间距一致, 所有行为必须与矢量调整大小相同,就像 ADOBE ILLUSTRATOR 一样。

illustrator resized texts, any size

尝试: 我为此使用了 php gd,但质量比 imagick 差。 我尝试安装我的服务器 php-cairo 但无法做到。 我搜索 inkscape 来执行此操作,但找不到在命令行上工作的方法。 我尝试使用 imagick Output > inkscape 来转换矢量,但完全失败了。 我尝试了 TCPDF 输出 > imagick 来调整大小,但是质量失败(imagick 没有矢量调整大小功能)

救命!

最佳答案

ImageMagick 不能用于执行此操作,因为它是“光栅图像处理器”。所以无论如何,图像在任何操作之前都会被光栅化(参见 Vector Image formats )。

我用 inkscape 得到了一些非常干净的东西。

首先,我们需要一个包含文本的简单 svg 文件。这样的文件可以使用 PHP 或任何其他语言轻松生成:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   version="1.1">
  <g>
    <text
       xml:space="preserve"
       style="font-size:40px;
              font-style:normal;
              font-weight:normal;
              line-height:125%;
              letter-spacing:0px;
              word-spacing:0px;
              fill:#000000;
              fill-opacity:1;
              stroke:none;
              font-family:Helvetica"
       x="0"
       y="0"
       sodipodi:linespacing="125%"><tspan
         sodipodi:role="line"
         x="0"
         y="0">Hello World!</tspan></text>
  </g>
</svg>

从那里,我们可以轻松地更改文本、字体、颜色...然后下面的命令行就可以了(通过调整 -w-h参数):

inkscape filename.svg --export-png=filename.png -w800 -h300 --export-area-drawing

关于php - TCPDF 垂直拉伸(stretch)文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381240/

相关文章:

php - 编辑记录 PHP 表单

css - 恶作剧,同时调整右侧绝对定位的 div

php - TCPDF 在 Acrobat 中使用 PNG 生成 "An error exists on this page."

php - 更改 gmdate PHP 函数的时区

php - 插入表格单元格的文本,可点击的 URL 链接?

php - 如何从 MySQL 中的数据恢复实际的 utf8 代码?

python - 为什么 PyQt QGridLayout 不调整大小?

java - 在调整大小之前计算调整大小的图像(例如 JPEG)的文件大小

php - openssl_pkcs7_sign() : error getting private key

php - TCPDF 不格式化