none
WPF:FixedDocument を Package 化する方法 RRS feed

  • 質問

  • FixedDucument から XpsDocument を作る過程(印刷)での問題です。
    現在、FixedDocument オブジェクトまで作れたのですが、その先の Package 化でいきづまってしまいました。

    ZipPackage クラスを使って Package 化するのだと思うのですが、関連 API を調べていて自分の中で、うまくつながりません。

    一旦、ファイルにおとさなければならない?。その場合、どうなるのか?。

    何かあたりまえのことでつまずいている気もしているのですが、FixedDocument オブジェクトから Package ができるまでのところをお教えいただけないでしょうか。


     


     

    2008年1月2日 5:12

回答

  • XpsDocument から取得した XpsDocumentWriter で,Writeすれば

     

    コード ブロック

    // ReachFramework と System.Printing アセンブリへの参照の追加が必要。

    // using System.Windows.Xps.Packaging;

    // using System.IO; なども

    using (XpsDocument xpsDoc = new XpsDocument(@"MyFirstXpsDoc.xps", FileAccess.Write))

    {

        XpsDocumentWriter dw = XpsDocument.CreateXpsDocumentWriter(xpsDoc);

        if (dw != null)

        {

            FixedDocument fdoc = ...;

            dw.Write(fdoc);

        }

    }

     

    Package化されてると思うんですが...。(質問を勘違いしているかもしれませんが)

     

    また,FixedDocument でなくても,
    Write の引数に渡せるものなら,自動的にXPS仕様にそったものに変換されていると思います。

     

    出来上がった,上の例だと,MyFirstXpsDoc.xps の拡張子を .zip にして

    そのファイルを右クリック,プログラムから開く -> Compressed (zipped) Folders で,

    XPS仕様にそった中身に自動的になっているのを確認できると思います。

     

    MSDNライブラリをフルに入れていれば,
    Saving an XPS Document Sample
    で確認できると思います。

    (SaveHelper いうクラスにラップしてあるので,コードを追うのがややこしいですが)

    2008年1月2日 22:27

すべての返信

  • XpsDocument から取得した XpsDocumentWriter で,Writeすれば

     

    コード ブロック

    // ReachFramework と System.Printing アセンブリへの参照の追加が必要。

    // using System.Windows.Xps.Packaging;

    // using System.IO; なども

    using (XpsDocument xpsDoc = new XpsDocument(@"MyFirstXpsDoc.xps", FileAccess.Write))

    {

        XpsDocumentWriter dw = XpsDocument.CreateXpsDocumentWriter(xpsDoc);

        if (dw != null)

        {

            FixedDocument fdoc = ...;

            dw.Write(fdoc);

        }

    }

     

    Package化されてると思うんですが...。(質問を勘違いしているかもしれませんが)

     

    また,FixedDocument でなくても,
    Write の引数に渡せるものなら,自動的にXPS仕様にそったものに変換されていると思います。

     

    出来上がった,上の例だと,MyFirstXpsDoc.xps の拡張子を .zip にして

    そのファイルを右クリック,プログラムから開く -> Compressed (zipped) Folders で,

    XPS仕様にそった中身に自動的になっているのを確認できると思います。

     

    MSDNライブラリをフルに入れていれば,
    Saving an XPS Document Sample
    で確認できると思います。

    (SaveHelper いうクラスにラップしてあるので,コードを追うのがややこしいですが)

    2008年1月2日 22:27
  • 稍丼 様

    印刷の方法のほうのスレッドとあわせて、こちらもお世話になります。

     

    御回答戴いたコードを見て、一瞬ハッとしました。
    XpsDocument コンストラクタのパラメーターである、Package とか string には、FixedDucument のものを入れなければならないのだとずっと思いこんでおりました。それで、 FixedDucument のPackage を作らなければならないということになって・・・。

    そうではないのですね。XpsDocumentWriter オブジェクトを作り出す過程で、FixedDucument の Package 化などということには関わる必要がないということが結論ですね。

    よくわかりました。たいへんありがとうございます。

    後から御覧になる皆様へ

    このスレッドは、内容的にWPF 下における印刷の仕方を問題にした下記スレッドの一部をなすものなので、
    下記リンクより、そのスレッドに直接入れるようにしておきます。

    結論的には、そこでの印刷の仕方を問題にする限り、FixedDucument のPackage 化などということは、
    全く問題にする必要はないということです。

    http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2611504&SiteID=7

    2008年1月3日 1:16