在BookControl中显示PDF。将PDF转换为XAML?

时间:2010-09-25 19:51:52

标签: c# .net wpf visual-studio xaml

我有一个PDF,我想在Book Control中显示。 由于此控件无法使用PDF,因此我必须使用图像或将PDF转换为XAML来解决此问题。

最优雅的方法是什么?

2 个答案:

答案 0 :(得分:3)

我根据PDFRenderer库(开源)编写了两个PDF到XAML的转换程序。我需要这个,以便将我的数学文档和/或绘图转换为XAML,以便我可以在通过互联网辅导时将它们粘贴到共享的白板(我自己的设计)中,请参阅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,我可以保留字形引用,即不必将它们转换为轮廓,因此也不必转换为Path元素,因为我只使用了肯定已安装在文档所在机器上的字体是要显示。此外,这需要一个相对脆弱的转换字形索引的过程,以便它们恰好用作已安装字体文件的索引。

答案 1 :(得分:1)

我想说,为了阅读书籍控件,将文档转换为图像是一个更好的解决方案,因为这样可以避免创建大量的XAML文档和大量处理。

有许多免费和商业图书馆可以逐页将PDF文档转换为图像。根据性能要求,您可以在打开文档时创建页面列表,也可以根据需要获取和转换每个页面,可能还需要对先前页面进行一些缓存。天空是极限。