Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 打印服务器报表而不预览显示缩放的报表_Reporting Services_Printing - Fatal编程技术网

Reporting services 打印服务器报表而不预览显示缩放的报表

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

我正在尝试使用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;
        }
    }
}
使用系统;
使用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”列表对象的类型从“图元文件”更改为“图像”,并解决了问题