Mencetak PDF dalam aplikasi WPF

Potongan kode berikut juga bekerja dengan pustaka Aspose.PDF.Drawing.

Cetak Langsung

Pustaka Aspose.PDF memiliki kemampuan untuk mengonversi file PDF menjadi XPS. Kita dapat menggunakan fungsi ini untuk mengatur pencetakan dokumen. Mari kita pertimbangkan contoh untuk pencetakan langsung:

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

        //Buat URI untuk Paket Xps
        //URI apa pun sebenarnya akan baik-baik saja di sini. Ini berfungsi sebagai tempat penampung untuk
        //URI paket di dalam PackageStore
        var inMemoryPackageName = $"memorystream://{Guid.NewGuid()}.xps";
        var packageUri = new Uri(inMemoryPackageName);

        //Tambahkan paket ke 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, "Dokumen tetap");
            else
                throw new NullReferenceException();
        }
        PackageStore.RemovePackage(packageUri);
        xpsDoc.Close();

    }

Dalam kasus ini, kita akan mengikuti langkah-langkah berikut:

  1. Buka file PDF menggunakan OpenFileDialog
  2. Konversi PDF ke XPS dan simpan dalam objek MemoryStream
  3. Hubungkan objek MemoryStream dengan Xps Package
  4. Tambahkan paket ke Package Store
  5. Buat XpsDocument berdasarkan paket
  6. Dapatkan instance dari FixedDocumentSequence
  7. Kirim sequence ini ke printer menggunakan PrintDialog

Lihat dan cetak dokumen

Dalam banyak kasus, pengguna ingin melihat dokumen sebelum mencetak. Untuk mengimplementasikan tampilan, kita dapat menggunakan kelas DocViewer. Sebagian besar langkah untuk mengimplementasikan pendekatan ini serupa dengan contoh sebelumnya.

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);

        //Tambahkan paket ke PackageStore
        PackageStore.AddPackage(packageUri, package);

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