[英]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.