In tệp PDF C#

Nhiều công ty đang giảm bớt việc sử dụng giấy ở một mức độ lớn. Tuy nhiên, có một số tình huống mà việc in ấn là quan trọng. Chẳng hạn, một hệ thống có thể chứa thông tin chi tiết về đơn đặt hàng trực tuyến ở định dạng PDF. Họ cần in PDF trong khi gửi đơn đặt hàng trực tuyến để giao hàng. Chúng xử lý các mục trên quy mô lớn nên việc in từng tài liệu theo cách thủ công có thể là một nhiệm vụ khá khó khăn. Aspose.PDF for .NET API, ngoài nhiều tính năng thao tác và chuyển đổi tệp khác, hỗ trợ in tệp PDF hiệu quả. Hãy để chúng tôi khám phá các trường hợp sử dụng sau đây liên quan đến việc in tệp PDF trong các ứng dụng .NET bằng C#:

In tệp PDF bằng C#

Việc in các tệp PDF có thể được tự động hóa trong các ứng dụng .NET của bạn bằng C# hoặc VB.net. Bạn có thể in các tệp PDF bằng cách làm theo các bước đơn giản dưới đây:

  1. Tạo một đối tượng của PdfViewer Class
  2. Tải tài liệu PDF đầu vào
  3. In tệp PDF

Đoạn mã dưới đây cho thấy cách in tệp PDF bằng C#:

//Tạo đối tượng PdfViewer
PdfViewer viewer = new PdfViewer();
//Mở tệp PDF đầu vào
viewer.BindPdf(dataDir + "Test.pdf");
//In tài liệu PDF
viewer.PrintDocument();
//Đóng tệp PDF
viewer.Close();

In nhiều tệp PDF bằng C#

Nếu bạn cần in nhiều tệp do tính chất kinh doanh của mình thì tính năng này đã được Aspose.PDF hỗ trợ cho .NET API. Việc in nhiều tệp PDF, từng tệp một bằng đoạn mã trên có thể hơi chậm. Do đó, chúng ta hãy tiến thêm một bước nữa trong việc in PDF để làm cho quy trình dễ dàng hơn. Ở đây chúng tôi sẽ sử dụng Danh sách trong khi thêm tên của từng tệp PDF vào danh sách đó. Các bước sau giải thích cách chúng tôi sẽ in nhiều tệp PDF:

  1. Khởi tạo một List kiểu String
  2. Thêm tệp PDF vào danh sách
  3. Tải tệp PDF đầu vào
  4. In nhiều tệp PDF

Đoạn mã cho biết cách in nhiều tệp PDF bằng C#:

var files = new List<string>();
files.Add(dataDir + "First.pdf");
files.Add(dataDir + "Second.pdf");

foreach (String file in files)
{
    //Tạo đối tượng PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Mở tệp PDF đầu vào
    viewer.BindPdf(file);
    //In tài liệu PDF
    viewer.PrintDocument();
    //Đóng tệp PDF
    viewer.Close();
}

In các trang cụ thể của PDF bằng C#

Tính năng in các trang cụ thể của tài liệu PDF có sẵn trong API. Chúng tôi sẽ xem xét một ví dụ bao gồm in nhiều phạm vi trang. Bạn cần chỉ định số trang từ và đến như được giải thích trong các bước bên dưới:

  • Đặt đường dẫn đầu vào và đầu ra của tệp
  • Đặt in các trang cụ thể bằng cách xác định phạm vi
  • Chỉ định các thông số in
  • In các trang như đã chỉ định trước đây

Đoạn mã dưới đây cho thấy cách in các trang cụ thể của tài liệu bằng C#:

string inPdf = dataDir + "Test.pdf";
string output = dataDir;
IList<PrintingJobSettings> printingJobs = new List<PrintingJobSettings>();
PrintingJobSettings printingJob1 = new PrintingJobSettings();
printingJob1.FromPage = 2;
printingJob1.ToPage = 3;
printingJobs.Add(printingJob1);

PrintingJobSettings printingJob2 = new PrintingJobSettings();
printingJob2.FromPage = 5;
printingJob2.ToPage = 7;
printingJobs.Add(printingJob2);

{
   for (var printingJobIndex = 0; printingJobIndex < printingJobs.Count; printingJobIndex++)
    {
        System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
        System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
        ps.PrinterName = "Microsoft Print to PDF";
        ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;
        ps.FromPage = printingJobs[printingJobIndex].FromPage;
        ps.ToPage = printingJobs[printingJobIndex].ToPage;
        System.Console.WriteLine(ps.FromPage);
        System.Console.WriteLine(ps.ToPage);
        System.Console.WriteLine(printingJobIndex);
        using (var theViewer = new Aspose.Pdf.Facades.PdfViewer())
        {
            // Mã in tài liệu ở đây
            // In tài liệu bằng cài đặt máy in và trang                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

In tệp PDF được bảo mật bằng C#

Một tệp PDF có thể được bảo mật và bảo vệ bằng mật khẩu. Tuy nhiên, mật khẩu có thể có hai loại, tức là mật khẩu Người dùng và Chủ sở hữu. Các tệp PDF được bảo mật bằng mật khẩu người dùng cần có mật khẩu để mở và xem tệp PDF được mã hóa. Mặt khác, mật khẩu chủ sở hữu được yêu cầu để sửa đổi nội dung của tệp PDF được bảo mật và bảo vệ bằng mật khẩu. Các bước sau giải thích việc in PDF an toàn:

  1. Tải PDF được bảo mật bằng mật khẩu
  2. Tạo đối tượng PdfViewer
  3. In tệp PDF được bảo mật

Đoạn mã sau cho biết cách in tệp PDF được bảo mật bằng C#:

//Tải tài liệu PDF an toàn trong khi chỉ định mật khẩu Người dùng hoặc Chủ sở hữu
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Tạo đối tượng PdfViewer
PdfViewer viewer = new PdfViewer();
//Mở tệp PDF đầu vào
viewer.BindPdf(document);
//In tài liệu PDF
viewer.PrintDocument();
//Đóng tệp PDF
viewer.Close();

In PDF sang khay giấy cụ thể của máy in bằng C#

Bạn có thể in tệp PDF sang khay giấy cụ thể bằng Aspose.PDF for .NET API. Chẳng hạn, bạn có thể muốn in một tệp PDF có nhiều ảnh sang một khay giấy khác và in tệp PDF văn bản sang một khay giấy khác. Thực hiện theo các bước bên dưới để đặt khay hoặc ngăn giấy ra để in các tệp PDF:

  1. Tải tệp PDF đầu vào
  2. Đặt thuộc tính để in
  3. Chỉ định Cài đặt trangNguồn giấy
  4. Gọi phương thức PrintDocumentWithSettings

Đáng chú ý ở đây là bạn có thể thay đổi tên của máy in. Ở đây chúng tôi sẽ sử dụng Microsoft Print to PDF làm ví dụ. Đoạn mã sau làm theo các bước sau và cho biết cách in tài liệu vào khay hoặc ngăn giấy cụ thể của máy in bằng C#:

Document doc = new Document("Test.pdf");
PdfViewer viewer = new PdfViewer();
viewer.BindPdf(doc);
viewer.PrinterJobName = System.IO.Path.GetFileName(doc.FileName);
viewer.Resolution = 110;
// Đặt thuộc tính để in
viewer.AutoResize = true; // Print the file with adjusted size
viewer.AutoRotate = false; // Print the file with adjusted rotation
viewer.PrintPageDialog = false; // Do not produce the page number dialog when printing
viewer.RenderingOptions.UseNewImagingEngine = true;
// Tạo các đối tượng cho cài đặt máy in và trang và PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Đặt tên máy in
ps.PrinterName = "Microsoft Print to PDF";
pgs.PaperSize = new System.Drawing.Printing.PaperSize(paperTypeName, paperWidth, paperHeight);
pgs.Margins = new System.Drawing.Printing.Margins(margins.Left, margins.Right, margins.Top, margins.Bottom);
pgs.PaperSource = GetPaperSource(printerName, trayName);
// In tài liệu bằng cài đặt máy in và trang
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Trả lại đối tượng PaperSource cho tên khay và máy in được cung cấp.
///</summary>
///<param name="printerName"></param>
///<param name="trayName"></param>
///<returns></returns>
public static System.Drawing.Printing.PaperSource GetPaperSource(string printerName, string trayName)
{
    System.Drawing.Printing.PaperSource ps = null;
    System.Drawing.Printing.PrintDocument prtDoc = new System.Drawing.Printing.PrintDocument();
    prtDoc.PrinterSettings.PrinterName = printerName;
   for (int i = 0; i < prtDoc.PrinterSettings.PaperSources.Count; i++)
    {
        if (prtDoc.PrinterSettings.PaperSources[i].SourceName.ToLower().Equals(trayName.ToLower()))
        {
            ps = prtDoc.PrinterSettings.PaperSources[i];
            break;
        }
    }
    return ps;
}

Phạm vi trang in sang các nguồn giấy khác nhau bằng C#

Có thể có những trường hợp bạn cần in các trang khác nhau của một tài liệu PDF sang các khay hoặc thùng giấy khác nhau. Chẳng hạn, một nguồn giấy khác cho trang bìa và khác cho các trang khác. Bạn chắc chắn có thể làm theo các bước dưới đây để in các phạm vi trang sang các nguồn giấy khác nhau trong cùng một lệnh in:

  1. Khởi tạo một đối tượng của lớp PdfViewer
  2. Sử dụng đại biểu trình xử lý sự kiện PdfQueryPageSettings
  3. Đặt cài đặt trang và máy in
  4. Gọi phương thức PrintDocumentWithSettings

Đoạn mã sau cho biết cách thực hiện theo các bước này và in các phạm vi trang khác nhau sang các nguồn hoặc khay giấy khác nhau bằng C#:

Aspose.Pdf.Facades.PdfViewer pdfv = new Aspose.Pdf.Facades.PdfViewer();

pdfv.PdfQueryPageSettings += PdfvOnPdfQueryPageSettings;

System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
System.Drawing.Printing.PrinterSettings prin = new System.Drawing.Printing.PrinterSettings();

pdfv.BindPdf(dataDir + "Print-PageRange.pdf");
prin.PrinterName = "HP LaserJet M9050 MFP PCL6";
prin.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("A4", 827, 1169);

Aspose.Pdf.Facades.PdfPageEditor pageEditor = new Aspose.Pdf.Facades.PdfPageEditor();
pageEditor.BindPdf(dataDir + "input.pdf");

pgs.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
pgs.PaperSize = prin.DefaultPageSettings.PaperSize;

pdfv.PrintDocumentWithSettings(pgs, prin);
pdfv.Close();

private static void PdfvOnPdfQueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs queryPageSettingsEventArgs, PdfPrintPageInfo currentPageInfo)
{
    bool isOdd = currentPageInfo.PageNumber % 2 != 0;

    System.Drawing.Printing.PrinterSettings.PaperSourceCollection paperSources = queryPageSettingsEventArgs.PageSettings.PrinterSettings.PaperSources;

    if (isOdd)
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[0];
    else
        queryPageSettingsEventArgs.PageSettings.PaperSource = paperSources[1];
}

Kiểm tra Trạng thái Công việc In trong khi In PDF bằng C#

Bạn có thể in các tệp PDF sang các máy in khác nhau. Ví dụ: Microsoft Print to PDF, Microsoft XPS Document Writer hoặc bất kỳ máy in vật lý nào. Tuy nhiên, quá trình in có thể mất nhiều thời gian đối với các tài liệu PDF lớn hoặc quá trình in có thể bị lỗi vì một số lý do. Do đó, API cung cấp một tính năng cho phép bạn kiểm tra trạng thái lệnh in theo các bước sau:

  1. Tải tệp PDF đầu vào
  2. Chỉ định cài đặt trang
  3. Đặt tên máy in
  4. In tài liệu PDF bằng PrintDocumentWithSettings

Đoạn mã dưới đây cho biết cách kiểm tra trạng thái lệnh in hoặc tiến trình in của PDF bằng C#:

// Khởi tạo đối tượng PdfViewer
PdfViewer viewer = new PdfViewer();

// Liên kết tệp PDF nguồn
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Ẩn hộp thoại in
viewer.PrintPageDialog = false;

// Tạo đối tượng Cài đặt Máy in
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();

// Chỉ định máy in anme
//ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrinterName = "Microsoft Print to PDF";

// Tên bản in kết quả
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// In kết quả ra tệp
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.PrintRange.SomePages;

// Chỉ định kích thước trang của bản in
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);

// In tài liệu với các cài đặt được chỉ định ở trên
viewer.PrintDocumentWithSettings(pgs, ps);

// Kiểm tra trạng thái in
if (viewer.PrintStatus != null)
{
    // Một ngoại lệ đã được ném
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Nhận thông báo ngoại lệ
    }
}
else
{
    // Không có lỗi nào được tìm thấy. Công việc in đã hoàn tất thành công
    Console.WriteLine("printing completed without any issue..");
}

Kết quả là đoạn mã này in trên bảng điều khiển của ứng dụng .NET về trạng thái in của tệp PDF:

C# In Pdf

Sự kết luận

Tóm lại, chúng ta đã học được các cách tiếp cận khác nhau và các trường hợp sử dụng in các tệp PDF được bảo mật và không bảo mật bằng mật khẩu bằng C# hoặc VB NET trong các ứng dụng lập trình của bạn. Hơn nữa, chúng tôi đã khám phá việc in toàn bộ tài liệu PDF. Tương tự như vậy, chúng ta đã học cách in một số phạm vi trang theo khay trang, ngăn giấy hoặc nguồn giấy cụ thể. Hơn nữa, chúng tôi cũng đã kiểm tra cách theo dõi trạng thái in hoặc tiến trình in tài liệu bằng C#.

Xem thêm