0

私の C# アプリケーションはいくつかのページを xps ファイルに出力しますが、既定のプリンターがネットワーク プリンターである場合、作成された xps ファイルが無効であることがわかりました。

これは私を混乱させます。なぜなら、私はネットワークに接続されたプリンターに書き込んでいるのではなく、ファイルに書き込んでいるからです。

デフォルトのプリンターがネットワーク プリンターに設定されていない場合 (デフォルトのプリンターは "OneNote に送信" または "Microsoft XPS Document Writer" です)、次のコードを実行すると、2 ページの XPS ファイルが正しく作成されます。

        pageCounter = 0;
        PrintDocument p = new PrintDocument();
        p.PrintPage += delegate(object sender1, PrintPageEventArgs e1)
        {
            // 8.5 x 11 paper:

            float x0 = 25;
            float xEnd = 850 - x0;

            float y0 = 25;
            float yEnd = 1100 * 2 - y0; // bottom of 2ed page

            Font TitleFont = new Font("Times New Roman", 30);

            if (pageCounter == 0) // for the first page
            {
                e1.Graphics.DrawString("My Title", TitleFont, new        SolidBrush(Color.Black), new RectangleF(300, 15, xEnd, yEnd));                  
                 e1.HasMorePages = true; // more pages
                pageCounter++;// next page counter
            }
            else // the second page
            {                   
                e1.Graphics.DrawString("Page 2", TitleFont, new SolidBrush(Color.Black), new RectangleF(300, 15, xEnd, yEnd));                  
            }

        };

       // now try to print
        try
        {               
            p.PrinterSettings.PrintFileName = fileName; // the file name set earlier
            p.PrinterSettings.PrintToFile = true;    // print to a file (i thought this would ignore the default printer)            
            p.Print();

        }
        catch (Exception ex)
        {
            // for the Bug I have described, this Exception doesn't happen.
            // it creates an XPS file, but the file is invalid in the cases mentioned
            MessageBox.Show("Error", "Printing Error", MessageBoxButton.OK);
        }     

だから私の質問は...なぜこれが起こるのですか、私は何が間違っていますか?

4

1 に答える 1

1

ここで具体的な質問はありませんが、私が知っていることをお話しします。デフォルトのプリンターのドライバーを使用して、ファイルに保存される出力ドキュメントを生成しています。一部のドライバーは、xps コンテンツを出力し、プリンターがページにインク/トナーを配置するために消費します。他のドライバーは、postscript、PCL、PDF、またはその他のデータ形式を出力します。したがって、デフォルトのプリンターによっては、これらの形式のいずれかでデータを保存できます。

実際に XPS コンテンツを確実に作成するには、で使用するプリンターとして「Microsoft XPS Document Writer」を指定する必要がありますp.PrinterSettings.PrinterName。もちろん、その印刷キューの名前が変更されているか削除されている場合、これは失敗する可能性があります。どのキューが XPS Document Writer であるかを判断するために、いくつかの手順を踏むこともできPrinterSettings.InstalledPrintersますが、プリンターが削除されている場合、これは失敗します。より堅牢なソリューションは、XPS コンテンツを を使用して直接生成するXpsDocumentWriterことですが、それにはいくつかの大幅な変更が必要になります。

于 2013-10-02T13:26:16.293 に答える