2011-11-22 18 views
8

Mam System.Window.Controls.PrintDialog i chcę wydrukować strony w trybie poziomym i pionowym z pojedynczym PrintTicket, ale wydaje mi się, że mogę ustawić orientację tylko raz.PrintDialog ze stronami Landscape i Portrait

Tak długo, jak chcę drukować na papierze, to może nie być wielka sprawa, ale chcę wydrukować/utworzyć dokument PDF z mojego Printjob. Tam potrzebuję stron z trybem Krajobraz i Portret w dokumencie onc.

Do tej pory udało mi się obrócić strony krajobrazu o 90 stopni i działa to dobrze, ale w PrintPreview wygląda bardzo dziwnie z powodu obróconej zawartości.

+1

Czy kiedykolwiek znalazłeś sposób na zrobienie tego? Chciałbym móc to zrobić z tych samych powodów (drukowanie do formatu PDF z mieszanymi stronami portretowymi/krajobrazowymi) i nie znalazłem sposobu, żeby to działało. – markmuetz

+1

Nie była to odpowiedź, ale pracowała również w projekcie, w którym to było potrzebne. Po wielu dniach badań skończyłem robić to samo, co ty. Jednak dokument XPS jest zdolny do prawidłowej orientacji papieru (jak widać podczas eksportowania z MS Word do XPS). Wciąż czekam, aby zobaczyć, jak to się robi. – NestorArturo

Odpowiedz

1

Nie tak czysty, jak byś chciał, a więcej na obejście, ale myślę, że może on osiągnąć twój cel. Można użyć biblioteki iTextSharp, aby połączyć pliki PDF w jeden po wielu zadaniach drukowania. Oto niektóre sample code.

Mam nadzieję, że ktoś wymyśli prostsze rozwiązanie.

1

Długi czas później ...

Można to zrobić poprzez dostarczenie eventhandler że jest wywoływana, prosząc o niestandardowym PrintTicket, zanim każda strona jest drukowana. Moduł PageViewModel zawiera w tym przypadku

PageViewModel{ 
    Page Page {get;set;} 
    PageOrientation? PageOrientation {get;set} 
} 

if (PrintDialog.ShowDialog() == true) 
    { 
    XpsDocumentWriter xpsDocumentWriter = PrintQueue.CreateXpsDocumentWriter(PrintDialog.PrintQueue); 
    xpsDocumentWriter.WritingPrintTicketRequired += (s, e) => 
    { 
     PageViewModel pVM = publicationVM.Pages[e.Sequence - 1]; 
     if (pVM.Orientation != null && pVM.Orientation != publicationVM.Orientation) 
     { 
     e.CurrentPrintTicket = new PrintTicket(); 
     e.CurrentPrintTicket.PageOrientation = PageOrientation.Portrait; 
     } 
    }; 
    VisualsToXpsDocument visualsToXpsDocument = (VisualsToXpsDocument) xpsDocumentWriter.CreateVisualsCollator(PrintDialog.PrintTicket, PrintDialog.PrintTicket); 
    visualsToXpsDocument.BeginBatchWrite(); 
    Page page; 
    foreach (PageViewModel pVM in publicationVM.Pages) 
    { 
     page = pVM.Page; 
     visualsToXpsDocument.Write(page); 
    } 
    visualsToXpsDocument.EndBatchWrite(); 
    } 
mieszany portret i krajobraz. Dupleksowanie to też jest w porządku.

Powiązane problemy