C# 在rdlc中打印横向/纵向,无需预览

C# 在rdlc中打印横向/纵向,无需预览,c#,printing,render,rdlc,localreport,C#,Printing,Render,Rdlc,Localreport,我正在尝试打印一份本地报告,可以是横向的,也可以是纵向的 private void Export(LocalReport report) { Warning[] warnings; m_streams = new List<Stream>(); var deviceInfo = new StringBuilder(); deviceInfo.AppendLine("<DeviceInfo>"); deviceInfo.Append

我正在尝试打印一份本地报告,可以是横向的,也可以是纵向的

private void Export(LocalReport report)
{
    Warning[] warnings;
    m_streams = new List<Stream>();

    var deviceInfo = new StringBuilder();
    deviceInfo.AppendLine("<DeviceInfo>");
    deviceInfo.AppendLine("<OutputFormat>EMF</OutputFormat>");
    //"11.7in", "8.3in"
    deviceInfo.AppendLine("<PageWidth>11.7in</PageWidth>");
    deviceInfo.AppendLine("<PageHeight>8.3in</PageHeight>");

    deviceInfo.AppendLine("</DeviceInfo>");

    report.Render("Image", deviceInfo.ToString(), CreateStream, out warnings);            
    foreach (var stream in m_streams) { stream.Position = 0; }
}
private void导出(LocalReport)
{
警告[]警告;
m_streams=新列表();
var deviceInfo=新的StringBuilder();
deviceInfo.附录行(“”);
设备信息附录(“EMF”);
//“11.7英寸”、“8.3英寸”
设备信息附录(“11.7英寸”);
设备信息附录(“8.3英寸”);
deviceInfo.附录行(“”);
report.Render(“Image”,deviceInfo.ToString(),CreateStream,out警告);
foreach(m_streams中的var stream){stream.Position=0;}
}
我有两个不同的报告,一个在纵向模式下,一个在横向模式下,但不管我改变PageWidth和PageSize的值是什么,它总是在纵向模式下打印。 我在11.7英寸和8.3英寸之间交换了宽度和高度,但它始终以纵向模式打印。

您可以使用属性验证报告是否定义为横向(报告属性>页面设置>方向)

如果需要在
DeviceInfo
声明中交换纸张宽度和纸张高度

Dim rdlLocalReport As New LocalReport
Dim strDeviceInfo As String

With rdlLocalReport.GetDefaultPageSettings

    Dim intPaperSizeWidth As Integer = 0
    Dim intPaperSizeHeight As Integer = 0

    If .IsLandscape Then
        intPaperSizeWidth = .PaperSize.Height
        intPaperSizeHeight = .PaperSize.Width
    Else
        intPaperSizeWidth = .PaperSize.Width
        intPaperSizeHeight = .PaperSize.Height
    End If

    strDeviceInfo = "<DeviceInfo>" _
        & "<OutputFormat>EMF</OutputFormat>" _
        & "<PageWidth>" & Strings.Replace(intPaperSizeWidth / 100, ",", ".") & "in</PageWidth>" _
        & "<PageHeight>" & Strings.Replace(intPaperSizeHeight / 100, ",", ".") & "in</PageHeight>" _
        & "<MarginTop>" & Strings.Replace(.Margins.Top / 100, ",", ".") & "in</MarginTop>" _
        & "<MarginLeft>" & Strings.Replace(.Margins.Left / 100, ",", ".") & "in</MarginLeft>" _
        & "<MarginRight>" & Strings.Replace(.Margins.Right / 100, ",", ".") & "in</MarginRight>" _
        & "<MarginBottom>" & Strings.Replace(.Margins.Bottom / 100, ",", ".") & "in</MarginBottom>" _
        & "</DeviceInfo>"

End With
可以使用“报告”(LocalReport/ServerReport)中的“GetDefaultPageSettings()”执行此操作 并从reportviewer内部窃取以下代码:

private string CreateEMFDeviceInfo(int startPage, int endPage)
{
    string text = "";
    PageSettings pageSettings = PageSettings;
    int hundrethsOfInch = pageSettings.Landscape ? pageSettings.PaperSize.Height : pageSettings.PaperSize.Width;
    int hundrethsOfInch2 = pageSettings.Landscape ? pageSettings.PaperSize.Width : pageSettings.PaperSize.Height;
    text = string.Format(CultureInfo.InvariantCulture, "<MarginTop>{0}</MarginTop><MarginLeft>{1}</MarginLeft><MarginRight>{2}</MarginRight><MarginBottom>{3}</MarginBottom><PageHeight>{4}</PageHeight><PageWidth>{5}</PageWidth>", ToInches(pageSettings.Margins.Top), ToInches(pageSettings.Margins.Left), ToInches(pageSettings.Margins.Right), ToInches(pageSettings.Margins.Bottom), ToInches(hundrethsOfInch2), ToInches(hundrethsOfInch));
    return string.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat><StartPage>{0}</StartPage><EndPage>{1}</EndPage>{2}</DeviceInfo>", startPage, endPage, text);
}

private static string ToInches(int hundrethsOfInch)
{
    return ((double)hundrethsOfInch / 100.0).ToString(CultureInfo.InvariantCulture) + "in";
}
private string CreateEMFDeviceInfo(int-startPage,int-endPage)
{
字符串文本=”;
页面设置页面设置=页面设置;
int hundresofinch=页面设置。横向?页面设置。纸张大小。高度:页面设置。纸张大小。宽度;
int hundresofinch2=页面设置。横向?页面设置。纸张大小。宽度:页面设置。纸张大小。高度;
text=string.Format(CultureInfo.InvariantCulture,“{0}{1}{2}{3}{4}{5}”,ToInches(pageSettings.Margins.Top),ToInches(pageSettings.Margins.Left),ToInches(pageSettings.Margins.Right),ToInches(pageSettings.Margins.Bottom),ToInches(hundresofinch));
返回string.Format(CultureInfo.InvariantCulture,“emf{0}{1}{2}”,起始页,结束页,文本);
}
专用静态字符串到英寸(整数百分之一英寸)
{
返回((双)百分之一英寸/100.0).ToString(CultureInfo.InvariantCulture)+“in”;
}

这样,您可以获得报告定义中设置的页面方向和页边距。

LocalReport
没有
PageSettings
属性-您从何处获得该属性?它有一个
GetDefaultPageSettings
方法,但该方法返回的数据是只读的。@ekolis我“从ReportViewer内部窃取了它”,正如我所说的。Microsoft.Reporting.WinForms.ReportViewer将“页面设置”作为私有属性。您的对象应该在某个地方具有这样的属性。
private string CreateEMFDeviceInfo(int startPage, int endPage)
{
    string text = "";
    PageSettings pageSettings = PageSettings;
    int hundrethsOfInch = pageSettings.Landscape ? pageSettings.PaperSize.Height : pageSettings.PaperSize.Width;
    int hundrethsOfInch2 = pageSettings.Landscape ? pageSettings.PaperSize.Width : pageSettings.PaperSize.Height;
    text = string.Format(CultureInfo.InvariantCulture, "<MarginTop>{0}</MarginTop><MarginLeft>{1}</MarginLeft><MarginRight>{2}</MarginRight><MarginBottom>{3}</MarginBottom><PageHeight>{4}</PageHeight><PageWidth>{5}</PageWidth>", ToInches(pageSettings.Margins.Top), ToInches(pageSettings.Margins.Left), ToInches(pageSettings.Margins.Right), ToInches(pageSettings.Margins.Bottom), ToInches(hundrethsOfInch2), ToInches(hundrethsOfInch));
    return string.Format(CultureInfo.InvariantCulture, "<DeviceInfo><OutputFormat>emf</OutputFormat><StartPage>{0}</StartPage><EndPage>{1}</EndPage>{2}</DeviceInfo>", startPage, endPage, text);
}

private static string ToInches(int hundrethsOfInch)
{
    return ((double)hundrethsOfInch / 100.0).ToString(CultureInfo.InvariantCulture) + "in";
}