2013-11-26 31 views
0

我正在与运行使用专有软件的标牌制作业务的客户端合作 - FlexiSIGN-PROi-Cut。我正在开发一个定制的基于SVG的工具,我们将在服务器端导出,并与i-Cut一起工作,i-Cut需要一张图像和一个矢量来创建一个带有脸部标志的标志。 i-Cut需要PDF,所以我一直在寻找不同的解决方案,使用基于节点的解决方案从SVG文件导出为PDF(我试过PDFKitscreen capturing with PhantomJS。到目前为止,我已经在其中工作了我可以将一个矢量和一个图像导出为PDF格式,并可以在FlexiSIGN/i-Cut中打开。在PDF中嵌入SVG元素的属性

但是,为了客户端快速创建标志,它需要传递一个“ DieColor“颜色名称属性,但这有些模糊,我不完全确定这是什么意思在专有软件土地。当一个文件导入/导出具有正确的属性,它应该看起来像这样的”颜色规格“ FlexiSign程序:

随着我的PDF文件,这个盒子是缺少的属性(虽然红色填充颜色我传递工作):

所以现在的问题是,我怎么能不管输出属性,这可能是转换成PDF格式?必须嵌入某种类型的元数据,但我不熟悉PDF格式或如何与其交互,或者什么库可以完成这项工作。有更好的支持PHP库我可以使用吗?我也在研究使用.eps的可能性,因为显然i-Cut可以使用它。

我也是最近发现此链接:SVG spot color and cut lines

这已是与声明PDF色彩空间,但我真的什么都不知道它是如何工作 - 它必须是与SVG ColorProfileElement

任何帮助将不胜感激。谢谢!

+0

我认为这个问题的答案也可能解决你的问题。 http://stackoverflow.com/questions/19977804/svg-spot-color-and-cut-lines –

回答

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填充形状。

+0

Perl远远超出了我(现在),但一目了然,这看起来很棒。我已经找到了解决与客户问​​题的替代解决方案,但我已经接受了您为此编写的工作。谢谢! –