Imprimer un PDF dans une application WPF

Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.

Impression directe

La bibliothèque Aspose.PDF a la capacité de convertir des fichiers PDF en XPS. Nous pouvons utiliser cette fonction pour organiser l’impression de documents. Considérons l’exemple pour une impression directe :

    private void Print_OnClick(object sender, RoutedEventArgs e)
    {
        var openFileDialog = new OpenFileDialog
        {
            Filter = "Documents PDF|*.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);

        //Crée l'URI pour le package Xps
        //N'importe quel Uri fonctionnera en fait ici. Il sert de place holder pour
        //l'Uri du package à l'intérieur du PackageStore
        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //Ajoute le package au 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, "Un document fixe");
            else
                throw new NullReferenceException();
        }
        PackageStore.RemovePackage(packageUri);
        xpsDoc.Close();

    }

Dans ce cas, nous suivrons ces étapes :

  1. Ouvrir le fichier PDF en utilisant OpenFileDialog
  2. Convertir le PDF en XPS et le stocker dans un objet MemoryStream
  3. Associer l’objet MemoryStream avec le package Xps
  4. Ajouter le package au magasin de packages
  5. Créer un XpsDocument basé sur le package
  6. Obtenir une instance de la séquence de documents fixes
  7. Envoyer cette séquence à l’imprimante en utilisant PrintDialog

Voir et imprimer le document

Dans de nombreux cas, les utilisateurs souhaitent voir le document avant de l’imprimer. Pour implémenter une vue, nous pouvons utiliser une classe DocViewer. La plupart des étapes pour mettre en œuvre cette approche sont similaires à l’exemple précédent.

private void OpenFile_OnClick(object sender, RoutedEventArgs e)
{
    var openFileDialog = new OpenFileDialog
    {
        Filter = "Documents PDF|*.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);

        //Ajouter le package au magasin de packages
        PackageStore.AddPackage(packageUri, package);

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