2011-11-22 40 views
8

私はSystem.Window.Controls.PrintDialogを持っています。横向きモードと縦向きモードのページを1つのPrintTicketで印刷したいと思いますが、向きを1度しか設定できないようです。LandscapeとPortraitページのPrintDialog

紙に印刷したいのであれば、これは大したことではないかもしれませんが、私はPrintjobからPDF文書を印刷/作成したいと考えています。そこでは、oncドキュメントにLandscapeとPortraitモードのページが必要です。

これまでは風景ページを90度回転させていましたが、これはうまくいきましたが、PrintPreviewでは回転したコンテンツのために非常に奇妙に見えます。

+1

あなたはこれを行う方法を見つけましたか?私は同じ理由(PDFに混在したポートレイト/ランドスケープページを印刷する)と同じ理由でそれを行うことができたいと思っており、それを稼働させる方法を考え出していません。 – markmuetz

+1

答えはありませんが、それが必要なプロジェクトでも働いていました。研究の日の後、私はあなたと同じことをやめました。ただし、XPSドキュメントは、正しい用紙方向を指定することができます(MS WordからXPSにエクスポートするときに表示されます)。それがどのように行われているかを見て待っています。 – NestorArturo

答えて

1

あなたが望むほど清潔ではなく、より多くの回避策がありますが、目標を達成する可能性があります。 iTextSharpライブラリを使用すると、複数の印刷ジョブに続いてPDFを連結することができます。ここにいくつかはsample codeです。

うまくいけば、誰かがもっと真っ直ぐな解決策を思いつきますように。

1

長い時間後に...

各ページが印刷される前に、カスタムプリントチケットを求めて、呼び出されるイベントハンドラを提供することにより、これを行うことができます。ここのPageViewModelは、事実上、

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(); 
    } 

とビンゴ!ポートレートと風景が混在しています。これを二重化しても問題ありません。

関連する問題