【发布时间】:2010-09-25 19:51:51
【问题描述】:
【问题讨论】:
标签: c# .net wpf visual-studio xaml
【问题讨论】:
标签: c# .net wpf visual-studio xaml
我已经编写了两个基于 PDFRenderer 库(开源)的 PDF 到 XAML 转换程序。我需要它来将我的数学文档和/或绘图转换为 XAML,以便在通过 Internet 进行辅导时将它们粘贴到(我自己设计的)共享白板上,请参阅http://www.mathcoach.ch/blog/?p=30。
主要问题是字体引用(“字形”)的转换。如果您使用 PDFRenderer,其中包括将字体引用转换为轮廓,则很容易生成仅包含 Path 元素的 XAML 代码。据我所知,由于 XAML 不允许您直接插入图像,因此我的两个转换程序不转换光栅图像,但只是默默地删除它们(转换光栅图像只是我不这样做现在考虑值得我花时间)。
要仅使用 Path 元素将 PDF 转换为 XAML,您可以简单地实现一个 Graphics2D 对象(如果您从 org.apache.batik.ext.awt.g2d.AbstractGraphics2D 继承,事情会变得更容易)。在这种情况下实现的主要方法是 fill() 和 stroke(),这很容易做到,因为 Java2 的 GeneralPath 对象非常巧妙地映射到 XAML 的 Path 元素(线段、二次和三次 Bézier 线段)。
但是请注意,如果原始 PDF 包含大量文本(字形引用),则生成的 XAML 代码将会很大。每 A4 页的文本大约 2MB。但是,它适用于仅包含相对较少字形引用的数学绘图。
对于我自己的 PDF,我可以保留字形引用,即不必将它们转换为轮廓,因此也不必转换为路径元素,因为我只使用肯定已经安装在文档所在的计算机上的字体是要显示的。此外,这需要一个相对脆弱的转换字形索引的过程,以便它们在用作已安装字体文件的索引时恰到好处。
【讨论】:
我会说,出于阅读书籍控件的目的,将文档转换为图像是更好的解决方案,因为这样可以避免创建大量 XAML 文档和大量处理。
有许多免费和商业库可以将 PDF 文档逐页转换为图像。根据性能要求,您可以在打开文档时创建页面列表,也可以根据需要获取并转换每个页面,可能会缓存以前的页面。天空才是真正的极限。
【讨论】: