Bekerja dengan Pencetakan PDF - Facades

Mencetak File PDF ke Printer Default menggunakan Pengaturan Printer dan Halaman

Pertama, dokumen dikonversi menjadi gambar dan kemudian dicetak pada printer. Kami membuat instance dari kelas PdfViewer yang memungkinkan Anda mencetak file PDF ke printer default, menggunakan metode BindPdf untuk dokumen tersebut, dan membuat pengaturan tertentu. Dalam contoh kami, kami menggunakan format A4, orientasi potret. Dalam printerSettings, pertama-tama, kami menunjukkan nama printer yang akan kami gunakan untuk mencetak. Atau jika tidak, akan mencetak ke printer default. Selanjutnya, tentukan jumlah salinan yang kami butuhkan.

 public static void PrintingPDFFile()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Tetapkan atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan
            viewer.PrintPageDialog = false;   // Jangan tampilkan dialog nomor halaman saat mencetak

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
            System.Drawing.Printing.PrintDocument prtdoc = new System.Drawing.Printing.PrintDocument();

            // Tetapkan nama printer
            ps.PrinterName = prtdoc.PrinterSettings.PrinterName;

            // Tetapkan Ukuran Halaman (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Tetapkan Margin Halaman (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

Untuk menampilkan dialog cetak, coba gunakan potongan kode berikut:

        public static void PrintingPDFDisplayPrintDialog()
        {
            // Membuat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Tetapkan atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan

            // Membuat objek untuk pengaturan printer dan halaman serta PrintDocument

            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings
            {

                // Tetapkan UkuranHalaman (jika diperlukan)
                PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169),

                // Tetapkan MarginHalaman (jika diperlukan)
                Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0)
            };

            System.Windows.Forms.PrintDialog printDialog = new System.Windows.Forms.PrintDialog();
            if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                // Kode pencetakan dokumen ada di sini
                // Cetak dokumen menggunakan pengaturan printer dan halaman
                System.Drawing.Printing.PrinterSettings ps = printDialog.PrinterSettings;
                viewer.PrintDocumentWithSettings(pgs, ps);
            }

            // Tutup file PDF setelah pencetakan
            viewer.Close();
        }

Cetak PDF ke Printer Lunak

Ada printer yang mencetak ke file. Kami mengatur nama printer virtual, dan, dengan analogi dengan contoh sebelumnya, kami membuat pengaturan.

public static void PrintingPDFToSoftPrinter()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Atur atribut untuk mencetak
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan
            viewer.PrintPageDialog = false;   // Tidak menampilkan dialog nomor halaman saat mencetak

            viewer.PrintAsImage = false;

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();

            // Atur nama printer
            ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
            // Atau atur printer PDF
            //ps.PrinterName = "Adobe PDF";

            // Atur UkuranHalaman (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Atur MarginHalaman (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

Menyembunyikan Dialog Cetak

Aspose.PDF untuk .NET memungkinkan Anda untuk menyembunyikan dialog cetak. Untuk ini gunakan metode PrintPageDialog.

Cuplikan kode berikut menunjukkan cara menyembunyikan dialog cetak.

public static void PrintingPDFHidePrintDialog()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Setel atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan

            viewer.PrintPageDialog = false;   // Jangan tampilkan dialog nomor halaman saat mencetak

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();

            // Setel nama printer XPS/PDF
            ps.PrinterName = "OneNote for Windows 10";

            // Setel UkuranHalaman (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Setel MarginHalaman (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

Mencetak PDF Berwarna ke File XPS sebagai Grayscale

Dokumen PDF berwarna dapat dicetak ke printer XPS sebagai grayscale, menggunakan PdfViewer. Untuk mencapai hal tersebut, Anda perlu menggunakan properti PdfViewer.PrintAsGrayscale dan mengaturnya ke true. Cuplikan kode berikut menunjukkan implementasi dari Properti PdfViewer.PrintAsGrayscale.

public static void PrintingPDFasGrayscale()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Atur atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan

            viewer.PrintPageDialog = false;   // Jangan tampilkan dialog nomor halaman saat mencetak
            viewer.PrintAsGrayscale = false;

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();

            // Atur nama printer XPS/PDF
            ps.PrinterName = "OneNote for Windows 10";

            // Atur UkuranHalaman (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Atur MarginHalaman (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

Konversi PDF ke PostScript

Kelas PdfViewer menyediakan kemampuan untuk mencetak dokumen PDF dan dengan bantuan kelas ini, kita juga dapat mengonversi file PDF ke format PostScript. Untuk mengonversi file PDF ke PostScript, pertama-tama instal printer PS apa pun dan cukup cetak ke file dengan bantuan PdfViewer.

Cuplikan kode berikut menunjukkan cara mencetak dan mengonversi PDF ke format PostScript.

public static void PrintingPDFToPostScript()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF input
            viewer.BindPdf(_dataDir + "sample.pdf");

            // Tetapkan atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan
            viewer.PrintPageDialog = false;   // Jangan tampilkan dialog nomor halaman saat mencetak

            viewer.PrintAsImage = false;

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();

            // Tetapkan nama printer XPS/PDF
            ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
            // Tetapkan nama file output dan atribut PrintToFile
            ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
            ps.PrintToFile = true;

            // Tetapkan PageSize (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Tetapkan PageMargins (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

Memeriksa Status Pekerjaan Cetak

File PDF dapat dicetak ke printer fisik maupun ke Microsoft XPS Document Writer, tanpa menampilkan dialog cetak, menggunakan kelas PdfViewer. Ketika mencetak file PDF besar, prosesnya mungkin memakan waktu lama sehingga pengguna mungkin tidak yakin apakah proses pencetakan selesai atau mengalami masalah. Untuk mengetahui status pekerjaan cetak, gunakan properti PrintStatus. Kode berikut menunjukkan cara mencetak file PDF ke file XPS dan mendapatkan status pencetakan.

public static void CheckingPrintJobStatus()
        {
            // Buat objek PdfViewer
            PdfViewer viewer = new PdfViewer();

            // Buka file PDF masukan
            viewer.BindPdf(_dataDir + "sample1.pdf");

            // Atur atribut untuk pencetakan
            viewer.AutoResize = true;         // Cetak file dengan ukuran yang disesuaikan
            viewer.AutoRotate = true;         // Cetak file dengan rotasi yang disesuaikan
            viewer.PrintPageDialog = false;   // Jangan tampilkan dialog nomor halaman saat mencetak

            viewer.PrintAsImage = false;

            // Buat objek untuk pengaturan printer dan halaman serta PrintDocument
            System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
            System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();

            // Atur nama printer XPS/PDF
            ps.PrinterName = "HP Universal Printing PS (v7.0.0)";
            // Atur nama file keluaran dan atribut PrintToFile
            ps.PrintFileName = _dataDir + "PdfToPostScript_out.ps";
            ps.PrintToFile = true;

            // Atur PageSize (jika diperlukan)
            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

            // Atur PageMargins (jika diperlukan)
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            // Cetak dokumen menggunakan pengaturan printer dan halaman
            viewer.PrintDocumentWithSettings(pgs, ps);

            // Periksa status cetak
            if (viewer.PrintStatus != null && viewer.PrintStatus is Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            else
            {
                // Tidak ditemukan kesalahan. Pekerjaan pencetakan telah selesai dengan sukses
                Console.WriteLine("Pencetakan selesai tanpa masalah..");
            }

            // Tutup file PDF setelah mencetak
            viewer.Close();
        }

        struct PrintingJobSettings
        {
            public int ToPage { get; set; }
            public int FromPage { get; set; }
            public string OutputFile { get; set; }
            public System.Drawing.Printing.Duplex Mode { get; set; }
        }

Mencetak halaman dalam mode Simpleks dan Dupleks

Dalam pekerjaan pencetakan tertentu, halaman dokumen PDF dapat dicetak dalam mode Dupleks atau Simpleks, tetapi Anda tidak dapat mencetak beberapa halaman sebagai simpleks dan beberapa halaman sebagai dupleks dalam satu pekerjaan cetak. Namun untuk memenuhi persyaratan tersebut, rentang halaman yang berbeda dan objek PrintingJobSettings dapat digunakan. Cuplikan kode berikut menunjukkan cara mencetak beberapa halaman file PDF dalam mode Simpleks dan beberapa halaman dalam mode Dupleks.

 public static void PrintingPagesInSimplexAndDuplexMode()
        {
            int printingJobIndex = 0;
            string inPdf = _dataDir + "sample-8page.pdf";
            string output = _dataDir;
            IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();

            PrintingJobSettings printingJob1 = new PrintingJobSettings
            {
                FromPage = 1,
                ToPage = 3,
                OutputFile = output + "sample_1_3.xps",
                Mode = Duplex.Default
            };

            printingJobs.Add(printingJob1);

            PrintingJobSettings printingJob2 = new PrintingJobSettings
            {
                FromPage = 4,
                ToPage = 6,
                OutputFile = output + "sample_4_6.xps",
                Mode = Duplex.Simplex
            };

            printingJobs.Add(printingJob2);

            PrintingJobSettings printingJob3 = new PrintingJobSettings
            {
                FromPage = 7,
                ToPage = 7,
                OutputFile = output + "sample_7.xps",
                Mode = Duplex.Default
            };

            printingJobs.Add(printingJob3);

            PdfViewer viewer = new PdfViewer();

            viewer.BindPdf(inPdf);
            viewer.AutoResize = true;
            viewer.AutoRotate = true;
            viewer.PrintPageDialog = false;

            PrinterSettings ps = new PrinterSettings();
            PageSettings pgs = new PageSettings();

            ps.PrinterName = "Microsoft XPS Document Writer";
            ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
            ps.PrintToFile = true;
            ps.FromPage = printingJobs[printingJobIndex].FromPage;
            ps.ToPage = printingJobs[printingJobIndex].ToPage;
            ps.Duplex = printingJobs[printingJobIndex].Mode;
            ps.PrintRange = PrintRange.SomePages;

            pgs.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);
            ps.DefaultPageSettings.PaperSize = pgs.PaperSize;
            pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);

            viewer.EndPrint += (sender, args) =>
            {
                if (++printingJobIndex < printingJobs.Count)
                {
                    ps.PrintFileName = System.IO.Path.GetFullPath(printingJobs[printingJobIndex].OutputFile);
                    ps.FromPage = printingJobs[printingJobIndex].FromPage;
                    ps.ToPage = printingJobs[printingJobIndex].ToPage;
                    ps.Duplex = printingJobs[printingJobIndex].Mode;
                    viewer.PrintDocumentWithSettings(pgs, ps);
                }
            };

            viewer.PrintDocumentWithSettings(pgs, ps);
        }