2017-04-23 66 views
0

我试图打印服务器报告,而不使用C#预览。该报告在WidowsXP中正常打印,但在Windows 7和Windows 10中以缩放视图打印。下面是我的代码。打印服务器报告没有预览显示缩放报告

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Drawing.Printing; 
using System.Drawing.Imaging; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 
using Microsoft.Reporting.WinForms; 

namespace Dahlawi.ManPower.Recruiting.Forms 
{ 
public partial class FrmReportViewer1 : Form 
{ 
    List<Metafile> m_ReportPages = new List<Metafile>(); 
    int m_ReportPageIndex = 0; 

    public FrmReportViewer1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     PrintDocument objPrintDoc = new PrintDocument(); 

     objPrintDoc.PrintPage += PrintPageHandler; 

     PrintDialog objPrintDiag = new PrintDialog(); 
     objPrintDiag.Document = objPrintDoc; 

     DialogResult objDiagResult = default(DialogResult); 
     objDiagResult = objPrintDiag.ShowDialog(); 

     if (objDiagResult == DialogResult.OK) 
     { 
      objPrintDoc.PrinterSettings = objPrintDiag.PrinterSettings; 

      this.m_ReportPages = new List<Metafile>(); 

      this.m_ReportPageIndex = 0; 

      this.reportViewer.ShowCredentialPrompts = false; 
      this.reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials = new System.Net.NetworkCredential("USER", "PASSWORD", "DOMAIN"); 

      this.reportViewer.ServerReport.ReportServerUrl = new Uri("http://SERVER/ReportServer"); 
      this.reportViewer.ServerReport.ReportPath = "/DMR/Candidate_Information"; 

      ReportParameter[] reportParameters = new ReportParameter[] { new ReportParameter("CandidateId", "16744") }; 
      reportParameters[0].Visible = false; 
      this.reportViewer.ServerReport.SetParameters(reportParameters); 
      this.reportViewer.RefreshReport(); 

      string deviceInfo = "<DeviceInfo>" + "<OutputFormat>emf</OutputFormat>" + " <PageWidth>8.5in</PageWidth>" + " <PageHeight>11in</PageHeight>" + " <MarginTop>0.2in</MarginTop>" + " <MarginLeft>0.5in</MarginLeft>" + " <MarginRight>0.5in</MarginRight>" + " <MarginBottom>0.2in</MarginBottom>" + "</DeviceInfo>"; 

      Warning[] objWarnings = null; 
      string[] sStreamIDs = null; 
      string sMimeType = ""; 
      string sEncoding = ""; 
      string sFilenameExtension = ""; 

      byte[] renderedPage = null; 

      renderedPage = this.reportViewer.ServerReport.Render("Image", deviceInfo, out sMimeType, out sEncoding, out sFilenameExtension, out sStreamIDs, out objWarnings); 
      this.m_ReportPages.Add(new Metafile(new MemoryStream(renderedPage))); 

      foreach (string sStreamId in sStreamIDs) 
      { 
       renderedPage = this.reportViewer.ServerReport.RenderStream("Image", sStreamId, deviceInfo, out sMimeType, out sEncoding); 
       this.m_ReportPages.Add(new Metafile(new MemoryStream(renderedPage))); 
      } 

      objPrintDoc.Print(); 

      objPrintDoc = null; 
     } 
    } 

    private void PrintPageHandler(object sender, PrintPageEventArgs e) 
    { 
     if (this.m_ReportPageIndex < this.m_ReportPages.Count) 
     { 
      Metafile imgPage = this.m_ReportPages[this.m_ReportPageIndex]; 

      this.m_ReportPageIndex += 1; 

      e.Graphics.DrawImage(imgPage, 0, 0, imgPage.Width, imgPage.Height); 

      e.HasMorePages = this.m_ReportPageIndex < this.m_ReportPages.Count; 
     } 
    } 
} 

}

当我打印使用上述在WindowsXP它打印这样Proper Print

但是,当我在Windows 7或Windows 10运行相同的代码,它打印这样Zoomed Print

代码的报告

请帮我在Windows 7/Windows 10上运行此代码。如果需要,我可以提供更多详细信息。

回答

0

我发现了这个问题,它是导致Windows 7和Windows 10上的问题,但在Windows XP/Windows 2003上正常工作的“emf”输出格式。我将“deviceInfo”字符串中的输出格式从“ emf“改为”jpg“(其他格式,例如”png“,”jpeg“,”bmp“也可以正常工作),然后我将”m_ReportPages“列表对象的类型从”Metafile“更改为”Image“,并解决了问题。