1

我遇到了一个似乎在网络上几乎没有信息的问题,并且在过去的两天里一直给我带来麻烦。当我打印到 8.5 x 11" 的纸张时,所有打印机上的输出都是正确的。当我打印到 11 x 17" 时,所有虚拟(doPDF7、XPS Document Writer)打印机上的输出都是正确的。实际物理打印机 (Xerox WorkCentre 7535) 上的输出仅从左上角将我控制的 8.5 x 11" 值渲染到 11 x 17" 纸上。我的控件尺寸合适(尺寸为 11 x 17"),只是没有完全渲染。

我实现了一个打印预览控件,用户可以在其中选择打印机 ( PrintQueue) 和所选打印机的设置 ( PrintCapabilities)。更改这些设置将在运行时显示,以便用户确切知道他们正在打印什么。

然后,当用户想要打印他们的文档时,我PrintQueue通过将票证(他们在打印预览中的选择)与以下内容合并来准备所选内容PrintQueue.CurrentJobSettings.CurrentPrintTicket

public void Prepare(PrintTicket ticketToMerge)
{
    // _printer is the PrintQueue
    // I've also tried to merge with UserPrintTicket, DefaultPrintTicket, and created a PrintTicket using XPS Document Writer printer default print ticket
    System.Printing.ValidationResult result = _printer.MergeAndValidatePrintTicket(_printer.CurrentJobSettings.CurrentPrintTicket, ticketToMerge);
    _printer.CurrentJobSettings.CurrentPrintTicket = result.ValidatedPrintTicket;
    _printer.Commit();

    // _printer.Refresh(); // This doesn't help it seems
}

然后我打电话打印我的DocumentPaginator

public void Print(DocumentPaginator paginator)
{
    var writer = PrintQueue.CreateXpsDocumentWriter(_printer);
    writer.Write(paginator, _printer.CurrentJobSettings.CurrentPrintTicket);
}

和实际的打印机调用DocumentPaginator.GetPage

public override DocumentPage GetPage(int pageNumber)
{
    var view = new PrintingContent
    {
        // Create my control and make it the biggest size it can be without
        // going into the margins

        // Subtract the margins since they can't be printed in, these come from
        // _printerCapabilities.PageImageableArea
        Width = this.PageSize.Width - this.Margin.Left - this.Margin.Right,
        Height = this.PageSize.Height - this.Margin.Top - this.Margin.Bottom,

        // This might be a problem since the print preview control
        // is also using "this" but haven't found any evidence to conclude this thought
        DataContext = this 

    };

    view.Measure(new Size(view.Width, view.Height));
    view.Arrange(new Rect(new Point(), new Size(view.Width, view.Height)));
    view.UpdateLayout();

    var dg = UItilities.FindVisualChildren<DataGrid>(view).First();
    // dg.ItemsSource = (File as ParameterCollectionShell).GetParametersByPage(pageNumber) 
    // This didn't work so I tried giving the datagrid a new instance of List - this might be causing problems?
    var parameters = new List<ParameterViewModel>((File as ParameterCollectionShell).GetParametersByPage(pageNumber));
    dg.ItemsSource = parameters;

    // Doesn't seem to help
    // view.Measure(new Size(view.Width, view.Height));
    // view.Arrange(new Rect(new Point(), new Size(view.Width, view.Height)));
    view.UpdateLayout();

    //return new DocumentPage(view, 
    //                        this.PageSize, 
    //                        new Rect(new Point(), new Size(view.Width, view.Height)),  
    //                        new Rect(new Point(this.Margin.Left, this.Margin.Top), 
    //                        new Size(view.Width, view.Height)));
    return new DocumentPage(view);
}

当然,我已经对此进行了调试并检查了尺寸以确保它们是应有的尺寸。一切都可以打印到 .xps 文档或 .pdf;但是为什么在发送到物理打印机时它不起作用?

对于它的价值,DataGrid我的控制中有一个,过去我在使用 *-size 间距列时遇到了麻烦,但它们都是固定宽度,所以我不确定它是否相关。

4

1 回答 1

2

事实证明,它一定是打印机驱动程序问题。我重新安装了同一台打印机的驱动程序,然后一切正常。

我直接联系了施乐的特定打印机固件团队,他们让我知道打印机有固件更新,并且可以对其进行维修以修复它。他们无法准确指出问题所在,但问题现在在他们的错误系统中。

如有疑问,请重新安装打印机驱动程序,并在出现渲染问题时再次尝试打印。我不确定是什么引起了这种不良行为,但打印到任何其他打印机都可以正常工作;这就是我将其缩小到驱动程序问题的方式。

于 2014-12-26T15:14:35.427 回答