Microsoft报告页面方向(VS 2013,C#)

时间:2015-11-13 10:36:05

标签: c# visual-studio printing

我正在使用MS报告打印标签(c#/ VS2013)。标签宽8厘米,高4厘米。打印机将其视为纵向(无旋转),但报表查看器将其打印为横向,因为宽度大于高度。打印前特定于打印机的页面方向更改将被忽略(!),因此标签始终以标签方向旋转90°打印。打印机是一种工业热转印打印机。

我不明白为什么页面方向与高度和宽度之间的关系绑定,不能独立设置!我已经尝试在打印前改变方向 - 这导致实验室被打印成几件但没有旋转。

唯一有帮助的是将纸张尺寸更改为8宽度和8.1高度。然后标签打印正确,但这会导致很多空页(标签),并不是一个好的解决方案。

我目前看到的唯一方法是重新设计旋转90°的所有标签,这是相当费力的,所以如果有人有解决这种stange行为的话,我将不胜感激!

1 个答案:

答案 0 :(得分:1)

我通过渲染图像并通过PrintDocument对象打印来解决了这个问题。通过这种方式,我可以将横向打印的标签(8厘米宽,4厘米高)纵向发送到打印机。

我确信这可以做得更优雅,但由于时间压力,我现在采用这个解决方案:

String tempDir = Path.GetTempFileName();
File.Delete(tempDir);
Directory.CreateDirectory(tempDir);
tempDir = Utils.addBackslash(tempDir);
ExportToPNG(tempDir);
String imageFile = Utils.FindFirstFile(tempDir, "*.png");
if (imageFile != "")
{
    PrintDocument pd = new PrintDocument();
    try
    {
        pd.DefaultPageSettings.PrinterSettings.PrinterName = DB.Instance.getSetting("label.printername");
    }
    catch
    {
        // This is just a preset, it may fail without consequences
    }

    pd.DefaultPageSettings.Landscape = false; // Now I can do it!
    pd.PrintPage += (sender, args) =>
    {
        Image i = Image.FromFile(imageFile);
        Point p = new Point(100, 100);
        args.Graphics.DrawImage(i, 0, 0, i.Width, i.Height);
    };
    PrintDialog pdi = new PrintDialog();
    pdi.Document = pd;
    if (pdi.ShowDialog() == DialogResult.OK)
        pd.Print();
    pd.Dispose();
}