WPFアプリケーションでPDFを印刷する

次のコードスニペットも Aspose.PDF.Drawing ライブラリで動作します。

直接印刷

Aspose.PDF ライブラリには、PDFファイルをXPSに変換する機能があります。この機能を使用して、ドキュメントの印刷を整理できます。 直接印刷の例を考えてみましょう:

    private void Print_OnClick(object sender, RoutedEventArgs e)
    {
        var openFileDialog = new OpenFileDialog
        {
            Filter = "PDF Documents|*.pdf"
        };
        openFileDialog.ShowDialog();

        Aspose.Pdf.Document document = new Document(openFileDialog.FileName);
        var memoryStream = new MemoryStream();
        document.Save(memoryStream, SaveFormat.Xps);
        var package = Package.Open(memoryStream);

        //Create URI for Xps Package
        //Any Uri will actually be fine here. It acts as a place holder for the
        //Uri of the package inside of the PackageStore
        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //Add package to PackageStore
        PackageStore.AddPackage(packageUri, package);

        var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
        var fixedDocumentSequence = xpsDoc.GetFixedDocumentSequence();

        var printDialog = new PrintDialog();
        if (printDialog.ShowDialog() == true)
        {
            if (fixedDocumentSequence != null)
                printDialog.PrintDocument(fixedDocumentSequence.DocumentPaginator, "A fixed document");
            else
                throw new NullReferenceException();
        }
        PackageStore.RemovePackage(packageUri);
        xpsDoc.Close();

    }

このケースでは、以下のステップに従います:

  1. OpenFileDialogを使用してPDFファイルを開く
  2. PDFをXPSに変換し、MemoryStreamオブジェクトに保存する
  3. MemoryStreamオブジェクトをXpsパッケージに関連付ける
  4. パッケージをパッケージストアに追加する
  5. パッケージに基づいてXpsDocumentを作成する
  6. FixedDocumentSequenceのインスタンスを取得する
  7. このシーケンスをPrintDialogを使用してプリンターに送信する

文書の表示と印刷

多くの場合、ユーザーは印刷前に文書を見たいと思います。ビューを実装するために、DocViewerクラスを使用できます。 このアプローチを実装するためのステップのほとんどは、前の例と同様です。

private void OpenFile_OnClick(object sender, RoutedEventArgs e)
{
    var openFileDialog = new OpenFileDialog
    {
        Filter = "PDF Documents|*.pdf"
    };

    if (openFileDialog.ShowDialog() == true)
    {
        var document = new Document(openFileDialog.FileName);
        var memoryStream = new MemoryStream();
        document.Save(memoryStream, SaveFormat.Xps);

        var package = Package.Open(memoryStream);

        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //パッケージをパッケージストアに追加
        PackageStore.AddPackage(packageUri, package);

        var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
        DocViewer.Document = xpsDoc.GetFixedDocumentSequence();
        xpsDoc.Close();
    };
}