GVKun编程网logo

css – Silverlight HTML Bridge打印window.print()空白页面

11

在这里,我们将给大家分享关于css–SilverlightHTMLBridge打印window.print()空白页面的知识,同时也会涉及到如何更有效地c#–SilverlightProgrammat

在这里,我们将给大家分享关于css – Silverlight HTML Bridge打印window.print()空白页面的知识,同时也会涉及到如何更有效地c# – Silverlight Programmatical Drawing(从Windows Forms转换为Silverlight)、html5 – HTML 5 CSS 3> = Microsoft Silverlight、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧、Mobilize.Net Silverlight bridge to Windows 10 UWP的内容。

本文目录一览:

css – Silverlight HTML Bridge打印window.print()空白页面

css – Silverlight HTML Bridge打印window.print()空白页面

我使用 HTML桥window.print()打印范围在20-30之间.
客户说它正在打印空白页面.
我们只能在他们的机器上重现它.

这是xaml中的代码,它将一个页面中的所有页面组合在一起并打印出来.
此代码适用于我并打印所有页面.我们只在IE上需要这个
我使用的是Windows 8和IE 10.但是对于客户端,它会打印一个带有页眉和页脚URL的空白页面.如果他打印当前页面或从头到尾打印所有页面,它可以正常工作.

但如果他试图打印范围,23-30,它只打印23-27左右.
有时它只打印一个带有页眉和页脚URL的空白页面.不幸的是,这些都不会发生在我的机器上客户说他们在IE 8,IE 9和IE 11上尝试过它.
有人可以建议我有什么选择或者我可以注意什么

Page.xaml.cs


       Dictionary<int,List<string>> AllPages = new Dictionary<int,List<string>>();
        --code to add to AllPages
   // Load all pages onto page
             for (int Page = startPage; Page <= endPage; Page++)
                            {
                                if (AllPages.ContainsKey(Page))
                                {

                                    List<string> PageLines = AllPages[Page];
                                    this.m_Div = this.m_HtmlDoc.CreateElement("DIV");
                                    if (Page != AllPages.Count)
                                    {
                                        this.m_Div.SetAttribute("ID","Page");
                                    }
                                    this.m_Table = this.m_HtmlDoc.CreateElement("TABLE");
                                    this.m_Div.AppendChild(this.m_Table);

                                    for (int Line = 0; Line < PageLines.Count; Line++)
                                    {
                                        this.m_TR = this.m_HtmlDoc.CreateElement("TR");
                                        this.m_TD = this.m_HtmlDoc.CreateElement("TD");
                                        this.m_TD.SetProperty("innerText",PageLines[Line]);
                                        this.m_TR.AppendChild(this.m_TD);
                                        this.m_Table.AppendChild(this.m_TR);
                                    }
                                    this.m_PrintReport.AppendChild(this.m_Div);
                                }
                            }

      HtmlPage.Window.Invoke("printfunction",m_PrintReport);

CSS

body
{
    background:#ffffff;
    color:#000000;
    font-family: rvConsolas;
     margin: 0px;  /* the margin on the content before printing */
     width:100%;
     height:100%;
     background-color:#DDD;
     min-height:100%;

}

html{
    width:100%;
    height:100%;
}

@font-face
{
    font-family: rvConsolas;
    font-style: normal;
    font-weight: normal;
    src: url(EmConsola.eot);
    src: url('EmConsola.eot?#iefix') format('embedded-opentype')
}

 @page 
        {
            size: auto;   /* auto is the current printer page size */
            margin: 0mm;  /* this affects the margin in the printer settings */

        }


#rptViewer 
{
    display: none;
    visibility: hidden;
}

#printReport
{
    visibility: visible;
    font-family: rvConsolas;
    overflow: hidden;
     display:inline-block;
}

td 
{
    font-family: rvConsolas;
    overflow:visible;
    font-size: 52%;
    display:block;
}

#Page
{

    page-break-after: always;


}

ASPX

<link href="Style/style.css" rel="Stylesheet" media="screen" />
        <link href="Style/print.css"  type="text/css" rel="Stylesheet" media="print" />
        <script src="Scripts/Silverlight.js" type="text/javascript"></script>

        <script type="text/javascript">

            function init() {
                printReport.style.display = false;
            }
            function onslload(plugIn,userContext,sender) {
                alert("silverlight");
                window.status +=
                    plugIn.id + " loaded into " + userContext + ". ";
            }

            function printfunction(arg) {
                var contents = arg.innerHTML;
                var frame1 = document.createElement('iframe');
                frame1.name = "frame1";

                frame1.style.position = "absolute";
                frame1.style.top = "-1000000px";
                document.body.appendChild(frame1);
                var frameDoc = (frame1.contentwindow) ? frame1.contentwindow : (frame1.contentDocument.document) ? frame1.contentDocument.document : frame1.contentDocument;
                frameDoc.document.open();
                frameDoc.document.write('<html><head>');
                frameDoc.document.write('</head><body>');
                var path = "Style";
                var style = document.createElement('link');
                style.rel = 'stylesheet';
                style.type = 'text/css';
                style.href = path + '/print.css';
                frameDoc.document.getElementsByTagName('head')[0].appendChild(style);
                frameDoc.document.write(contents);
                frameDoc.document.write('</body></html>');
                frameDoc.document.close();
                setTimeout(function () {
                    frame1.contentwindow.focus();
                    frame1.contentwindow.print();
                    document.body.removeChild(frame1);
                },1000);
            }
        </script>     
    </head>
<body>
    <div id="printReport"https://www.jb51.cc/tag/Now/" target="_blank">Nowrap;   ">


    </div>
</body>

解决方法

有一些值得检查的东西,因为你没有提供足够的CSS来重现问题

>首先,这是一个HTML问题,与Silverlight无关.您应该能够生成原始HTML文件,以在客户端站点上重现该问题.
>其次,您应该尝试打印到不同的纸张尺寸.美国A4尺寸略短于国际A4.
>您应该探索使用CSS分页符指令:

div#PAGE {page-break-after: always;}

>更新如果您希望支持页面方向,则可以在CSS中使用media queries.

@media print and (orientation: landscape) {
    /* landscape styles */
}

@media print and (orientation: portrait) {
    /* portrait styles */
    div#PAGE {page-break-after: always;}
}

>由于我们的贫穷开发者仍然需要支持(咳嗽)IE8 – 试用polyfill.它们是提供IE8媒体查询支持的JavaScript库.见respond.js或modernizr.

c# – Silverlight Programmatical Drawing(从Windows Forms转换为Silverlight)

c# – Silverlight Programmatical Drawing(从Windows Forms转换为Silverlight)

我有一个世界(一个PictureBox和一个大小(行*列)的位图和从 Windows窗体中的位图创建图形)以下是代码,

bmp = new Bitmap(columns*32,rows*32);
    graphics = Graphics.FromImage(bmp);
    pictureBox1.Size = new Size(columns * 32,rows * 32);
    pictureBox1.Image = bmp;

这我用来填充Windows窗体中的图形,

private void drawImageInBox(Image src,int BoxX,int BoxY,int Offset = 0)
    {
        graphics.DrawImage(src,new Point((BoxY * 32) + Offset,(BoxX * 32) + Offset));
    }

当所有操作完成后我只刷新PictureBox,

pictureBox1.Refresh();

我如何在Silverlight xaml中实现这一目标?

解决方法

你会想要这样的东西:

在你的XAML中:

<Grid x:Name="world_grid" Width="100" Height="100">
  <Grid.RowDeFinitions>
    <RowDeFinition Height="*" />   <!--Repeat this for however many rows you need -->
  </Grid.RowDeFinitions>
  <Grid.ColumnDeFinitions>
    <ColumnDeFinition Width="*" /> <!--Same here,for columns-->
  </Grid.ColumnDeFinitions>
</Grid>

在你的代码隐藏中:

for each image you need to add:
  Image img = new Image();
  img.source = new Uri("some/dir/img.png"); // coding in-place,can't remember Syntax
  world_grid.Children.Add(img);
  Grid.SetRow(img,0); // places this image in row 0
  Grid.SetColumn(img,5); // places this image in column 5

一个非常重要的注意事项:每次“刷新”您的“世界”时,请确保在重新添加之前删除相应的图像!更好的是,您可以在某些数组中跟踪这些图像,并更改其行/列.如果需要,可以将图像的可见性设置为隐藏/折叠.

html5 – HTML 5 CSS 3> = Microsoft Silverlight

html5 – HTML 5 CSS 3> = Microsoft Silverlight

据说未发布的 HTML 5和CSS 3可以产生可以在Microsoft Silverlight中完成的效果和图形.这是真的,那么我可以跳过学习Silverlight并等待 HTML5和CSS 3吗?

解决方法

Silverlight是用于开发Web应用程序的工具(RIA – 富Internet应用程序).

纯HTML CSS(即使它是HTML5和CSS3)只会产生网站,除非你在它们后面添加一些代码/框架.

因此,虽然在视觉上它们可能看起来相似但它们是幕后的两个完全独立的东西

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

默认情况下,生成的页面代码可能与下面的代码类似:

复制代码 代码如下:




IRERTranscript














Get Microsoft Silverlight






  我们可以给object对象传递不同的参数,如xap包的加载地址,onLoad或onError事件句柄,背景色,最小版本号支持等等,完整的参数信息读者可以参考Silverlight 3中param参数列表汇总。object对象中一般会包含一段标记,是用来显示当客户端浏览器未安装Silverlight插件时要显示的内容的,我们可以自定义其中的内容,如:
复制代码 代码如下:







Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧





  当客户端浏览器未安装Silverlight插件时,程序会在相应的区域显示一张带有热区的图片,热区指向的位置是Microsoft提供的Silverlight安装地址。理论上,你可以指定任何的自定义代码来显示nonSilverlight的效果,但是Silverlight默认没有提供低版本Silverlight情况下要显示的效果,也就是lowSilverlight的情况。
Silverlight可以自动实现向前兼容,也就是在低版本下编译的Silverlight包可以在高版本下运行,相反,在高版本下编译的Silverlight包不能再低版本下运行,此时Silverlight插件会显示一张默认的图片用来告知用户升级插件,并弹出一个提示框,如下图:

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

 

Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧

 

  个人觉得这种用户体验并非很好,试想,如果当前页面上有多个Silverlight插件,岂不是要弹出多个提示框吗?那么如何来解决这个问题呢?事实上,我们除了直接在页面上添加object标记来呈现Silverlight外,还可以通过javascript脚本来动态添加Silverlight。Silverlight.js脚本为我们提供了一系列可用的方法,详细内容大家可以参考下msdn http://msdn.microsoft.com/zh-cn/library/cc838126(v=VS.95).aspx#isinstalled

  以及如何通过脚本在页面上添加Silverlight,http://msdn.microsoft.com/zh-cn/library/cc265155(v=VS.95).aspx

  msdn上给出了非常详细的例子来告诉我们如何使用这些脚本方法,有一点需要注意,使用Silverlight.js文件时一定要与当前Silverlight版本相一致,否则可能会有脚本错误,对应的Silverlight.js文件可以在微软的站点上下载,你会发现其实有很多个可用的版本,其中还包括支持调试的版本哦。

  createObject方法参数在使用的时候有几个问题需要注意下:

  1. 参数按顺序指定,如果有不需要传递的参数可用null代替。

  2. parent element参数必须指定,也就是object标记的父元素,可直接将元素的id当做对象传入,但是在Firefox中不支持,此时可以使用document.getElementById(''elementId'')语句代替该参数即可。

  3. param列表通过数组传递,参数名称与在object标记中使用的名称保持一致即可。

  4. 事件列表如果没有对应的页面脚本则传null值,否则会报脚本错误。

  5. 最后一个参数context如果不需要可以省去,不用传null或空值。

  你应该注意到了,在使用createObject方法时我们可以顺便给Silverlight指定nonSilverlight效果,这个是通过param列表中的altHtml参数来指定的,实施上,我们在页面上直接使用object标记呈现Silverlight时也可以使用alt属性来指定nonSilverlight效果,这个与在object标记中直接插入html代码的效果相同。
通过使用createObject方法,我们完全可以自定义lowSilverlight效果了,下面是一个例子:

复制代码 代码如下:






  使用Silverlight.isInstalled()方法可以判断客户端浏览器是否已经安装了指定版本的Silverlight插件,如果已经安装了,则使用Silverlight.createObject方法创建Silverlight对象,否则输出自定义的内容。

这里还有一篇文章个人觉得很有用,给大家分享下吧!

http://www.itstrike.cn/Question/Use-JavaScript-to-create-Silverlight-Object-createObject

Mobilize.Net Silverlight bridge to Windows 10 UWP

Mobilize.Net Silverlight bridge to Windows 10 UWP

Windows UWP 既 Windows 10 Universal Windows platform,这个微软基于Windows NT内核的个运行时(Runtime)平台,此平台横跨所有的 Windows 10 device 例如windows10 手机、平板、serface、以至于树莓派这样的嵌入式设备。

由于一些历史原因之前在 Windows Phone 7.x / 8.x 的应用商店中充斥着大量的 Windows Phone Silverlight(WPSL) 架构的应用,由于应用的开发架构不同,开发者们如果想把WPSL应用迁移到Windows UWP平台上以服务于更多的Windows10设备就需要一些额外的工作量,有些开发者朋友对此很苦恼,因为有些代码或者控件在Windows10 UWP平台已经发生了较大的变化。

今天在这里给大家介绍一个可以帮助开发者升级应用的工具 Mobilize.Net Silverlight bridge 这是一个Visual Studio的集成工具插件,可以帮助开发者将一个WPSL应用转换成一个Windows 10 UWP应用。(此工具目前是一个预览版所以在使用的时候还会遇到一些问题,不过即便如此大家可以先下载一个尝试一下也不会有什么损失对吧。)

首先登陆 mobilize 的网站进行下载

安装这个 MobilizeNetSilverlightBridge.msi 执行文件

随后在你的 VisualStudio 项目属性中会有一个 Convert to UWP 的选项

接着我们选择好项目的输入和输出路径这里输入的路径要注意要使用你的UI项目因为这里会有一些项目间的引用关系,Silverlight Bridge会自动检测到这些引用进行分析处理一同进行转换工作。

点击开始后会自动进行转换随后我们可以通过 upgrade report 和 log日志 查看转换的过程遇到的问题和情况。

转换以后尝试编译,因为这里我用的是一个默认的Pivot模板程序并没有遇到问题,不过我在尝试转换转换一些其他项目的时候还是遇到一些问题的,请大家在注意在转换的时候查看Log日志

另外我发现在转换完成的项目中会多出一个 Helper 文件夹,在这个项目中并没有使用到但是从代码上看应该是一个与应用适配相关的处理类。

接下来我尝试分析一下这个转换器的工作内容

首先它会更新转换项目的 manifest 文件这里包括应用的名称应用的 nuget的引用,应用图标,Capability,declaration 等功能的迁移

其次它会帮助我们mapping Silverlight API –> WinRT API 这里的内容相对来说就比较复杂了,这里如果是之前应用的业务逻辑应该不牵扯太多的转变因为毕竟都是C#,关于 Silverlight 和 WinRT 都有的 feature 的 mapping功能应该是控件级的mapping实现的代码替换,但是由于语法的近似可以转义大部分功能代码,但是我也发现在转换的时候如果是遇到 agent project的时候转换会失败,这应该是由于 WindowsRT 的 Background Task机制的问题,希望下一个版本会修复这个问题。

接着是XAML的 mapping 这个逻辑我觉得就更复杂了,因为 XAML的绑定逻辑都是和业务逻辑扭转的非常紧密,并且涉及到一些页面样式或者控件样式,这样的内容失败的几率就会更大,但是在这里这个工具可以帮助我们了解我们之前使用过的控件在WindowsRT中是否还支持或者应该大致怎样修改,至少起到了一个指引作用。

还有一个关于 Async and Await APIs 的问题因为这个Async Await是 .net 4.5 的一个新语法,有大量的SDK都改成这种异步的的语法,所以有可能涉及到方法merge的问题请开发者朋友们注意下。

最后强调的是这个bridge本身也是一个开源项目目前在Github上可以找到 传送门 目前这个预览版已经包括了700个作用的API映射,在十一月还将会完成更多的API映射(会达到1200个映射功能)开发者朋友不仅可以使用这个工具,而且还可以根据自己的需求进行扩展,并分享给其他开发者使用。

如果你有一个 Windows Phone Silverlight 项目那就不妨尝试一下这个工具看看可否帮助你把应用迁移到 Windows10 UWP上来 :)

原文地址: http://www.cnblogs.com/sonic1abc/p/4846472.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注公众号

关于css – Silverlight HTML Bridge打印window.print()空白页面的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于c# – Silverlight Programmatical Drawing(从Windows Forms转换为Silverlight)、html5 – HTML 5 CSS 3> = Microsoft Silverlight、Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式_javascript技巧、Mobilize.Net Silverlight bridge to Windows 10 UWP等相关内容,可以在本站寻找。

本文标签:

上一篇css – 指南针内嵌图像语法/配置(html指南针)

下一篇css – 使用sprockets-sass加速罗盘sass编译