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


    很多人都做出了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++源码

     

    未完待续……

    版权信息
    作者:Chinasf
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    打开CAD时出现“acvmtools.arx ARX命令中发生异常
    VS2010编译错: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403...的解决方法
    CAD中的相对坐标和绝对坐标
    CAD中的文本编排操作
    使用VS2008,VS2010编译64位的应用程序
    已知两切线和半径画圆弧和圆
    AutoCAD2012启动错误 1308 源文件未找到
    C++中的static修饰的变量和函数
    VS2010创建C++静态链接库创建和使用
    Python中同时用多个分隔符分割字符串的问题
  • 原文地址:https://www.cnblogs.com/Chinasf/p/1833863.html
Copyright © 2020-2023  润新知