2014-09-11 5 views
2

У меня есть готовый FixedDocument для печати с ниже размер_страницами пользователя выбрать соответственно:Невозможно напечатать FixedDocument для нестандартного размера

if (Globals.LayoutSettings.paperSize.ToUpper() == "LETTER") 
       doc.DocumentPaginator.PageSize = new System.Windows.Size(8.5 * 96, 11 * 96); 
      else if (Globals.LayoutSettings.paperSize.ToUpper() == "A4") 
       doc.DocumentPaginator.PageSize = new System.Windows.Size(8.3 * 96, 11.7 * 96); 
      else 
       doc.DocumentPaginator.PageSize = new System.Windows.Size(8.5 * 96, 11 * 96); 

Но каждый раз, когда я напечатать FixedDocument вне через PDFCreator, его всегда остается как размер A4.

private bool printDocument(FixedDocument doc) 
    { 
     bool printed = false; 
     try 
     { 
      System.Windows.Controls.PrintDialog pd = new System.Windows.Controls.PrintDialog(); 

      //pd.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator, "TempLabel_" + DateTime.Now.Ticks.ToString()); 
      pd.PrintDocument(doc.DocumentPaginator, "TempLabel_" + DateTime.Now.Ticks.ToString()); 

      printed = true; 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error in printing document: " + ex.ToString(), "Error in printing"); 
     } 
     return printed; 
    } 

Что мне делать, чтобы исправить это? Цените помощь.

ответ

0

Звонок doc.DocumentPaginator получает самый «обновленный» paginator. Разбивка страницы происходит, когда этот вызов выполняется, а размер страницы зависит от страниц внутри документа.

Я не пытался воспроизвести проблему, но у меня есть две вещи, которые вы можете попробовать:

Изменить размер каждого FixedPage в FixedDocument:

var sizeOfPage = GetPageSizeToPrint(Globals.LayoutSettings.paperSize.ToUpper()); 
foreach(var page in doc.Pages) 
{ 
    page.Child.Height = sizeOfPage.Height; 
    page.Child.Width = sizeOfPage.Width; 
} 
pd.PrintDocument(doc.DocumentPaginator, "TempLabel_" + DateTime.Now.Ticks.ToString()); 

другой вариант, чтобы попробовать для замены PrintDialogPrintTicket:

var sizeOfPage = GetPageSizeToPrint(Globals.LayoutSettings.paperSize.ToUpper()); 
pd.PrintTicket.PageMediaSize = new PageMediaSize(sizeOfPage.Width, sizeOfPage.Height); 
pd.PrintDocument(doc.DocumentPaginator, "TempLabel_" + DateTime.Now.Ticks.ToString());