【问题标题】:LocalReport Receipt PrintingLocalReport 收据打印
【发布时间】:2013-04-17 13:41:38
【问题描述】:

我正在使用 LocalReport 打印一张 3 英寸的收据,代码来自“Walkthrough: Printing a Local Report without Preview

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

有人经历过吗?

【问题讨论】:

    标签: c# reporting-services


    【解决方案1】:

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

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

            PrinterSettings ps = new PrinterSettings();
            ps.PrinterName = printerName;
            this.defaultPageSettings = ps.DefaultPageSettings;
    

    使用该信息构建 DeviceInfo Xml:

        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();
        }
    

    【讨论】:

      【解决方案2】:

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

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

      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();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-15
        • 1970-01-01
        相关资源
        最近更新 更多