PDFファイルを印刷するC#

多くの企業は、紙の使用を大幅に減らしています。ただし、印刷が重要なシナリオがいくつかあります。たとえば、システムにはPDF形式のオンライン注文の詳細が含まれている場合があります。配達のためにオンライン注文を発送する際にPDFを印刷する必要があります。アイテムを大規模に処理するため、各ドキュメントを手動で印刷するのはかなりの作業になる可能性があります。 Aspose.PDF for .NET APIは、他の多くのファイル操作および変換機能に加えて、PDFファイルの効率的な印刷をサポートします。 C#を使用した.NETアプリケーションでのPDFファイルの印刷に関連する次のユースケースを調べてみましょう。

C#でPDFファイルを印刷する

PDFファイルの印刷は、C#またはVB.netを使用して.NETアプリケーションで自動化できます。以下の簡単な手順に従ってPDFファイルを印刷できます。

  1. PdfViewerクラスのオブジェクトを作成します
  2. 入力PDFドキュメントを読み込む
  3. PDFファイルを印刷する

以下のコードスニペットは、C#を使用してPDFファイルを印刷する方法を示しています。

//PdfViewerオブジェクトを作成します
PdfViewer viewer = new PdfViewer();
//入力PDFファイルを開く
viewer.BindPdf(dataDir + "Test.pdf");
//PDFドキュメントを印刷する
viewer.PrintDocument();
//PDFファイルを閉じる
viewer.Close();

C#で複数のPDFファイルを印刷する

ビジネスの性質上、複数のファイルを印刷する必要がある場合、この機能はAspose.PDF for .NET APIですでにサポートされています。上記のコードスニペットを使用して複数のPDFファイルを1つずつ印刷すると、少し時間がかかる場合があります。したがって、プロセスを簡単にするために、PDF印刷をさらに一歩進めましょう。ここでは、リストを使用して、各PDFファイルの名前をそのリストに追加します。次の手順は、複数のPDFファイルを印刷する方法を説明しています。

  1. 文字列型のリストを初期化する
  2. リストにPDFファイルを追加
  3. 入力PDFファイルをロードします
  4. 複数のPDFファイルを印刷する

コードスニペットは、C#を使用して複数のPDFファイルを印刷する方法を示しています。

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ファイルは、パスワードで保護および保護できます。ただし、パスワードには、ユーザーパスワードと所有者パスワードの2種類があります。ユーザーパスワードで保護されたPDFファイルには、暗号化されたPDFファイルを開いて表示するためのパスワードが必要です。一方、保護され、パスワードで保護されたPDFファイルの内容を変更するには、所有者のパスワードが必要です。次の手順で、安全なPDFの印刷について説明します。

  1. パスワード付きの保護されたPDFをロード
  2. PdfViewerオブジェクトを作成します
  3. 保護されたPDFファイルを印刷する

次のコードスニペットは、C#を使用して保護されたPDFファイルを印刷する方法を示しています。

//ユーザーまたは所有者のパスワードを指定しながら、安全なPDFドキュメントをロードします
Document document = new Document(dataDir + "Password.pdf" , "userORowner");
//PdfViewerオブジェクトを作成します
PdfViewer viewer = new PdfViewer();
//入力PDFファイルを開く
viewer.BindPdf(document);
//PDFドキュメントを印刷する
viewer.PrintDocument();
//PDFファイルを閉じる
viewer.Close();

C#を使用してプリンターの特定の用紙トレイにPDFを印刷する

Aspose.PDF for .NET APIを使用して、PDFを特定の用紙トレイに印刷できます。たとえば、多くの写真を含むPDFを別の用紙トレイに印刷し、テキストのPDFファイルを別の用紙トレイに印刷したい場合があります。以下の手順に従って、PDFファイルを印刷するための出力トレイまたはビンを設定します。

  1. 入力PDFファイルをロードします
  2. 印刷用の属性を設定する
  3. PageSettingsPaperSourceを指定します
  4. PrintDocumentWithSettingsメソッドを呼び出します

ここで、プリンタの名前を変更できることは注目に値します。ここでは、例としてMicrosoft PrinttoPDFを使用します。次のコードスニペットは、次の手順に従い、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#を使用してページ範囲をさまざまな給紙元に印刷する

1つの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];
}

C#でPDFを印刷するときに印刷ジョブのステータスを確認する

PDFファイルをさまざまなプリンターに印刷できます。たとえば、Microsoft Print to PDF、Microsoft XPS Document Writer、または任意の物理プリンター。ただし、巨大なPDFドキュメントの場合、印刷に長い時間がかかる場合や、何らかの理由で印刷が失敗する場合があります。したがって、APIには、次の手順で印刷ジョブのステータスを確認できる機能があります。

  1. 入力PDFファイルをロードします
  2. ページ設定を指定する
  3. プリンター名を設定する
  4. PrintDocumentWithSettingsを使用してPDFドキュメントを印刷します

以下のコードスニペットは、C#を使用して印刷ジョブのステータスまたはPDFの印刷の進行状況を確認する方法を示しています。

// 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 ="MicrosoftXPSドキュメントライター";
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..");
}

その結果、このコードスニペットは、PDFファイルの印刷ステータスについて.NETアプリケーションのコンソールに印刷されます。

C#Print Pdf

結論

要約すると、プログラミングアプリケーションでC#またはVBNETを使用してパスワードで保護されたPDFファイルと保護されていないPDFファイルを印刷するさまざまなアプローチと使用例を学びました。さらに、PDFドキュメント全体の印刷についても検討しました。同様に、特定のページトレイ、ビン、または用紙ソースによっていくつかのページ範囲を印刷することを学びました。さらに、C#を使用してドキュメントの印刷ステータスまたは印刷進行状況を監視する方法も確認しました。

関連項目