TCPDF垂直拉伸文本

时间:2013-06-29 14:30:11

标签: php resize tcpdf imagick

我正在开发一个项目,需要使用给定大小的矩形进行拉伸。 我为此尝试了想象力,但它有一些质量损失。

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

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

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

TCPDF有一个水平伸展,但我无法找到任何方式伸展双方。

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

illustrator resized texts, any size

尝试: 我使用php gd这个但质量比想象的还要糟糕。 我试图安装我的服务器php-cairo但无法做到。 我搜索inkscape来执行此操作,但找不到在命令行上工作的方法。 我试过想象输出> inkscape转换矢量,但完全惨败。 我试过TCPDF输出>想象力调整大小,但质量fiacso(想象力没有矢量调整大小的能力)

帮助!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我发现的方法是进行转换并输出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();