Друк файлів PDF C#

Багато компаній значною мірою скорочують використання паперу. Проте в деяких ситуаціях друк є важливим. Наприклад, система може містити деталі онлайн-замовлення у форматі PDF. Їм потрібно роздрукувати PDF під час надсилання онлайн-замовлення для доставки. Вони обробляють елементи у великому масштабі, тому друк кожного документа вручну може бути досить складним завданням. Aspose.PDF for .NET API, окрім багатьох інших функцій обробки та перетворення файлів, підтримує ефективний друк PDF-файлів. Давайте розглянемо наступні випадки використання, пов’язані з друком PDF-файлів у програмах .NET за допомогою C#:

Друк файлу PDF за допомогою C#

Друк PDF-файлів можна автоматизувати у ваших програмах .NET за допомогою C# або VB.net. Ви можете роздрукувати файли PDF, виконавши прості кроки нижче:

  1. Створіть об’єкт класу PdfViewer.
  2. Завантажити вхідний документ PDF
  3. Роздрукуйте файл PDF

Наведений нижче фрагмент коду показує, як надрукувати файл PDF за допомогою C#:

//Створити об'єкт PdfViewer
PdfViewer viewer = new PdfViewer();
//Відкрити вхідний файл PDF
viewer.BindPdf(dataDir + "Test.pdf");
//Роздрукувати документ PDF
viewer.PrintDocument();
//Закрити файл PDF
viewer.Close();

Друк кількох PDF-файлів за допомогою C#

Якщо вам потрібно надрукувати кілька файлів через характер вашого бізнесу, тоді ця функція вже підтримується Aspose.PDF for .NET API. Друк кількох файлів PDF один за одним із наведеним вище фрагментом коду може бути дещо повільним. Тому давайте зробимо ще один крок у друк PDF, щоб полегшити процес. Тут ми будемо використовувати список, додаючи назву кожного файлу PDF до цього списку. Наступні кроки пояснюють, як ми будемо друкувати кілька PDF-файлів:

  1. Ініціалізація списку типу String
  2. Додайте файли PDF до списку
  3. Завантажити вхідний файл PDF
  4. Друк кількох файлів PDF

Фрагмент коду показує, як надрукувати кілька файлів PDF за допомогою C#:

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

foreach (String file in files)
{
    //Створіть об'єкт PdfViewer
    PdfViewer viewer = new PdfViewer();
    //Відкрити вхідний файл PDF
    viewer.BindPdf(file);
    //Роздрукувати документ PDF
    viewer.PrintDocument();
    //Закрити файл PDF
    viewer.Close();
}

Друк певних сторінок PDF за допомогою C#

Функція друку окремих сторінок документів PDF доступна в API. Ми розглянемо приклад, який включає друк кількох діапазонів сторінок. Вам потрібно вказати номери сторінок «від» і «до», як описано в наведених нижче кроках.

  • Встановіть шляхи введення та виведення файлу
  • Налаштуйте друк певних сторінок, визначивши діапазон
  • Вкажіть параметри друку
  • Роздрукуйте сторінки, як зазначено раніше

Наведений нижче фрагмент коду показує, як надрукувати певні сторінки документа за допомогою 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())
        {
            // Тут міститься код друку документів
            // Роздрукуйте документ за допомогою параметрів принтера та сторінки                    
            theViewer.BindPdf(inPdf);
            theViewer.AutoResize = true;
            theViewer.AutoRotate = true;
            theViewer.PrintPageDialog = false;
            theViewer.PrintDocumentWithSettings(pgs, ps);
            theViewer.Close();
        }
    }
}

Друк захищеного файлу PDF за допомогою C#

PDF-файл можна захистити паролем. Однак пароль може бути двох типів, тобто пароль користувача та пароль власника. Файли PDF, захищені паролем користувача, потребують пароля для відкриття та перегляду зашифрованого файлу PDF. З іншого боку, для зміни вмісту захищеного та захищеного паролем PDF-файлу потрібен пароль власника. Наведені нижче кроки пояснюють друк захищеного PDF-файлу.

  1. Завантажте захищений PDF із паролем
  2. Створіть об’єкт PdfViewer.
  3. Роздрукуйте захищений файл PDF

Наступний фрагмент коду показує, як надрукувати захищений файл PDF за допомогою C#:

//Завантажте безпечний PDF-документ, вказавши пароль користувача або власника
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//Створити об'єкт PdfViewer
PdfViewer viewer = new PdfViewer();
//Відкрити вхідний файл PDF
viewer.BindPdf(document);
//Роздрукувати документ PDF
viewer.PrintDocument();
//Закрити файл PDF
viewer.Close();

Друк PDF у певний лоток для паперу принтера за допомогою C#

Ви можете надрукувати PDF на певний лоток для паперу за допомогою Aspose.PDF for .NET API. Наприклад, ви можете надрукувати PDF-файл із великою кількістю фотографій на іншому лотку для паперу, а текстовий PDF-файл — на іншому лотку для паперу. Виконайте наведені нижче дії, щоб налаштувати вихідний лоток або корзину для друку PDF-файлів:

  1. Завантажити вхідний файл PDF
  2. Встановити атрибути для друку
  3. Укажіть PageSettings і PaperSource
  4. Викличте метод PrintDocumentWithSettings.

Тут варто відзначити, що ви можете змінити назву принтера. Тут ми будемо використовувати Microsoft Print to PDF як приклад. Наступний фрагмент коду виконує ці кроки та показує, як надрукувати документ у певному лотку для паперу чи відсіку принтера за допомогою 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;
// Встановити атрибути для друку
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;
// Створення об’єктів для параметрів принтера та сторінки та PrintDocument
System.Drawing.Printing.PrinterSettings ps = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings pgs = new System.Drawing.Printing.PageSettings();
// Встановіть назву принтера
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);
// Роздрукуйте документ за допомогою параметрів принтера та сторінки
viewer.PrintDocumentWithSettings(pgs, ps);

///<summary>
/// Повертає об’єкт PaperSource для наданого імені принтера та лотка.
///</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;
}

Друк діапазону сторінок на різних джерелах паперу за допомогою C#

Можуть бути ситуації, коли вам може знадобитися надрукувати різні сторінки одного PDF-документа в різних лотках або кошику для паперу. Наприклад, інше джерело паперу для титульної сторінки та інше для інших сторінок. Ви, звичайно, можете виконати наведені нижче кроки, щоб надрукувати діапазони сторінок на різних джерелах паперу в межах одного завдання друку.

  1. Ініціалізація об’єкта класу PdfViewer.
  2. Використовуйте делегат обробника подій PdfQueryPageSettings.
  3. Встановіть параметри сторінки та принтера
  4. Викличте метод PrintDocumentWithSettings.

У наведеному нижче фрагменті коду показано, як виконувати ці кроки та друкувати різні діапазони сторінок на різних джерелах паперу чи лотках за допомогою 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];
}

Перевірте статус завдання друку під час друку PDF-файлу за допомогою C#

Ви можете друкувати PDF-файли на різних принтерах. Наприклад, Microsoft Print to PDF, Microsoft XPS Document Writer або будь-який фізичний принтер. Однак друк великих PDF-документів може зайняти тривалий час або з певної причини друк може бути невдалим. Тому API пропонує функцію, яка дозволяє перевірити статус завдання друку, виконавши такі дії:

  1. Завантажити вхідний файл PDF
  2. Вкажіть параметри сторінки
  3. Встановіть назву принтера
  4. Роздрукуйте документ PDF за допомогою PrintDocumentWithSettings

У наведеному нижче фрагменті коду показано, як перевірити стан завдання друку або прогрес друку PDF-файлу за допомогою C#:

// Створення екземпляра об'єкта PdfViewer
PdfViewer viewer = new PdfViewer();

// Прив’язати вихідний файл PDF
viewer.BindPdf(dataDir + "Sample Document with Bookmark.pdf");
viewer.AutoResize = true;

// Приховати діалогове вікно друку
viewer.PrintPageDialog = false;

// Створіть об’єкт «Параметри принтера».
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();

// Вкажіть назву принтера
//ps.PrinterName = "Microsoft XPS Document Writer";
ps.PrinterName = "Microsoft Print to PDF";

// Назва отриманого роздруківки
//ps.PrintFileName = "ResultantPrintout.xps";
ps.PrintFileName = "ResultantPrintout.pdf";

// Роздрукувати вихідні дані у файл
ps.PrintToFile = true;
ps.FromPage = 1;
ps.ToPage = 2;
ps.PrintRange = System.Drawing.Printing.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.PrintDocumentWithSettings(pgs, ps);

// Перевірте стан друку
if (viewer.PrintStatus != null)
{
    // Було створено виняток
    Exception ex = viewer.PrintStatus as Exception;
    if (ex != null)
    {
        // Отримати повідомлення про винятки
    }
}
else
{
    // Помилок не виявлено. Завдання друку успішно завершено
    Console.WriteLine("printing completed without any issue..");
}

У результаті цей фрагмент коду друкує на консолі програми .NET статус друку PDF-файлу:

C# Друк PDF

Висновок

Підводячи підсумок, ми навчилися різних підходів і випадків використання друку PDF-файлів, захищених і незахищених паролем, за допомогою C# або VB NET у ваших програмних програмах. Крім того, ми дослідили друк цілих PDF-документів. Так само ми навчилися друкувати деякі діапазони сторінок за допомогою певних лотків, бункерів або джерел паперу. Крім того, ми також перевірили, як контролювати стан друку або процес друку документів за допомогою C#.

Дивись також