托管到 iis 时无法访问打印机
Unable to access the printer when hosting to iis
我在 MVC 中使用 rdlc 报告,在 visual studio 中 运行 时打印操作完美,但是当发布到在同一台机器上设置的 iis 时,打印操作没有进行 place.But 当我 return 报告为 pdf 格式时,报告在那里,我可以使用 javascript.But 打印文件我实际上不需要显示报告但想从服务器打印..感谢提前帮助
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();
}
}
我想你想从服务器本身打印页面。检查 Identity,您的申请是 运行。如果它在默认帐户下是 运行,则将其更改为 您的帐户 或具有打印机访问权限的不同帐户。
转到 IIS,
(a) 首先找到您的应用正在使用的应用程序池
(b) 然后转到 Application Pool details 并找到它正在使用的 Identity。 (c) 将此身份更改为 your/some 具有打印机访问权限的其他帐户。
我在 MVC 中使用 rdlc 报告,在 visual studio 中 运行 时打印操作完美,但是当发布到在同一台机器上设置的 iis 时,打印操作没有进行 place.But 当我 return 报告为 pdf 格式时,报告在那里,我可以使用 javascript.But 打印文件我实际上不需要显示报告但想从服务器打印..感谢提前帮助
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();
}
}
我想你想从服务器本身打印页面。检查 Identity,您的申请是 运行。如果它在默认帐户下是 运行,则将其更改为 您的帐户 或具有打印机访问权限的不同帐户。
转到 IIS, (a) 首先找到您的应用正在使用的应用程序池 (b) 然后转到 Application Pool details 并找到它正在使用的 Identity。 (c) 将此身份更改为 your/some 具有打印机访问权限的其他帐户。