【问题标题】:Processing Illustrator or pdf files into XAML将 Illustrator 或 pdf 文件处理为 XAML
【发布时间】:2011-04-02 20:17:06
【问题描述】:

将 illustrator 文件或 PDF 处理为 XAML 的替代方法有哪些。我当前的工作流程是这样的:

  1. 在 Adob​​e illustrator 中打开 PDF 文件
  2. 将文件另存为 .ai (Adobe Illustrator) 文件
  3. 在表达式设计中打开
  4. 做一些处理,主要是把元素分层,去掉不需要的部分。
  5. 另存为 XAML
  6. 将 XAML 添加到 Blend 项目

我唯一的问题是通过这种方式将文本转换为路径。我想将我的文本也保留在 XAML 中,而不是路径。

有没有其他方法可以做到这一点,所以我保留文字?还有其他工具吗?

【问题讨论】:

    标签: xaml pdf adobe-illustrator expression-design


    【解决方案1】:

    @gyurisc:保留字体文件应该可以,但保留文本可能会成为问题,因为您会看到,字形不是字符。您可能可以通过检查给定字形所属的字体文件来找出字符,但这将涉及解析字体文件。如果运气不好,您的 PDF 到 XPS 转换器甚至无法在字体子集文件中保留足够的信息来确定给定字形(很可能)代表的字符。

    例如:如果我在 Microsoft 的 XPS Document Writer 的帮助下将 PDF 文件转换为 XPS,然后尝试从该 XPS 文档中选择一段文本,我可以(显然)将其复制到剪贴板。但是,如果我将其粘贴回 Word 文档中,我会得到垃圾。而如果我在原始 PDF 文档中选择 相同 段文本并将其粘贴到同一个 Word 文档中,我会得到相当有意义的文本。因此,Microsoft 的 XPS Document Writer 显然并不关心将“字形运行”解释为文本,因此在我看来,在生成的 XPS 代码中找到的字形索引与它们所指的字符之间的联系很可能代表在那个时候已经被打破了。 (但是,诚然,这只是一个猜测。)

    我想,text 的表示(与一系列字形相反)将是 XAML 中的 TextBlock 元素。但是,我的猜测是典型的 PDF 到 XPS 转换器不太可能生成 TextBlock 元素。 XPS 主要用于呈现 - 在屏幕上或在纸上 - 它并不认为自己是一种特别适合数据交换(在您的情况下交换文本)的文件格式。

    【讨论】:

    • 这有点道理。我想这就是为什么我在里面搜索时在转换后的 XPS 文件中没有找到任何文本的原因。感谢您解决这个问题!
    【解决方案2】:

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

    【讨论】:

    • 我很想试试你的 Python 脚本。您将 PDF 转换为 XAML 的方法是什么?如果可能的话,我想保留字体和文本。
    • 我用我的电子邮件地址在您的网站上发表了评论。提前感谢您的帮助!
    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 很好的答案!感谢您花时间写下来。我发现了一个名为 TallPDF 的不错的组件,我希望它可以从我拥有的 pdf 中生成 xaml。它可以从pdf创建xps,现在我只需要弄清楚如何用xps制作xaml。
    【解决方案4】:

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

    http://www.mikeswanson.com/XAMLExport/找到它

    【讨论】:

    • 我试过这个插件,它工作正常,但它将文档中的文本转换为路径。我想将文本保留为 XAML 文档中的文本。
    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2021-12-11
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多