arcgis开发笔记【打印】

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>

 

时间: 2024-10-22 17:10:50

arcgis开发笔记【打印】的相关文章

arcgis开发笔记【系统介绍】

最近接触了arcgis的项目开发,有空这个东西做成一些笔记发布   先来简单介绍一下arcgis的组成,这个软件套装是很专业的东西,因此对这个软件的整体构成有个了解 对于开发工作比较有方向指导作用.   整个软件产品线的描述  ArcGIS桌面产品(ArcGIS Desktop)是一系列整合的应用程序的总称,包括ArcCatalog,ArcMap,ArcGlobe,ArcToolbox和ModelBuilder.通过协调一致地调用应用和界面,你可以实现任何从简单到复杂的GIS任务,包括制图,地理

arcgis开发笔记【rest服务参考】

上篇文章讲到了要访问地图rest服务,为了把这个服务接口的开发工作弄清,有以下参考: http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.Public/ArcGIS%20Server%209.3%20REST%20%e5%9f%ba%e7%a1%80%e6%95%99%e7%a8%8b.zip 这个是arcgis官方发布的一个rest解说的图书,看了这个可以了解arcgis的rest服务基础和基本架构等内容   了解了以后要用这个re

arcgis开发笔记【参考资料】

由于是新接触arcgis和silverlight的开发,因此快速的找到相关的资料很重要,通过这些例子可以快速的学习, 如下有很多的参考资源的站点:   关于arcgis silverlight的开发 http://www.gisall.com/html/zhuanti/ria/index.html http://bbs.esrichina-bj.cn/ESRI/thread-48129-1-2.html   silverlight的实现方案和例子参考 http://www.silverlight

arcgis开发笔记【silverlight开发资料】

关于silverlight的开发 http://bbs.esrichina-bj.cn/ESRI/thread-48129-1-2.html 以上资料是个很好的开始,涉及了常用的开发任务 我把这个资料和例子独立整理出来放到了一个文档中,我们的开发小组人员都可以看到,现 共享一下供园子人员方便参考: http://cid-56b433ad3d1871e3.skydrive.live.com/self.aspx/.Public/arcGIS-silverlight.docx [文档中的例子代码包括了

arcgis开发笔记【系统的安装】

由于需要熟悉和部署整个arcgis的系统,因此把安装步骤记录一下 ArcGIS有JAVA和.net两个版本,根据服务端开发技术的不同选择不同的安装包 Server安装注意[必选] 安装时系统用户必须有管理员权限,按步骤"下一步"即可,没什么需要特别注意的.安装完之后会在系统中新建3个用户arcgisSOM. arcgisSOC .arcgismanager ,2个用户组agsadmin和agsusers.将当前用户加入agsadmin组以可以管理服务,xp 系统关闭简单文件共享,关闭防

arcgis开发笔记【Oracle远程连接开发】

项目中使用了oracle数据库,为了配置远程连接花费了一些功夫,特记录一下:   由于orcale数据库已经在别的机器安装好了,而开发机器都是自己的机器上的,因此需要远程连接oracle数据库, 网上有说要安装oracle的客户,不过那个工具太大,一个简便的方法是:   前提:首先本机上已安装JDK,并设置了CLASSPATH   [以下来自网络] 1.从Oracle官方下载"Instant Client Package"的软件http://www.oracle.com/technol

arcgis开发笔记【Oracle使用汇总】

由于是第一次应用Oracle系统,在参考相关的资料后,总算顺利安装和开发好了,把 遇到的一些问题总结一下. 1.数据库服务不能启动 在Windows系统中有些时候,Oracle的数据库会无法自动启动成功,但是手动启动却是可以的,在这种情况下我们可以尝试重新创建Oracle服务来看看问题是否能够解决. 重建Oracle服务可以利用Oracle在Windows操作系统下特有的oradim使用程序. 数据库的SID可以通过下面的方法知道: 检查windows的服务,找到类似于OracleService

arcgis开发笔记[silverlight提高访问速度,减小XAP]

用户打开同一SilverLight站点时,由于每次都要重新加载SilverLight应用程序包(.xap文件),因此会大大的降低用户体验.因此微软在SilverLight 3.0版本中提供了应用程序集缓存(Application Library Caching),可以解决这一缺陷.   应用程序集缓包括两个部分:     1.SilverLight本身的程序集缓存:     2.用户自定义程序集缓存. 第一种方式MSDN已经提到,只要在IDE设置一下即可 第二种方式操作时容易出错,具体例子如下:

arcgis开发笔记【DeepZoom应用】

对于图片的显示DeepZoom是个非常棒的技术.   项目中由于需要对于一个高分辨率的图片进行拖动.放大.Zoom out等操作, DeepZoom实现这个功能是小菜一碟 具体的使用就是: 使用DeepZoom Composer建立一个项目,最后导出结果,然后silverlight引用 这个发布的服务地址即可 1.导出的结果为: 2.silverlight使用的方法:   但由于项目中涉及的这种图片文件非常的多,如果手工一个个的处理,太浪费时间, 因此需要一个工具自动化的处理这个问题. http