XPSビューアを自動で立ち上げる方法 – プログラミング – Home

XPSビューアを自動で立ち上げる方法
 

[解決済] XPSビューアを自動で立ち上げる方法  

  RSS

なおぞう
 なおぞう
(@なおぞう)
ゲスト
参加済み: 4年 前
投稿: 143
2016年8月16日 11:58 AM  

お世話になります。
Windows7 VS2010 C#で開発しています。

プログラム中で作った帳票をMicrosoft XPS document Writer で名前を付けtえ出力(保
存)し、そのファイルを自動でビューアーで開きたいのですが、どうしたらよいでしょうか。

Microsoft XPS document Writer のXPSドキュメントタブに「XPSビューアーを使って自動
的にXPSドキュメントを開く」というチェックボックスがあり、これをプログラムの中か
らチェックできればよいかと思うのですが、方法が思いつきません。

何か方法がありましたら教えていただけますようお願いします。


引用未解決
トピックのタグ
瀬戸っぷ
 瀬戸っぷ
(@瀬戸っぷ)
ゲスト
参加済み: 13年 前
投稿: 178
2016年8月16日 8:17 PM  

自動で…が無理なら、コードで出力…でしょうかね?

>Microsoft XPS document Writer で名前を付けtえ出力(保存)し

出力先のファイル名が判明している必要があるかも知れませんが。
# ファイルシステムで監視…はちょっとねぇ……。

対象のファイル名が確定していれば
http://dobon.net/vb/dotnet/process/shell.html#openfile
辺りで実行可能かと。


返信引用
なおぞう
 なおぞう
(@なおぞう)
ゲスト
参加済み: 4年 前
投稿: 143
2016年8月17日 1:57 PM  

>瀬戸っぷ 様
ご返答ありがとうございます。

ダミーのフォルダ選択ダイアログを出してユーザに書かせてそれを覚えておく。
内部では、決まった一時ファイルにXPSファイルを吐き出させて、ビューアーで見せた
後、removeしてユーザが決めたフォルダにファイルを置くという処理にしようかと思って
います。
プログラム内で一時ファイルへのXPS出力、ビューアー立ち上げにProcessStartInfoオブ
ジェクトを使います。

こんな感じで出来そうでしょうか?


返信引用
YuO
 YuO
(@YuO)
ゲスト
参加済み: 16年 前
投稿: 320
2016年8月18日 2:54 AM  

ちょっと横道にそれますが……。

一応,.NET Frameworkの機能にはXPSの出力機能があります。
これを使うと,XPS Document Writerを使わずに出力することができます。

手順は以下になります。
1. System.Windows.Documents.FixedDocumentを作る
2. ページ数分だけSystem.Windows.Documents.FixedPageを作る
2.1. FixedPageにコンテンツを配置する。1ページ分に対応するWPFのユーザーコントロール
を用意するのが楽。
2.2. System.Windows.Documents.PageContentを作る
2.3. PageContentをSystem.Windows.Markup.IAddChildにキャストする
2.4. IAddChildのAddChildにFixedPageを渡す
2.5. FixedDocument.PagesにPageContentを追加する
3. System.Windows.Threading.Dispatcherを回す (これをやらないとDataContextのバインド
が有効にならない)
System.Windows.Threading.Dispatcher.CurrentDispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.SystemIdle,
new System.Windows.Threading.DispatcherOperationCallback(delegate { return null;
}),
null);
4. System.IO.Packaging.Package.Open で出力ファイルを開く
5. Packageを引数にしてSystem.Windows.Xps.XpsDocumentを作る
6. XpsDocument.CreateXpsDocumentWriterにXpsDocumentを渡してXpsDocumentWriterを取得す

7. XpsDocumentWriter.WriteにFixedDocument.DocumentPaginatorを渡してXPSを出力する

元々のUIがWPFであるならば,帳票をUIと同様に作れるため考慮に入れてもよいと思います。
WinFormsの場合は,ややこしくなるだけかもしれません。


返信引用
なおぞう
 なおぞう
(@なおぞう)
ゲスト
参加済み: 4年 前
投稿: 143
2016年8月18日 10:32 AM  

>YuO さま
アドバイスありがとうございます。勉強になります。
残念ながら元のプログラムはWPFではありません。まだ一度もWPFのプログラムは作った事
がないのですが、ますます便利みたいですね。

現状プログラムでの印刷のところは、
PrintDialog dlg を作って、PrinterSettingsにいろいろ設定して、ShowDialog()で出力
プリンタを選ばせてOKが返ってきたら、
PrintDocument のPrinterSettings にdlg.PrinterSettingsを代入して、PrintDocumentの
Print()を実行してます。

これを、
PrintDialog Dlg;
--省略--
Dlg.PrinterSettings.PrinterName = Microsoft XPS Document Writer;

PrintDocument pd.PrinterSettings = Dlg.PrinterSettings;
pd.Print();

としてみると、XPSのファイル保存先ダイアログが出て保存できました。
が、やりたいのは、ここでこのダイアログを出さないで一時ファイルに保存することなの
ですが、どのようにしたらできるのかが分からない状態です。

これが分かれば、あとはProcessStartInfoを使って、XPSファイルをビューアで開けばよ
いのだと考えております。
もし、ご存知でしたら教えていただけますようお願いします。


返信引用
なおぞう
 なおぞう
(@なおぞう)
ゲスト
参加済み: 4年 前
投稿: 143
2016年8月18日 3:19 PM  

PrintDocumentのメンバに、以下のものがあったのでXPSへのファイル出力はできました。
PrinterSettings.PrintToFile = true;
PrinterSettings.PrintFileName = D:\\test.xps;


返信引用
なおぞう
 なおぞう
(@なおぞう)
ゲスト
参加済み: 4年 前
投稿: 143
2016年8月18日 6:01 PM  

なんとか希望通りに作成できました。
アドバイスありがとうございました。


返信引用

返信する


Preview 0 Revisions Saved
Share:

ログイン または 登録 してください

タイトルとURLをコピーしました