开发silverlight下的xps浏览器,支持xps printer输出格式

针对XPS打印机输出的文件格式问题,本文详细介绍了Silverlight环境下遇到的两大难题:一是资源流无法获取,二是字体显示异常,并给出了具体的解决方案,包括自定义资源流获取方法及字体信息读取技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


很多人都做出了silverlight 版本的xps 浏览器,但很多人都卡在了xps printer输出的xps格式上,结果只能浏览Office saveas 导出的xps,而xps printer输出的xps文件一概不认;今天就来说说这个xps printer 输出的格式问题

 

当xps文档是打印输出的,导致的现象是如下这样子

1、Application.GetResourceStream娶不到任何东西,因为它缺少了zipPackageStreamResourceInfo

2、用SharpZip写了Application.GetResourceStream替换方法,字体出不来,xaml load一执行,就报个0行0列错

 

问题1很好解决

找个silverlight 的zip库的开源实现,然后重写个 Application.GetResourceStream 方法,类似:

internal static StreamResourceInfo GetResourceStream(Stream stream, Uri path) 

   var result = Application.GetResourceStream(new System.Windows.Resources.StreamResourceInfo(stream, null), path); 
   if (result != null) 
       return result;

    if (stream.CanRead) 
    { 
        ZipFile zipFile = new ZipFile(stream); 
        return (from ZipEntry entity in zipFile 
                where entity.Name == path.ToString() 
                select ExtractFile(zipFile, entity) 
                into outMem select new StreamResourceInfo(outMem, null)).FirstOrDefault(); 
    } 
    return null; 

问题2又是个什么现象呢?

问题起源与 FontSource 只支持Application.GetResourceStream获取的Stream(internalMemoryStream) ;并不支持上面那个zip返回的 MemoryStream。

出现这个问题,一般也就是死菜了,除非你重写FontSource ,Glyphs相关的字体字库的实现,比如这个很牛 X 的 First floor Document toolKit,它可是看准了这个问题,重写了大堆东西,整了个控件拿来卖钱的;

解决办法也不是没有,用替换大法;Glyphs 用来描述文本,找个类似的UIElement,替换过去,也差不多了;前提是,还是得处理好 FontInfo,毕竟没给字体字形,那文本也就面目全非了;

这个时候需要做什么,就是读odttf文件,找出字体名,具体参照 monolight的c++源码

 

未完待续……




本文转自suifei博客园博客,原文链接:http://www.cnblogs.com/Chinasf/archive/2010/09/24/1833863.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值