以下是我在Windows窗体中用于打印的过程。 我用过PrintDocument类。它包含PrintPage事件,我使用它来绘制我需要打印的图形,并按预期成功获得结果。
以下是代码:
public PrintDocument Printing
{
m_printDocument = new PrintDocument();
m_printDocument.PrintPage += new PrintPageEventHandler(OnPrintPage);
}
OnPrintPage的代码如下:
protected virtual void OnPrintPage(object sender, PrintPageEventArgs e)
{
//Image img = I have the things to be printing in the form of image.
e.Graphics.DrawImage(img, new Point(0,0));
}
在WPF中:
我正在使用固定文档,使用下面的代码我可以打印
PrintDialog print = new PrintDialog();
print.PrintDocument(FixedDocument.DocumentPaginator, "Print") //Where Fixed document contains the data to be printed.
此结果是内存不足以继续执行程序。 但我没有任何问题得到固定文件。 任何解决方案......? 我希望类似的Windows形式也会出现在WPF中......
答案 0 :(得分:3)
当我的网页包含大量视觉元素(图纸/图像/复杂图表)时,我常常得到这个。而不是一次打印完整的文档(这可能导致内存不足)
print.PrintDocument(FixedDocument.DocumentPaginator, "Print")
我打印了其中一页。
PrintQueue selectedPrntQueue = printDialog.PrintQueue;
XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(selectedPrntQueue);
SerializerWriterCollator collator = writer.CreateVisualsCollator();
collator.BeginBatchWrite();
var paginator = FixedDocument.DocumentPaginator;
FixedPage fixedPage = paginator.GetFixedPage(printedPageCount)
ContainerVisual newPage = new ContainerVisual();
Size sz = new Size(pageSize.Height.Value, pageSize.Width.Value);
fixedPage.Measure(sz);
fixedPage.Arrange(new Rect(new Point(), sz));
fixedPage.UpdateLayout();
newPage.Children.Add(fixedPage);
collator.Write(newPage);
打印几页后我不得不做GC(我的幻数是10)。 您可能需要根据您的要求进行调整。