打印在ASP.net RDLC报告没有在客户端preVIEW [英] Print RDLC Report in ASP.net without preview on Client Side

查看:163
本文介绍了打印在ASP.net RDLC报告没有在客户端preVIEW的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Visual Studio中运行时,打印本地罚款RDLC报告。当我上传
我的项目,它不会打印服务器。我在做一些研究和了解,当该项目是在服务器尝试打印服务器上,而不是在客户机上。有谁现在怎么打印到客户机?

 专用流CreateStream(字符串名称,字符串fileNameExtension,编码编码,串mime类型,布尔willSeek)
    {
        流流=新的MemoryStream();
        m_streams.Add(流);
        返回流;
    }    私人无效导出(LocalReport报告)
    {
        串deviceInfo =
          &所述; DeviceInfo>中+
          &所述; OUTPUTFORMAT>电动势&下; / OUTPUTFORMAT>中+
          <&页宽GT; 8.5in< /页宽>中+
          &所述; PageHeight> 11英寸或下/ PageHeight>中+
          &所述; MarginTop> 0.01英寸及下; / MarginTop>中+
          &所述; MarginLeft> 0.02in&下; / MarginLeft>中+
          &所述; MarginRight> 0.25英寸及下; / MarginRight>中+
          &所述; MarginBottom> 0.25英寸及下; / MarginBottom>中+
          &所述; / DeviceInfo>中;
        警告[]警告;
        m_streams =新的List<流>();
        report.Render(图像,deviceInfo,CreateStream,出警告);
        的foreach(在m_streams流流)
        {
            stream.Position = 0;
        }
    }
    私人无效的PrintPage(对象发件人,PrintPageEventArgs EV)
    {
        图元文件pageImage =新图元文件(m_streams [currentPageIndex]);
        ev.Graphics.DrawImage(pageImage,ev.PageBounds);
        currentPageIndex ++;
        ev.HasMorePages =(currentPageIndex< m_streams.Count);
    }
    私人无效Print_Ticket()
    {        常量字符串PRINTERNAME =HP DESKJET
        如果(m_streams == NULL || m_streams.Count == 0)
            返回;
        PrintDocument的printDoc =新的PrintDocument();
        printDoc.PrinterSettings.PrinterName = PRINTERNAME;
        如果(!printDoc.PrinterSettings.IsValid)
        {
            弦乐味精=的String.Format(找不到打印机\\{0} \\,PRINTERNAME。);
            Console.WriteLine(MSG);
            返回;
        }
        printDoc.PrintPage + =新PrintPageEventHandler(的PrintPage);
        printDoc.Print(); //打印文档
    }
    公共无效WriteTicket(字符串TICKET_NUMBER,串队列)
    {
        LocalReport报告=新LocalReport();
        //显示票字母和数字的票
        report.ReportPath =PrintTicket.rdlc;
        ReportParameter ticket_parameter =新ReportParameter();
        ticket_parameter.Name =门票;
        ticket_parameter.Values​​.Add(TICKET_NUMBER);
        report.SetParameters(新ReportParameter [] {ticket_parameter});        //显示日期和时间票
        ReportParameter日期=新ReportParameter();
        date.Name =DATE_TIME;
        date.Values​​.Add(System.DateTime.Now.ToString());
        report.SetParameters(新ReportParameter [] {日期});        //门票显示器分支机构
        ReportParameter location_parameter =新ReportParameter();
        location_parameter.Name =位置;
        location_parameter.Values​​.Add(队列);
        report.SetParameters(新ReportParameter [] {location_parameter});        出口(报告);
        currentPageIndex = 0;
        Print_Ticket();
    }
    //清除流
    新公共无效的Dispose()
    {
        如果(m_streams!= NULL)
        {
            的foreach(在m_streams流流)
                stream.Close();
        }
    }


解决方案

我一直用我的应用程序中的ReportViewer控件。这具有打印客户机上的观察报告的能力。我想你可以使用,即使它是不可见的这种控制,如果这是你想实现什么做同样的。

如果这是无益的。此链接可能是使用的。
http://msdn.microsoft.com/en-us/library/ms252091.aspx

I have a RDLC report that prints fine locally when is run in Visual Studio. When I upload my project to the server it wont print. I was doing some research and learned that when the project is in the server it tries to print on the server, not in the client machine. Does anybody now how to print to the client machine?

   private Stream CreateStream(string name, string fileNameExtension, Encoding encoding,         string mimeType, bool willSeek)
    {
        Stream stream = new MemoryStream();
        m_streams.Add(stream);
        return stream;
    }

    private void Export(LocalReport report)
    {
        string deviceInfo =
          "<DeviceInfo>" +
          "  <OutputFormat>EMF</OutputFormat>" +
          "  <PageWidth>8.5in</PageWidth>" +
          "  <PageHeight>11in</PageHeight>" +
          "  <MarginTop>0.01in</MarginTop>" +
          "  <MarginLeft>0.02in</MarginLeft>" +
          "  <MarginRight>0.25in</MarginRight>" +
          "  <MarginBottom>0.25in</MarginBottom>" +
          "</DeviceInfo>";
        Warning[] warnings;
        m_streams = new List<Stream>();
        report.Render("Image", deviceInfo, CreateStream, out warnings);
        foreach (Stream stream in m_streams)
        {
            stream.Position = 0;
        }
    }
    private void PrintPage(object sender, PrintPageEventArgs ev)
    {
        Metafile pageImage = new Metafile(m_streams[currentPageIndex]);
        ev.Graphics.DrawImage(pageImage,ev.PageBounds);
        currentPageIndex++;
        ev.HasMorePages = (currentPageIndex < m_streams.Count);
    }


    private void Print_Ticket()
    {

        const string printerName = "HP DeskJet";
        if (m_streams == null || m_streams.Count == 0)
            return;
        PrintDocument printDoc = new PrintDocument();
        printDoc.PrinterSettings.PrinterName = printerName;
        if (!printDoc.PrinterSettings.IsValid)
        {
            string msg = String.Format("Can't find printer \"{0}\".", printerName);
            Console.WriteLine(msg);
            return;
        }
        printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
        printDoc.Print(); //Prints Document
    }
    public void WriteTicket(string ticket_number, string queue)
    {
        LocalReport report = new LocalReport();
        //Displays ticket letter and number in ticket
        report.ReportPath = "PrintTicket.rdlc";
        ReportParameter ticket_parameter = new ReportParameter();
        ticket_parameter.Name = "Ticket";
        ticket_parameter.Values.Add(ticket_number);
        report.SetParameters(new ReportParameter[] { ticket_parameter });

        //Displays date and time in ticket
        ReportParameter date = new ReportParameter();
        date.Name = "Date_Time";
        date.Values.Add(System.DateTime.Now.ToString());
        report.SetParameters(new ReportParameter[] { date });

        //Displays branch location in ticket
        ReportParameter location_parameter = new ReportParameter();
        location_parameter.Name = "Location";
        location_parameter.Values.Add(queue);
        report.SetParameters(new ReportParameter[] { location_parameter });

        Export(report);
        currentPageIndex = 0;
        Print_Ticket();
    }
    //Clears stream
    public new void Dispose()
    {
        if (m_streams != null)
        {
            foreach (Stream stream in m_streams)
                stream.Close();
        }
    }

解决方案

I have always used the ReportViewer control within my apps. This has the ability to print the viewed report on the client machine. I imagine you can do the same using this control even if it is not visible if this is what you are trying to accomplish.

If that isn't helpful. This link may be of use. http://msdn.microsoft.com/en-us/library/ms252091.aspx

这篇关于打印在ASP.net RDLC报告没有在客户端preVIEW的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆