【问题标题】:Accurate placement of SVG images in TCPDF在 TCPDF 中准确放置 SVG 图像
【发布时间】:2016-06-12 07:27:26
【问题描述】:

我需要创建一个 PDF 文档,我可以在其中放置毫米精度的 SVG 图像。我为此目的使用 TCPDF。我是 TCPDF 的新手,遇到了几个奇怪的问题

这是我的测试 SVG 图像

<svg width="90mm" height="60mm"  viewBox='0 0 90 60'    
 preserveAspectRatio="none">
 <rect width='90' height='60' style='fill:blue;stroke:black;stroke-
  width:1'/>
</svg>

这是我的测试 TCPDF 生成说明

<?php
 require_once('tcpdf_include.php');
 $pdf = new TCPDF("P","mm","A4",true,'UTF-8',false);
 $pdf->setImageScale(1);
 $pdf->SetMargins(15,28.5,15,true);
 $pdf->AddPage();
 $pdf->ImageSVG('images/colorbox.svg',0,0,'','','','',0,true);
 //frame just for testing
 $pdf->Output('colorbox.pdf', 'I');
?>

我期望得到什么

  • 蓝色方块
  • 90mm 宽 & 60mm 高
  • 放置在距纸张左边缘 15 毫米处,距顶部向下 28.5 毫米处

我得到了什么

  • 一个蓝色方块 - 到目前为止很好
  • 尺寸合适的镜框:90 x 60 毫米
  • 距离纸张左边缘 17mm,距离纸张上边缘 0mm

我对 Firefox 进行了打印测试,确保“缩小以适应页面宽度”选项已关闭。

据我所知

  • 上边距指令被忽略
  • 我有一个 2 毫米的神秘水平偏移
  • 虽然 90 x 60 指令似乎已被理解并应用于包含框架,但实际的蓝色矩形要小得多。

要么 TCPDF 对 SVG 中的毫米单位理解不完善,要么我自己对如何控制 TCPDF 的理解存在缺陷。


我发现虚假的 +2mm 边距是 Firefox 的问题。 IE11 的打印保真度被证明是最好的 - 惊喜,惊喜,我从来没有想过我会说 IE 的任何好话。

镜框尺寸非常完美 - 90 毫米 x 60 毫米,如说明所示。蓝色 SVG 矩形以 32 x 21 毫米打印,即奇怪地缩小到所需尺寸的 35%。在 CSS 打印测量单位方面,我不是最好的权威,但如果我没记错的话,1pt 是 0.35mm。因此,TCPDF 将我的 SVG 图形(明确指定 mm)视为具有以点为单位的尺寸?

【问题讨论】:

  • SVG 区分大小写,所以它是 viewBox 而不是 viewbox。这有帮助吗?
  • 感谢罗伯特指出区分大小写的问题。但是,不,这在这里没有任何区别。上边距设置仍然被忽略,框架被绘制到正确的大小,但它的内容 - 蓝色矩形 - 仍然大小不正确。

标签: pdf svg tcpdf


【解决方案1】:

我遇到了类似的问题,A4 SVG 没有填充 A4 PDF - 由于某种原因,它被奇怪地放大并在边缘裁剪。

我将 SVG 文件缩小到比页面 (A6) 小得多,然后我能够使用 TCPDF 将其缩放到完全正确的大小:

$pdf->ImageSVG($file, 0, 0, 297, 210);

【讨论】:

    猜你喜欢
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多