首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LocalReport回执打印

LocalReport回执打印
EN

Stack Overflow用户
提问于 2013-04-17 21:41:39
回答 2查看 1.9K关注 0票数 0

我正在使用带有"Walkthrough: Printing a Local Report without Preview“代码的LocalReport打印一张3英寸的收据。

有些打印机要求DeviceInfo PageWidth为8.5英寸才能正常工作,有些打印机则需要3.0英寸。报告似乎正在被拉伸,以填充错误大小的页面。我已尝试调整报告纸张大小和打印机纸张大小,但似乎无法获得正确的组合。

有没有人经历过这种情况?

EN

回答 2

Stack Overflow用户

发布于 2013-05-07 17:05:08

我想通了。您需要考虑打印机的dpi。

获取打印机默认页面设置:

代码语言:javascript
复制
        PrinterSettings ps = new PrinterSettings();
        ps.PrinterName = printerName;
        this.defaultPageSettings = ps.DefaultPageSettings;

使用该信息构建DeviceInfo Xml:

代码语言:javascript
复制
    private string BuildDeviceInfo()
    {
        StringBuilder returnValue;
        System.Xml.XmlWriter writer;

        returnValue = new StringBuilder(1024);
        writer = System.Xml.XmlWriter.Create(returnValue);

        writer.WriteStartElement("DeviceInfo");
        writer.WriteElementString("OutputFormat", "EMF");

        if (defaultPageSettings != null)
        {
            // DPI will keep the output from scaling in weird ways
            writer.WriteElementString("PrintDpiX", defaultPageSettings.PrinterResolution.X.ToString());
            writer.WriteElementString("PrintDpiY", defaultPageSettings.PrinterResolution.Y.ToString());

            writer.WriteElementString("PageWidth", (defaultPageSettings.PaperSize.Width / 100m).ToString("F2") + "in");
            writer.WriteElementString("PageHeight", (defaultPageSettings.PaperSize.Height / 100m).ToString("F2") + "in");
       }
        writer.Close();

        return returnValue.ToString();
    }
票数 0
EN

Stack Overflow用户

发布于 2015-04-10 19:42:27

这对我很有效。我正在从WPF应用程序打印到STAR TSP100收据打印机。当我自己设置页边距和页面大小时,结果很大,但当我计算最小页边距和页面大小,并从默认打印机设置中设置dpi时,收据打印正确。

我用这个来计算出最小边距:(H/T http://www.dreamincode.net/forums/topic/135864-printing-with-minimum-margins-specified-by-the-printer/)

代码语言:javascript
复制
Dim minimumMarginLeft, minimumMarginRight, minimumMarginTop,
 minimumMarginBottom As Single

minimumMarginLeft = PrintDialog1.PrinterSettings.DefaultPageSettings.PrintableArea.Left

minimumMarginRight = PrintDialog1.PrinterSettings.DefaultPageSettings.PaperSize.Width - _
                                  PrintDialog1.PrinterSettings.DefaultPageSettings.PrintableArea.Right

minimumMarginTop = PrintDialog1.PrinterSettings.DefaultPageSettings.PrintableArea.Top

minimumMarginBottom =  PrintDialog1.PrinterSettings.DefaultPageSettings.PaperSize.Height - _
                                      PrintDialog1.PrinterSettings.DefaultPageSettings.PrintableArea.Bottom


-I figured this out. You need to account for the printer dpi.

-Get the Printer Default Page Settings:

        PrinterSettings ps = new PrinterSettings();
        ps.PrinterName = printerName;
        this.defaultPageSettings = ps.DefaultPageSettings; The Build the DeviceInfo Xml with that info:

    private string BuildDeviceInfo()
    {
        StringBuilder returnValue;
        System.Xml.XmlWriter writer;

        returnValue = new StringBuilder(1024);
        writer = System.Xml.XmlWriter.Create(returnValue);

        writer.WriteStartElement("DeviceInfo");
        writer.WriteElementString("OutputFormat", "EMF");

        if (defaultPageSettings != null)
        {
            // DPI will keep the output from scaling in weird ways
            writer.WriteElementString("PrintDpiX", defaultPageSettings.PrinterResolution.X.ToString());
            writer.WriteElementString("PrintDpiY", defaultPageSettings.PrinterResolution.Y.ToString());

            writer.WriteElementString("PageWidth", (defaultPageSettings.PaperSize.Width / 100m).ToString("F2") + "in");
            writer.WriteElementString("PageHeight", (defaultPageSettings.PaperSize.Height / 100m).ToString("F2") + "in");
       }
        writer.Close();

        return returnValue.ToString();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16061697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档