Imprimer un PDF dans une application WPF
Contents
[
Hide
]
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 :
- Ouvrir le fichier PDF en utilisant OpenFileDialog
- Convertir le PDF en XPS et le stocker dans un objet MemoryStream
- Associer l’objet MemoryStream avec le package Xps
- Ajouter le package au magasin de packages
- Créer un XpsDocument basé sur le package
- Obtenir une instance de la séquence de documents fixes
- 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();
};
}