[英]Unable to access the printer when hosting to iis
我在MVC中使用rdlc报表,在Visual Studio中运行时打印操作完美运行,但是当发布到同一台机器上设置的iis时,则不会进行打印操作。但是当我将报表以pdf格式返回时,报表会在那里,我可以使用javascript打印文件。但是我实际上不需要显示报告,而是希望从服务器打印。。谢谢您的帮助
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();
}
}
我认为您想从服务器本身打印页面。 检查运行应用程序的身份 。 如果它在默认帐户下运行,则将其更改为您的帐户或具有打印机访问权限的其他帐户 。
转到IIS,(a)首先找到您的应用程序正在使用的应用程序池 (b),然后转到“ 应用程序池”详细信息并找到它正在使用的标识 。 (c)将此身份更改为您/其他具有打印机访问权限的帐户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.