Reporting services 打印服务器报表而不预览显示缩放的报表
我正在尝试使用C#打印服务器报表而不进行预览。报告在WidowsXP中打印良好,但在Windows 7和Windows 10中以缩放视图打印。下面是我的代码Reporting services 打印服务器报表而不预览显示缩放的报表,reporting-services,printing,Reporting Services,Printing,我正在尝试使用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
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;
}
}
}
使用系统;
使用System.IO;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用系统、绘图、打印;
使用系统、绘图、成像;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
使用Microsoft.Reporting.WinForms;
命名空间Dahlawi.ManPower.recrupting.Forms
{
公共部分类FrmReportViewer1:表单
{
List m_ReportPages=新列表();
int m_ReportPageIndex=0;
公共FrmReportViewer1()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
PrintDocument objPrintDoc=新的PrintDocument();
objPrintDoc.PrintPage+=PrintPageHandler;
PrintDialog objPrintDiag=新建PrintDialog();
objPrintDiag.Document=objPrintDoc;
DialogResult objDiagResult=默认值(DialogResult);
objDiagResult=objPrintDiag.ShowDialog();
if(objdiagress==DialogResult.OK)
{
objPrintDoc.PrinterSettings=objPrintDiag.PrinterSettings;
this.m_ReportPages=新列表();
this.m_ReportPageIndex=0;
this.reportViewer.ShowCredentialPrompts=false;
this.reportViewer.ServerReport.ReportServerCredentials.NetworkCredentials=新系统.Net.NetworkCredential(“用户”、“密码”、“域”);
this.reportViewer.ServerReport.ReportServerUrl=新Uri(“http://SERVER/ReportServer");
this.reportViewer.ServerReport.ReportPath=“/DMR/Candidate_Information”;
ReportParameter[]reportParameters=新的ReportParameter[]{new ReportParameter(“CandidateId”,“16744”)};
reportParameters[0]。Visible=false;
this.reportViewer.ServerReport.SetParameters(reportParameters);
这个.reportViewer.RefreshReport();
字符串deviceInfo=“”+“emf”+“8.5in”+“11in”+“0.2in”+“0.5in”+“0.5in”+“0.2in”+”;
警告[]objWarnings=null;
字符串[]sStreamIDs=null;
字符串sMimeType=“”;
字符串sEncoding=“”;
字符串sFilenameExtension=“”;
字节[]renderedPage=null;
renderedPage=this.reportViewer.ServerReport.Render(“Image”、deviceInfo、out sMimeType、out sEncoding、out sFilenameExtension、out sStreamIDs、out objWarnings);
this.m_ReportPages.Add(新图元文件(新内存流(renderdpage));
foreach(sStreamIDs中的字符串sStreamId)
{
renderedPage=this.reportViewer.ServerReport.RenderStream(“Image”、sStreamId、deviceInfo、out sMimeType、out sEncoding);
this.m_ReportPages.Add(新图元文件(新内存流(renderdpage));
}
objPrintDoc.Print();
objPrintDoc=null;
}
}
私有void PrintPageHandler(对象发送方,PrintPageEventArgs e)
{
if(this.m_ReportPageIndex
}
当我在WindowsXP中使用上述代码打印报告时,它的打印方式如下
但当我在Windows7或Windows10中运行相同的代码时,它会打印成这样
请帮助我在Windows 7/Windows 10上运行此代码。如果需要,我可以提供更多详细信息。我发现了问题,是“emf”输出格式导致了Windows 7和Windows 10上的问题,但在Windows XP/Windows 2003上工作正常。我将“deviceInfo”字符串中的输出格式从“emf”更改为“jpg”(其他格式,例如“png”、“jpeg”、“bmp”也可以正常工作),然后将“m_ReportPages”列表对象的类型从“图元文件”更改为“图像”,并解决了问题