将Illustrator或pdf文件处理为XAML

将Illustrator或pdf文件处理为XAML,xaml,pdf,adobe-illustrator,expression-design,Xaml,Pdf,Adobe Illustrator,Expression Design,将illustrator文件或PDF处理为XAML的替代方案有哪些。我当前的工作流程如下所示: 在Adobe illustrator中打开PDF文件 将文件另存为.ai(Adobe Illustrator)文件 开放式表达设计 进行一些处理,主要是将元素分层并移除不需要的部分 另存为XAML 将XAML添加到Blend项目 我唯一的问题是,通过这种方式,文本被转换为路径。我也希望将文本保存在XAML中,而不是路径中 有没有其他方法可以这样做,所以我保留文本?还有其他工具吗 有一个(免费)Adob

将illustrator文件或PDF处理为XAML的替代方案有哪些。我当前的工作流程如下所示:

  • 在Adobe illustrator中打开PDF文件
  • 将文件另存为.ai(Adobe Illustrator)文件
  • 开放式表达设计
  • 进行一些处理,主要是将元素分层并移除不需要的部分
  • 另存为XAML
  • 将XAML添加到Blend项目
  • 我唯一的问题是,通过这种方式,文本被转换为路径。我也希望将文本保存在XAML中,而不是路径中

    有没有其他方法可以这样做,所以我保留文本?还有其他工具吗

    有一个(免费)Adobe Illustrator插件可导出到XAML。不过,我不确定它是否完全符合您的要求


    找到它,我想你想要的是Glyphs元素而不是路径。 问题是Glyphs元素要求您指定字体文件的URI。此外,Glyphs元素通过索引将Glyphs引用到字体文件中(生成Glyphs元素的转换器(如Microsoft XPS Document Writer)可能会将索引用于字体子集文件:因此这些索引可能不是原始字体文件中定义的同一Glyphs的正确索引)。我已经能够用我自己的PDF到XAML转换工具以两种方式“解决”这个问题

    1。方法:将字体子集文件(BASE64编码)嵌入生成的XAML代码中,并让应用程序实现一个类,该类在加载时将嵌入式字体子集文件提取并解码到临时位置,并将该临时文件的有效URI交回XAML加载程序

    或者,2。方法:在我的应用程序中已经安装了大多数字体文件,并且,我的应用程序再次添加了一些支持,在加载XAML代码时,用URI将字体名称替换为已安装的字体文件。第二种方法的问题是glyph索引需要正确映射到已安装的字体文件,这可能不是那么简单。(你可以在我的博客上找到一个链接,指向以这种方式加载的示例文件:特别是看一看该文件)

    简而言之:这两种解决方案都需要一个特殊的PDF到XAML转换器,并由加载应用程序提供支持。我之所以想这样做,而不是仅仅将PDF转换为路径,是因为我的应用程序是一个共享白板:因此我希望我的矢量图形尽可能小。(在大多数情况下,向路径的转换往往会将XAML代码放大10倍或更多)


    我正在考虑第三种方法的实现:这将包括为每个只使用一次的字形生成轮廓,然后由我的应用程序添加支持,以类似于字形元素的方式转换和定位这些字形轮廓,否则必须生成这些字形轮廓。优点是生成的XAML仍然相对较小(与上述第二种方法相当),无需随应用程序一起安装相关字体文件,也无需将字形索引从子集文件映射到安装的字体文件。我还没有认真实施这一点的原因有两个:第一,我目前(第二)的方法已经很好地满足了我目前的需要;第二,第三种方法在加载和/或渲染时可能存在性能问题。

    XPS文件实际上是一个ZIP文件。因此,如果您使用ZIP archiver打开它,或者将其扩展名重命名为ZIP,您可以看到其中的内容。它已包含作为XAML代码的页面(这些文件的格式为[pagenumber].fpage)。但是,该XAML代码可能会引用ZIP存档中包含的其他文件(如光栅图像和字体子集文件,这些文件通常是odttf文件-基本上是加密的true type文件)。这意味着,您在XPS文档中找到的XAML代码可能无法作为纯XAML在应用程序中直接使用。我已经编写了python脚本,对XPS文档(由Microsoft XPS Document Writer生成)中的XAML进行转换,以获得我的应用程序可以加载的XAML文件(请参见上面的方法1和方法2)。我可以向您发送这些python脚本的副本(它们不是特别好的代码,这对我来说没有问题,因为我现在使用不同的方法将PDF转换为XAML)。

    @gyuric:保留字体文件应该可以,但保留文本可能会成为一个问题,因为您知道,字形不是字符。可能您可以通过检查给定glyph所属的字体文件来确定字符,但这需要解析字体文件。如果运气不好,PDF-to-XPS转换器甚至没有在字体子集文件中保留足够的信息,以确定给定字形(很可能)所代表的字符

    例如:如果我在Microsoft的XPS Document Writer的帮助下将PDF文件转换为XPS,然后尝试从该XPS文档中选择一段文本,我可以(显然)将其复制到剪贴板。然而,如果我随后将其粘贴回Word文档,则会得到垃圾。然而,如果我在原始PDF文档中选择同一段文本并将其粘贴到同一Word文档中,我会得到相当有意义的文本。因此,微软的XPS文档编写器显然不关心将“字形运行”解释为文本,因此,在我看来,在生成的XPS代码中找到的字形索引和它们要表示的字符之间的链接很可能已经断开。(但不可否认,这只是一个猜测。)

    我想,文本的表示(相对于一系列字形)应该是XAML中的TextBlock元素。然而,我的猜测是,典型的PDF到XPS转换器不太可能