Php 垂直拉伸文本

Php 垂直拉伸文本,php,resize,tcpdf,imagick,Php,Resize,Tcpdf,Imagick,我正在做一个项目,需要文本拉伸到一个给定大小的矩形。 我试着用imagick做这个,但是质量有一些损失 例如,我有一个大小为203x78(任意大小)的框,并写了一个文本“LOREM IPSUM LOREM”(任意文本)。我希望此文本完全适合我给定的大小203x78,无论字体大小或其他任何事情,只是质量和完全适合我的框 通过这种方式,我找不到比imagick更好的方法: 首先,用最接近我的方框的字体大小绘制透明文本(当然要小),然后绘制图像。之后,调整它的大小到我的盒子大小。 调整大小时,我尝试了

我正在做一个项目,需要文本拉伸到一个给定大小的矩形。 我试着用imagick做这个,但是质量有一些损失

例如,我有一个大小为203x78(任意大小)的框,并写了一个文本“LOREM IPSUM LOREM”(任意文本)。我希望此文本完全适合我给定的大小203x78,无论字体大小或其他任何事情,只是质量和完全适合我的框

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

所以我想用TCPDF创建文本,并想调整文本大小以适应任何给定的大小。配件必须完全适合水平和垂直方向,完全拉伸。 我之所以选择PDF,是因为PDF中的文本是矢量格式的,并且在调整任何大小时都没有损失

TCPDF有一个水平拉伸,但我找不到任何方法来拉伸两侧

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

尝试: 我使用了PHPGD,但质量比imagick差。 我试图安装我的服务器,但无法完成。 我搜索inkscape来实现这一点,但找不到在命令行上工作的方法。 我尝试了imagick output>inkscape来转换向量,但完全失败了。 我尝试了TCPDF output>imagick来调整大小,但质量不高(imagick没有向量调整功能)


救命啊

不能使用ImageMagick来实现这一点,因为它是一个“光栅图像处理器”。因此,无论如何,在任何操作之前,图像都将被光栅化(请参阅)

我用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>

我发现的一种方法是进行转换并输出html

$pdf->StartTransform();

$pdf->Scale(100,150);

// Output html.
$html=('sample text');
$pdf->writeHTMLCell($w=50, $h=10, $x='', $y='', $html, $border=1, $ln=1, $fill=0, $reseth=true, $align='C', $autopadding=true);


$pdf->StopTransform();

在这种情况下,如何使用ttf字体文件?(请参阅问题,需要使用ttf文件创建文本。)通过“字体系列”属性,您可以使用系统上安装的任何字体(包括ttf)。要获取文件的字体系列,可以使用
fc query path/To/fontfile.ttf
命令。例如,在linux上,您只需将ttf文件放在
~/.font
目录中,inkscape就会找到它。
$pdf->StartTransform();

$pdf->Scale(100,150);

// Output html.
$html=('sample text');
$pdf->writeHTMLCell($w=50, $h=10, $x='', $y='', $html, $border=1, $ln=1, $fill=0, $reseth=true, $align='C', $autopadding=true);


$pdf->StopTransform();