代码之家  ›  专栏  ›  技术社区  ›  Peter

C#打印机只打印大约1/6页的报告

  •  0
  • Peter  · 技术社区  · 7 年前

    自从我将ActiveReports从7版升级到11版以来,报告的打印速度大约是页面的1/6,布局怪异,只有图片正确打印。 enter image description here
    但很显然,它只是在打印时,而不是预览尽管看起来很奇怪,我想问题是 SystemPrinter 反对。
    就我的理解而言,这个对象是正确定义的。

    // get printer
    if (systemPrinter == null)
    {
        systemPrinter = new SystemPrinter { PrinterName = systemPrinterName };
        systemPrinter.StartJob("My-printjob");
    }
    
    // set paper source and size
    SetPaper(systemPrinter, systemPrinterPaperSource);
    
    // set draw size
    var internalOffSetX = systemPrinter.PhysicalOffsetX / systemPrinter.Graphics.DpiX;
    var internalOffSetY = systemPrinter.PhysicalOffsetY / systemPrinter.Graphics.DpiY;
    
    internalOffSetX = internalOffSetX - (offSetX / 2.54f);
    internalOffSetY = internalOffSetY - (offSetY / 2.54f);
    
    var printWidth = (systemPrinter.PaperSize.Width / 100f) - internalOffSetX;
    var printHight = (systemPrinter.PaperSize.Height / 100f) - internalOffSetY;
    
    // Scale: A4 (printable)
    var smlOut = RectangleF.FromLTRB(-internalOffSetX, -internalOffSetY, printWidth, printHight);
    
    systemPrinter.Graphics.PageUnit = GraphicsUnit.Pixel;
    
    //Important edit for StackOverflow: Just added this line and the pdf looks perfect
    SaveDocumentAsPdf(@"C:\Temp\SaveAsPDF\mydocument.pdf", report);
    
    foreach (Page page in report.Document.Pages)
    {
        systemPrinter.StartPage();
        page.Draw(systemPrinter.Graphics, smlOut);
        systemPrinter.EndPage();
    }
    

    PaperHeight being 11.69f 以及 PaperWidth being 8.27f , ClipBounds being {X = -699050.6 Y = -699050.6 Width = 1398101.25 Height = 1398101.25} System.Drawing.RectangleF

    但是我不能强调我只将activereports版本改为11(现在使用 inches 但预告还可以在physcal打印机或bullzip打印机上打印时,输出不会更改。
    有人对此有什么见解吗?

    编辑:
    在使用已经编写好的方法打印报告之前,pdf看起来很完美。

    var pdfReportArchiv = new PdfExport();
    pdfReportArchiv.Security.Encrypt = encrypt;
    pdfReportArchiv.Security.Permissions = PdfPermissions.AllowPrint;
    pdfReportArchiv.Security.Use128Bit = true;
    pdfReportArchiv.Export(report.Document, pathAndName);
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Peter    7 年前

    从7号线到11号线的变化很明显 systemPrinter.Graphics.PageUnit = GraphicsUnit.Pixel; 不再使用并导致问题。

    推荐文章