【问题标题】:Embedding attributes in SVG elements in PDFs在 PDF 中的 SVG 元素中嵌入属性
【发布时间】:2015-02-07 01:18:05
【问题描述】:

我正在与一个使用专有软件--FlexiSIGN-PRO 和i-Cut 经营标牌制作业务的客户合作。我正在开发一个基于 SVG 的自定义工具,我们将在服务器端导出该工具并使用 i-Cut,它采用图像和矢量来创建一个带有人脸的标志。 i-Cut 需要一个 PDF,所以我一直在寻找使用基于节点的解决方案从 SVG 文件导出到 PDF 的不同解决方案(我尝试过 PDFKit 和 screen capturing with PhantomJS。到目前为止,我已经让它工作起来,我可以将矢量和图像相互叠加导出为 PDF,可以在 FlexiSIGN/i-Cut 中打开。

但是,为了让客户端快速创建标志,它需要传入一个“DieColor”颜色名称属性,但这有点模糊,我不完全确定这在 Proprietary Software Land 中意味着什么。当文件以正确的属性导入/导出时,它在 FlexiSign 程序的“颜色规格”中应如下所示:

对于我的 PDF,该框缺少属性(尽管我传入的洋红色填充颜色有效):

所以问题是,我怎样才能将这可能是任何属性导出为 PDF 格式?必须可以嵌入某种元数据,但我不熟悉 PDF 格式或如何与之交互,或者哪些库可以完成这项工作。有没有我可以使用的更好支持的 PHP 库?我也在研究使用 .eps 的可能性,因为显然 i-Cut 可以使用它。

我最近也发现了这个链接:SVG spot color and cut lines

这与声明 PDF 色彩空间有关,但我对它的工作原理一无所知——它与 SVG ColorProfileElement 有什么关系吗?

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

【问题讨论】:

标签: javascript node.js pdf svg


【解决方案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 填充形状。

【讨论】:

  • Perl 远远超出了我(现在),但乍一看这看起来很棒。我已经找到了解决我们与客户的问题的替代解决方案,但我接受了你在编写它时所做的工作。谢谢!
猜你喜欢
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 2018-08-28
  • 2011-08-20
  • 2016-10-18
  • 2017-02-06
相关资源
最近更新 更多