arcgis开发笔记【打印】

简介: Web打印 从网上找了一些关于asp.net打印的资料,参考“关于Web打印”,参考 http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.
Web打印

从网上找了一些关于asp.net打印的资料,参考“关于Web打印”,参考

http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.Public/%e5%85%b3%e4%ba%8eWEB%e6%89%93%e5%8d%b0.docx

最后选择了使用ReportViewer实现打印功能

arcgis silverlight内容的打印

实现思路:

silveilight程序中把页面中需要打印的对象转换成图形base64编码的字符流,提交到服务端

服务端处理程序把这些二进制字符流邦定到ReportViewer控件上,然后由ReportViewer实现打印的展现功能,具体如下:

HOST silverlight的页面

 <div style="visibility:hidden">

<form action="Rpt/print.aspx" method="post" enctype="application/x-www-form-urlencoded" target="_blank">

<input type="text" id="prText" name="prText" />

<input type="submit" id="prBtn" />

</form>

</div>

SilverLight提交打印请求

private void Button_Click(object sender, RoutedEventArgs e)    
{        
  WriteableBitmap bitmap = new WriteableBitmap(this.gridTest, new TranslateTransform());             EditableImage image = new EditableImage(bitmap.PixelWidth, bitmap.PixelHeight);       
 for (int i = 0; i < bitmap.PixelHeight; i++)       
 {           
 for (int j = 0; j < bitmap.PixelWidth; j++)            
{              
  int num3 = bitmap.Pixels[(bitmap.PixelWidth * i) + j];           
     image.SetPixel(j, i, (byte) ((num3 >> 0x10) & 0xff), (byte) ((num3 >> 8) & 0xff), (byte) (num3 & 0xff), (byte) ((num3 >> 0x18) & 0xff));           
 }     
   }    
    Stream stream = image.GetStream();      
  byte[] buffer = new byte[stream.Length];  
      long num4 = stream.Read(buffer, 0, (int) stream.Length);    
    string str = Convert.ToBase64String(buffer, 0, buffer.Length);        HtmlPage.Document.GetElementById("prText").SetProperty("value", str);        HtmlPage.Document.GetElementById("prBtn").Invoke("click", null);  
  }


  打印页面和处理逻辑:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="print.aspx.cs" Inherits="GisSite.Rpt.PrintPreview" %>

<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<rsweb:ReportViewer ID="ReportViewer1" runat="server" Width="100%" Height="600px">

</rsweb:ReportViewer>

</form>

</body>

</html>

// Methods    
private void FillReport(string bytes64)    
{     
   byte[] imageBytes = Convert.FromBase64String(bytes64);    
    printImg.ImageDataDataTable dt = new printImg.ImageDataDataTable();   
     dt.AddImageDataRow(0, "print", imageBytes);        
     this.ReportViewer1.LocalReport.ReportPath ="Rpt/print.rdlc";    
    ReportDataSource src = new ReportDataSource("DSReportPrintImage_ImageData", dt);    
    this.ReportViewer1.LocalReport.DataSources.Add(src);        
    this.ReportViewer1.LocalReport.Refresh();    
}    
 protected void Page_Load(object sender, EventArgs e)   
 {       
 if (!this.Page.IsPostBack)     
   {           
       string bytes64 = base.Request["prText"];     
       if (!string.IsNullOrEmpty(bytes64))           
      {               
           this.FillReport(bytes64);            
      }       
 }   
 }

 

print .RDLC文件

<?xml version="1.0" encoding="utf-8"?>

<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">

<DataSources>

<DataSource Name="DummyDataSource">

<rd:DataSourceID>6dde20a2-6fdf-4054-a23d-0135e6a9e8a4</rd:DataSourceID>

<ConnectionProperties>

<DataProvider>SQL</DataProvider>

<ConnectString />

</ConnectionProperties>

</DataSource>

</DataSources>

<InteractiveHeight>11in</InteractiveHeight>

<rd:DrawGrid>true</rd:DrawGrid>

<InteractiveWidth>8.5in</InteractiveWidth>

<rd:SnapToGrid>true</rd:SnapToGrid>

<RightMargin>1in</RightMargin>

<LeftMargin>1in</LeftMargin>

<BottomMargin>1in</BottomMargin>

<rd:ReportID>66b0e21f-4a8d-4b4e-b652-d28cb44e05e4</rd:ReportID>

<DataSets>

<DataSet Name="DSReportPrintImage_ImageData">

<Fields>

<Field Name="ImageId">

<DataField>ImageId</DataField>

<rd:TypeName>System.Int32</rd:TypeName>

</Field>

<Field Name="ImageName">

<DataField>ImageName</DataField>

<rd:TypeName>System.String</rd:TypeName>

</Field>

<Field Name="ImageBytes">

<DataField>ImageBytes</DataField>

<rd:TypeName>System.Byte[]</rd:TypeName>

</Field>

</Fields>

<Query>

<DataSourceName>DummyDataSource</DataSourceName>

<CommandText />

<rd:UseGenericDesigner>true</rd:UseGenericDesigner>

</Query>

<rd:DataSetInfo>

<rd:DataSetName>DSReportPrintImage</rd:DataSetName>

<rd:TableName>ImageData</rd:TableName>

</rd:DataSetInfo>

</DataSet>

</DataSets>

<Width>6.5in</Width>

<Body>

<ReportItems>

<List Name="list1">

<Left>0.125in</Left>

<DataSetName>DSReportPrintImage_ImageData</DataSetName>

<ReportItems>

<Image Name="image1">

<Sizing>AutoSize</Sizing>

<Top>0.125in</Top>

<Width>5.875in</Width>

<MIMEType>image/png</MIMEType>

<Source>Database</Source>

<Style />

<Left>0.125in</Left>

<Height>1.625in</Height>

<Value>=Fields!ImageBytes.Value</Value>

</Image>

</ReportItems>

<Width>6.125in</Width>

<Height>1.875in</Height>

</List>

</ReportItems>

<Height>2in</Height>

</Body>

<Language>en-US</Language>

<TopMargin>1in</TopMargin>

</Report>

 

相关文章
|
定位技术 数据格式
GIS开发:arcgis server发布CGCS2000切片
GIS开发:arcgis server发布CGCS2000切片
232 0
|
缓存 定位技术
GIS开发:arcgis server切片数据和wmts
GIS开发:arcgis server切片数据和wmts
219 0
|
XML 存储 定位技术
GIS开发:Arcgis的切片格式
GIS开发:Arcgis的切片格式
214 0
|
JavaScript 前端开发 API
关于翻译ArcGIS API for JavaScript开发书籍的经历
 一、机缘来临             获得翻译的机会得追溯到2014年11月份,当时是在CSDN站内消息中看到了胡俊英编辑发来的邀请,然后我们就通过网络的方式联系上,后来得知待翻译的是一本关于利用JavaScript进行WebGIS开发的英文原版的时候,我就接受了这个机会。
1084 0
ArcGIS开发手动添加License类
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/43699511 第一步: 在工程中添加类: 类文件名“LicenseInitializer.
1099 0
|
API 网络架构
ArcGIS API for Silverlight开发中常用问题汇总
下面对于开发中遇到的问题,进行汇总,不断整理补充中,希望对大家有所帮助!   1、在ArcGIS 9.
770 0
|
开发工具
ArcGIS开发帮助文档地址
1、ESRI官方帮助文档 http://resources.arcgis.com/zh-cn/node/1739   http://resources.
714 0
|
API 定位技术 开发工具
ArcGIS API for Silverlight开发入门准备
         微软的Silverlight提供了跨浏览器和跨平台开发环境,在Web中可用于创建和展现富互联网应用(RIA,Rich  Internet Application)。
1067 0
|
API
收集的一些关于ArcGIS API for Silverlight开发的连接
1、ESRI官方的帮助文档是必不可不看的: http://help.arcgis.com/en/webapi/silverlight/help/index.
676 0
|
前端开发 API 开发工具
ArcGIS API for Silverlight开发中鼠标左键点击地图上的点弹出窗口及右键点击弹出快捷菜单的实现代码
1、首先在SL项目中添加一个抽象类ContextMenu.cs文件,代码如下: using System; using System.
1215 0