2017-04-23 17 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" emp "から" jpg "(他の形式、例えば" png "、" jpeg "、" bmp "もうまくいきます)、" m_ReportPages "リストオブジェクトのタイプを" Metafile "から" Image "に変更し、問題を解決しました。

関連する問題