Один из способов работы заключается в следующем:
- Сделать список глобальным членом класса
- Используйте класс
PrintDocument
в System.Drawing.Printing
и используйте событие PrintPage
для установки страниц по одной.
Пример кода:
private List<Dictionary<string, string>> myList = new List<Dictionary<string, string>>();
private int pageIndex = 0;
private void PrintButton_Click(object sender, EventArgs e)
{
PrintDocument document = new PrintDocument();
document.PrintPage += new PrintPageEventHandler(document_PrintPage);
document.Print();
}
void document_PrintPage(object sender, PrintPageEventArgs e)
{
if (pageIndex >= myList.Count)
{
e.HasMorePages = false;
return;
}
Dictionary<string, string> curData = myList[pageIndex];
List<string> lines = new List<string>();
lines.Add("Items count: " + curData.Count);
curData.Keys.ToList().ForEach(key =>
{
lines.Add(string.Format("Key: {0}, Value: {1}", key, curData[key]));
});
e.Graphics.DrawString(string.Join("\n", lines), this.Font, SystemBrushes.WindowText, 0, 0);
pageIndex++;
e.HasMorePages = pageIndex < myList.Count;
}
На каждой напечатанной странице будет вызываться метод document_PrintPage
. Пока вы не установите для e.HasMorePages
значение false, он будет продолжать печатать новые страницы.
Редактировать : для принудительного создания файла .xps
просто добавьте две строки при создании документа для печати:
document.PrinterSettings.PrintToFile = true;
document.PrinterSettings.PrintFileName = "myfile.xps";