在TCPDF中准确放置SVG图像

时间:2016-02-29 09:53:54

标签: pdf svg tcpdf

我需要创建一个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宽&amp; 60毫米高
  • 从纸张的左手边缘放置15毫米&amp;从顶部向下28.5毫米

取而代之的是

  • 蓝色方块 - 到目前为止很好
  • 尺寸合适的框架:90 x 60 mm
  • 从纸张的左手边缘放置 17mm ,从纸张的上边缘放置 0mm

我做了我对Firefox的打印测试,确保了&#34;缩小以适应页面宽度&#34;选项已关闭。

从我所看到的

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

TCPDF对SVG中的毫米单位只有不完全的理解,否则我自己对如何控制TCPDF的理解是有缺陷的。

我发现假的+ 2mm边距是Firefox问题。打印保真度是IE11的最佳选择 - 惊喜,惊喜,我从未想过我会对IE说任何好话。

框架尺寸完美 - 90mm x 60mm正如指示的那样。蓝色SVG矩形以32×21mm打印,即奇怪地减少到所需尺寸的35%。对于CSS打印测量单元,我不是最好的权威,但如果我没记错,1pt是0.35mm。因此,TCPDF正在处理我的SVG图形 - 明确指定mm - 具有点的尺寸?

1 个答案:

答案 0 :(得分:0)

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

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

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