Imprimir PDF em aplicação WPF
Contents
[
Hide
]
O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.
Impressão direta
A biblioteca Aspose.PDF tem a capacidade de converter arquivos PDF para XPS. Podemos usar essa função para organizar a impressão de documentos. Vamos considerar o exemplo para impressão direta:
private void Print_OnClick(object sender, RoutedEventArgs e)
{
var openFileDialog = new OpenFileDialog
{
Filter = "Documentos 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);
//Criar URI para o pacote Xps
//Qualquer Uri será na verdade adequado aqui. Ele atua como um substituto para o
//Uri do pacote dentro do PackageStore
var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
var packageUri = new Uri(inMemoryPackageName);
//Adicionar pacote ao 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, "Um documento fixo");
else
throw new NullReferenceException();
}
PackageStore.RemovePackage(packageUri);
xpsDoc.Close();
}
Neste caso, seguiremos estas etapas:
- Abrir arquivo PDF usando OpenFileDialog
- Converter PDF para XPS e armazenar em um objeto MemoryStream
- Associar o objeto MemoryStream com o pacote Xps
- Adicionar o pacote ao Armazenamento de Pacotes
- Criar um XpsDocument baseado no pacote
- Obter uma instância da sequência FixedDocumentSequence
- Enviar esta sequência para a impressora usando PrintDialog
Visualizar e imprimir documento
Em muitos casos, os usuários querem ver o documento antes de imprimir. Para implementar uma visualização, podemos usar uma classe DocViewer. A maioria das etapas para implementar essa abordagem é semelhante ao exemplo anterior.
private void OpenFile_OnClick(object sender, RoutedEventArgs e)
{
var openFileDialog = new OpenFileDialog
{
Filter = "Documentos 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);
//Adicionar pacote ao Armazenamento de Pacotes
PackageStore.AddPackage(packageUri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.Maximum, inMemoryPackageName);
DocViewer.Document = xpsDoc.GetFixedDocumentSequence();
xpsDoc.Close();
};
}