Unable to access the printer when hosting to iis

此生再无相见时 提交于 2019-12-11 01:39:50

问题


I am using rdlc report in MVC,Printing operation works perfectly when running in visual studio, but when published to iis which is set up in the same machine,printing operation is not taking place.But when I return the report as pdf the report it is there,and I can print the file using javascript.But I actually need not want to display the report but want to print from server..Thanks For help in advance

  public ActionResult GenerateOrder()
    {


        try
        {

            LocalReport report = new LocalReport();
            report.ReportPath = (Server.MapPath("~/Reports/Report1.rdlc"));
            Export(report);
            Print();
        }
        catch (Exception Ex)
        {

        }

        return View();
    }

    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.25in</MarginTop>
            <MarginLeft>0.25in</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 int m_currentPageIndex;
    private IList<Stream> m_streams;

    private void PrintPage(object sender, PrintPageEventArgs ev)
    {
        try
        {
            Metafile pageImage = new
                        Metafile(m_streams[m_currentPageIndex]);

            // Adjust rectangular area with printer margins.
            Rectangle adjustedRect = new Rectangle(
                ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
                ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
                ev.PageBounds.Width,
                ev.PageBounds.Height);

            // Draw a white background for the report
            ev.Graphics.FillRectangle(Brushes.White, adjustedRect);

            // Draw the report content
            ev.Graphics.DrawImage(pageImage, adjustedRect);

            // Prepare for the next page. Make sure we haven't hit the end.
            m_currentPageIndex++;
            ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
        }
        catch (Exception ex)
        {

        }

    }
   private void Print()
    {
        if (m_streams == null || m_streams.Count == 0)
            throw new Exception("Error: no stream to print.");
        PrintDocument printDoc = new PrintDocument();
        if (!printDoc.PrinterSettings.IsValid)
        {
            throw new Exception("Error: cannot find the default printer.");
        }
        else
        {

            PrinterSettings pset = new PrinterSettings();
            printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
            m_currentPageIndex = 0;
            printDoc.PrinterSettings.PrinterName = pset.PrinterName;
            printDoc.Print();
        }
    }

回答1:


I think you want to print the page from Server itself. Check the Identity under which your application is running. If it is running under default account then change it to either your account or to a different account that has printer access.

Go to IIS, (a) First find the Application Pool your app is using (b) And then go to Application Pool details and find the Identity it is using. (c) Change this Identity to your/some other account that has printer access.



来源:https://stackoverflow.com/questions/42827027/unable-to-access-the-printer-when-hosting-to-iis

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!