【发布时间】: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。这有帮助吗?
-
感谢罗伯特指出区分大小写的问题。但是,不,这在这里没有任何区别。上边距设置仍然被忽略,框架被绘制到正确的大小,但它的内容 - 蓝色矩形 - 仍然大小不正确。