我正在与运营使用专有软件的签名制作业务的客户合作 - FlexiSIGN-PRO和i-Cut。我正在开发一个基于SVG的自定义工具,我们将在服务器端导出并与i-Cut一起工作,它采用图像和矢量来创建一个带有面部的标记。 i-Cut需要PDF,所以我一直在寻找使用基于节点的解决方案从SVG文件导出到PDF的不同解决方案(我已经尝试过PDFKit和screen capturing with PhantomJS。我已经完成了工作,我可以将矢量和图像相互叠加到PDF中,可以在FlexiSIGN / i-Cut中打开。
然而,为了让客户快速创建标志,它需要传递“DieColor”颜色名称属性,但这有点模糊,我不完全确定这在专有软件领域意味着什么。使用正确的属性导入/导出文件时,它应该在FlexiSign程序的“颜色规范”中显示如下:
使用我的PDF,该框缺少属性(虽然我传入的洋红色填充颜色正在工作):
所以问题是,如何将这可能导出的任何属性导出为PDF格式?必须能够嵌入某种元数据,但我不熟悉PDF格式或如何与它进行交互,或者哪些库可以完成这项工作。我可以使用更好的PHP库吗?我也在研究使用.eps的可能性,因为显然i-Cut可以使用它。
我最近也发现了这个链接:SVG spot color and cut lines
这与声明PDF色彩空间有关,但我完全不知道它是如何工作的 - 它是否与SVG ColorProfileElement有关?
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
正如我所看到的,SVG当前标准不支持专色声明,您需要定制和/或昂贵的SVG> PDF转换工具,用于将命名的SVG颜色转换为PDF中的专色。如果您选择的工具和PDF产生的唯一问题是它们没有专色,您可以对PDF进行后处理。假设RGB洋红色不用于其他任何东西,
$ perl -Mstrict -MCAM::PDF -we '
> sub _n { CAM::PDF::Node->new(@_) }
> @ARGV and my $doc = CAM::PDF->new($ARGV[0]) or die();
> my $r = $doc->getValue($doc->getPage(1)->{Resources});
> $r->{ColorSpace} ||= _n("dictionary", {});
> $doc->getValue($r->{ColorSpace})->{DieLine} = _n("array", [
> (map {_n("label", $_)} qw(Separation DieLine DeviceCMYK)),
> _n("reference", $doc->appendObject(undef,
> _n("object", _n("dictionary", {
> FunctionType => _n("number", 2),
> Domain => _n("array", [map{_n("number", $_)} (0,1)]),
> C0 => _n("array", [map {_n("number", $_)} (0,0,0,0)]),
> C1 => _n("array", [map {_n("number", $_)} (0,0.5,1,0.2)]),
> N => _n("number", 1),
> })),
> ,0)),
> ]);
> my $s = $doc->getPageContent(1);
> $s =~ s!(?<=\s)1\s0\s1\srg(?=\s)!/DieLine cs 1 sc!g;
> $doc->setPageContent(1, $s);
> $ARGV[0] =~ s/(.pdf)$/+$1/;
> $doc->cleanoutput($ARGV[0]);
> ' test.pdf
结果test+.pdf
应该有DieLine
专色(或多或少橙色,如示例所示)代替255-0-255填充形状。