2013-11-26 35 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遠遠超出了我(現在),但一目瞭然,這看起來很棒。我已經找到了解決與客戶問​​題的替代解決方案,但我已經接受了您爲此編寫的工作。謝謝! –