PDF Printer(PDF印刷) サンプル

PDF Printer(PDF印刷)

「PDF Printer」ライブラリはPDFばかりではなくTIFFやJPEG画像を各種のプリンタードライバーを介して印刷します。

PostScriptプリンターはやPCLプリンターをサポートしています。

ローカルプリンター、リモートプリンターおよびインターネット上のプリンターのいずれにも印刷できます。

プリンターの各種プロパティ(用紙トレー、用紙サイズ、複数ページ印刷など)を詳細に設定でき、 印刷ジョブを詳細にコントロールできます。

無償評価版のダウンロードとインストール


C#開発環境 C/C++開発環境
1.Zipファイルをダウンロードする場合
ライブラリ(評価版API)は無償でダウンロード(試用)できます。
ファイルをダウンロードしてから、適当なフォルダーに解凍します。
以下のようなフォルダーができますので適宜利用します。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jar PRNA.jar(Javaのラッパー)
libC/C++用のlibファイル
samples各種開発言語のサンプル
無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。
2.NuGetでインストールする場合
nuget.org から PdfTools.PdfPrinter をインストールします。

  NuGetでのインストール手順

この場合は参照設定などの必要はありません。 評価用ライセンスは こちら から取得してください。
C#開発環境 C/C++開発環境
ライブラリ(評価版API)は無償でダウンロード(試用)できます。
ファイルをダウンロードしてから、適当なフォルダーに解凍します。
以下のようなフォルダーができますので適宜利用します。
binライブラリやライセンスマネージャーなど
doc使用説明書やjavadocなど
includeC/C++用のヘッダー(.h)ファイル
jar PRNA.jar(Javaのラッパー)
libC/C++用のlibファイル
samples各種開発言語のサンプル
無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。

PDF文書やTIFF画像を印刷

文書(PDFやTIFF)の全ページまたは選択されたページを印刷

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

// 指定された1台のプリンターに入力されたファイルを印刷する
if (!PDFPrnPrintFile(pPrinter, szInputPath, szPrinterName, _T(""), iFirstPage, iLastPage))
{
    _tprintf(_T("入力ファイル %s を印刷できません。 %s (エラーコード: 0x%08x).\n"),
        szInputPath, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
}
else
    _tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    // 指定された1台のプリンターに入力されたファイルを印刷する
    if (!printer.PrintFile(inputPath, printerName, "", firstPage, lastPage))
        throw new Exception(String.Format("入力ファイル {0} を印刷できません。 " + 
            "{1} (エラーコード: 0x{2:x}).", inputPath, printer.ErrorMessage, printer.ErrorCode));
}
Console.WriteLine("終了");

複数のPDF文書やTIFF画像を単一のプリンターで印刷

複数文書(PDFやTIFF)の指定されたページを単一の印刷ジョブとして指定されたプリンターで印刷

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

// プリンターをオープン
if (!PDFPrnOpenPrinter(pPrinter, szPrinterName))
{
    _tprintf(_T("プリンター %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
        szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 印刷ジョブ開始
if (!PDFPrnBeginDocument(pPrinter, _T("My print job.")))
{
    _tprintf(_T("プリンターに接続できません。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 全文書を繰り返す
for (int i = 0; i < nInputPaths; i++)
{
    // 入力ファイルをオープン
    if (!PDFPrnOpen(pPrinter, szInputPaths[i], _T("")))
    {
        _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
            szInputPaths[i], PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
        iReturnValue = 1;
        goto cleanup;
    }

    // オープンしたファイルの全ページを繰り返す
    for (int iPage = 1; iPage <= PDFPrnGetPageCount(pPrinter); iPage++)
    {
        // オープンしたファイルのページを印刷
        if (!PDFPrnPrintPage(pPrinter, iPage))
        {
            _tprintf(_T("ページ %d をプリンター %s で印刷できません。 %s (エラーコード: 0x%08x).\n"),
                iPage, szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
            iReturnValue = 1;
            goto cleanup;
        }
    }

    // 入力ファイルをクローズ
    PDFPrnClose(pPrinter);
}

// 印刷ジョブ終了
if (!PDFPrnEndDocument(pPrinter))
{
    _tprintf(_T("印刷ジョブを正しく終了できません。 %s (エラーコード: 0x%08x)."),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}
cleanup:
_tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    // プリンターをオープン
    if (!printer.OpenPrinter(printerName))
        throw new Exception(String.Format("プリンター {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", printerName, printer.ErrorMessage, printer.ErrorCode));

    // 印刷ジョブ開始
    if (!printer.BeginDocument("My print job."))
        throw new Exception(String.Format("プリンターに接続できません。 " + 
            "{0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 全文書を繰り返す
    foreach (string path in inputPaths)
    {
        // 入力ファイルをオープン
        if (!printer.Open(path, ""))
            throw new Exception(String.Format("入力ファイル {0} をオープンできません。 {1} " + 
                "(エラーコード: 0x{2:x}).", path, printer.ErrorMessage, printer.ErrorCode));

        // オープンしたファイルの全ページを繰り返す
        for (int pageNo = 1; pageNo <= printer.PageCount; pageNo++)
        {
            // オープンしたファイルのページを印刷
            if (!printer.PrintPage(pageNo))
                throw new Exception(String.Format("ページ {0} をプリンター {1} で印刷できません。" +
                    " {2} (ErrorCode: 0x{3:x}).", pageNo, printerName, 
                    printer.ErrorMessage, printer.ErrorCode));
        }

        // 入力ファイルをクローズ
        printer.Close();
    }

    // 印刷ジョブ終了
    if (!printer.EndDocument())
        throw new Exception(String.Format("The print job could not be completed or the " + 
            "connection could not be closed. {0} (ErrorCode: 0x{1:x}).", printer.ErrorMessage, 
            printer.ErrorCode));
}
Console.WriteLine("終了");

単一のPDF文書やTIFF画像を複数のプリンターで印刷

単一の文書(PDFやTIFF)を複数のプリンターで印刷します。
このサンプルでは、文書の指定されたページをあるプリンターで印刷し、2ページ以降を別のプリンターで印刷します。

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

// 入力ファイルをオープン
if (!PDFPrnOpen(pPrinter, szInputPath, _T("")))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
        szInputPath, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
}

// 最初のプリンターをオープン
if (!PDFPrnOpenPrinter(pPrinter, szFirstPrinterName))
{
    _tprintf(_T("プリンター %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
        szFirstPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 最初の印刷ジョブを開始
if (!PDFPrnBeginDocument(pPrinter, _T("My first print job.\n")))
{
    _tprintf(_T("プリンターに接続できません。 %s (ErrorCode: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 入力ファイルの指定されたページを印刷
if (!PDFPrnPrintPage(pPrinter, iPageNumber))
{
    _tprintf(_T("ファイル %s の %d ページをプリンター %s に印刷できません。 %s (エラーコード: 0x%08x).\n"),
        szInputPath, iPageNumber, szFirstPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 最初の印刷ジョブを終了
if (!PDFPrnEndDocument(pPrinter))
{
    _tprintf(_T("プリンター %s での印刷ジョブを正しく終了できませんでした。 %s (エラーコード: 0x%08x).\n"),
        szFirstPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 最初のプリンターをクローズ
PDFPrnClosePrinter(pPrinter);

// 2番目のプリンターをオープン
if (!PDFPrnOpenPrinter(pPrinter, szSecondPrinterName))
{
    _tprintf(_T("プリンター %s をオープン できません。%s (エラーコード: 0x%08x).\n"),
        szSecondPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 2番目印刷ジョブを開始
if (!PDFPrnBeginDocument(pPrinter, _T("My second print job.")))
{
    _tprintf(_T("プリンターに接続できません。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 2ページ目(もし存在すれば)から最終ページまでを繰り返す
for (int iPage = 2; iPage < PDFPrnGetPageCount(pPrinter); iPage++)
{
    // 入力ファイルの指定されたページを印刷
    if (!PDFPrnPrintPage(pPrinter, iPage))
    {
        _tprintf(_T("ページ %d をプリンター %s に印刷できません。 %s (エラーコード: 0x%08x).\n"),
            iPage, szSecondPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
        iReturnValue = 1;
        goto cleanup;
    }
}

// 2番目の印刷ジョブを終了
if (!PDFPrnEndDocument(pPrinter))
{
    _tprintf(_T("次の印刷ジョブを正しく終了できませんでした。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 2番目のプリンターをクローズClose second printer
PDFPrnClosePrinter(pPrinter);

// 入力ファイルをクローズ
PDFPrnClose(pPrinter);

cleanup:
_tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    // 入力ファイルをオープン
    if (!printer.Open(inputPath, ""))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", inputPath, printer.ErrorMessage, printer.ErrorCode));

    // 最初のプリンターをオープン
    if (!printer.OpenPrinter(firstPrinterName))
        throw new Exception(String.Format("オープン {0} をオープンできません。 {1} " + 
            "(エラーコード: 0x{2:x}).", firstPrinterName, printer.ErrorMessage, printer.ErrorCode));

    // 最初の印刷ジョブを開始
    if (!printer.BeginDocument("My first print job."))
        throw new Exception(String.Format("プリンターに接続できません。 " +
                "{0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 入力ファイルの指定されたページを印刷
    if (!printer.PrintPage(pageNumber))
        throw new Exception(String.Format("入力ファイル {1} の {0} ページをプリンター {2} に印刷できません。" + 
            " {3} (エラーコード: 0x{4:x}).", pageNumber, inputPath, firstPrinterName, 
            printer.ErrorMessage, printer.ErrorCode));

    // 最初の印刷ジョブを終了
    if (!printer.EndDocument())
        throw new Exception(String.Format("印刷ジョブを正しく終了できませんでした。" + 
            " {0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 最初のプリンターをクローズ
    printer.ClosePrinter();

    // 2番目のプリンターをオープン
    if (!printer.OpenPrinter(secondPrinterName))
        throw new Exception(String.Format("プリンター {0} をオープンできません。 {1} " + 
            "(エラーコード: 0x{2:x}).", secondPrinterName, printer.ErrorMessage, printer.ErrorCode));

    // 2番目の印刷ジョブを開始
    if (!printer.BeginDocument("My second print job."))
        throw new Exception(String.Format("プリンターに接続できません。 " + 
            "{0} (エラーコード: 0x{2:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 2ページ目(もし存在すれば)から最終ページまでを繰り返す
    for (int pageNo = 2; pageNo < printer.PageCount; pageNo++)
    {
        // 入力ファイルの指定されたページを印刷
        if (!printer.PrintPage(pageNo))
            throw new Exception(String.Format("ページ {0} をプリンター {1} に印刷できません。" + 
                " {2} (エラーコード: 0x{3:x}).", pageNo, secondPrinterName, 
                printer.ErrorMessage, printer.ErrorCode));
    }

    // 2番目の印刷ジョブを終了
    if (!printer.EndDocument())
        throw new Exception(String.Format("印刷ジョブを正しく終了できませんでした。" + 
            " {0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 2番目のプリンターをクローズ
    printer.ClosePrinter();

    // 入力ファイルをクローズ
    printer.Close();
}
Console.WriteLine("終了");

PDF文書をファイルに印刷

スプールファイルをプリンタに送信する代わりにファイルに保存します。
使用するプリンタドライバに応じて、PostScript、PCL、またはその他形式のファイルを作成します。

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

// プリンターをオープン
if (!PDFPrnOpenPrinter(pPrinter, szPrinterName))
{
    _tprintf(_T("プリンター %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
        szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 印刷データを出力するファイル名
PDFPrnSetOutput(pPrinter, szOutputPath);

// 印刷ジョブ開始
if (!PDFPrnBeginDocument(pPrinter, _T("My print job.")))
{
    _tprintf(_T("プリンターに接続できません。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 入力ファイルをオープン
if (!PDFPrnOpen(pPrinter, szInputPath, _T("")))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (ErrorCode: 0x%08x).\n"),
        szInputPath, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 入力ファイルの全てのページを繰り返す
for (int iPage = 1; iPage lt;= PDFPrnGetPageCount(pPrinter); iPage++)
{
    // 入力ファイルの指定されたページを印刷
    if (!PDFPrnPrintPage(pPrinter, iPage))
    {
        _tprintf(_T("ページ %d をプリンター %s で印刷できません。 %s (エラーコード: 0x%08x).\n"),
            iPage, szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
        iReturnValue = 1;
        goto cleanup;
    }
}

// 入力ファイルをクローズ
PDFPrnClose(pPrinter);

// 印刷ジョブ終了
if (!PDFPrnEndDocument(pPrinter))
{
    _tprintf(_T("印刷ジョブを正しく終了できませんでした。 %s (ErrorCode: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}
cleanup:
_tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    // プリンターをオープン
    if (!printer.OpenPrinter(printerName))
        throw new Exception(String.Format("プリンター {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", printerName, printer.ErrorMessage, printer.ErrorCode));

    // 印刷データを出力するファイル名
    printer.Output = outputPath;

    // 印刷ジョブ開始
    if (!printer.BeginDocument("My print job."))
        throw new Exception(String.Format("プリンタに接続できません。 " + 
            "{0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    // 入力ファイルをオープン
    if (!printer.Open(inputPath, ""))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", inputPath, printer.ErrorMessage, printer.ErrorCode));

    // 入力ファイルの全てのページを繰り返す
    for (int pageNo = 1; pageNo lt;= printer.PageCount; pageNo++)
    {
        // 入力ファイルの指定されたページを印刷
        if (!printer.PrintPage(pageNo))
            throw new Exception(String.Format("ページ {0} をプリンター {1} で印刷できません。" + 
                " {2} (エラーコード: 0x{3:x}).", pageNo, printerName, printer.ErrorMessage, printer.ErrorCode));
    }

    // 入力ファイルをクローズ
    printer.Close();

    // 印刷ジョブ終了
    if (!printer.EndDocument())
        throw new Exception(String.Format("印刷ジョブを正しく終了できませんでした。 " + 
            " {0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));
}
Console.WriteLine("終了");

プリンターとそのプロパティをリスト

ローカルホストから利用できるすべてのプリンターのリストをテキストファイルに出力します。
リストされたプリンターについて利用できるデュプレックスモード、ビン、用紙サイズの数、プリンタでサポートされているメディアタイプの数などに関する情報を取得します。
使用するプリンタドライバに応じて、PostScript、PCL、またはその他形式のファイルを作成します。

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

// ローカルホストで利用可能なプリンターのリストを出力するテキストファイルを生成
pTxtFile = _tfopen(szTextFilePath, _T("w"));
_ftprintf(pTxtFile, _T("ローカルホストで利用可能なプリンター:\n"));
_ftprintf(pTxtFile, _T("----------------------------------------\n"));

// ローカルホストで利用可能なすべてのプリンターを繰り返す
for (int iPrinter = 0, nPrinters = PDFPrnGetPrinterCount(pPrinter, ""); iPrinter < nPrinters; iPrinter++)
{
    TCHAR szPrinterName[256];
   _tcscpy(szPrinterName, PDFPrnGetPrinter(pPrinter, iPrinter));
   _ftprintf(pTxtFile, _T("プリンター %d: %s\n"), iPrinter + 1, szPrinterName);

   // プリンターをオープン
   if (!PDFPrnOpenPrinter(pPrinter, szPrinterName))
   {
       _tprintf(_T("プリンター %s をオープンできませんでした。 %s (エラーコード: 0x%08x).\n"),
           szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
       continue;
   }

    // プリンターのデュプレックスモードをリスト
    _ftprintf(pTxtFile, _T("  デュプレックスモード:\n"));
    for (int j = 0, n = PDFPrnGetDuplexModeCount(pPrinter, szPrinterName); j < n; j++)
        _ftprintf(pTxtFile, _T("   - %s\n"), PDFPrnGetDuplexMode(pPrinter, j));

    // プリンターのビンをリスト
    _ftprintf(pTxtFile, _T("  ビン:\n"));
    for (int j = 0, n = PDFPrnGetBinCount(pPrinter, szPrinterName); j < n; j++)
        _ftprintf(pTxtFile, _T("   - %s\n"), PDFPrnGetBin(pPrinter, j));

    // プリンターの用紙サイズをリスト
    _ftprintf(pTxtFile, _T("  用紙サイズ:\n"));
    for (int j = 0, n = PDFPrnGetPaperCount(pPrinter, szPrinterName); j < n; j++)
        _ftprintf(pTxtFile, _T("   - %s\n"), PDFPrnGetPaper(pPrinter, j));

    // プリンターのメディアタイプをリスト
    _ftprintf(pTxtFile, _T("  メディアタイプ:\n"));
    for (int j = 0, n = PDFPrnGetMediaTypeCount(pPrinter, szPrinterName); j < ; j++)
        _ftprintf(pTxtFile, _T("   - %s\n"), PDFPrnGetMediaTypeName(pPrinter, j));

    // プリンターをクローズ
    PDFPrnClosePrinter(pPrinter);

    _ftprintf(pTxtFile, _T("----------------------------------------\n"));
}
_tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    // ローカルホストで利用可能なプリンターのリストを出力するテキストファイルを生成
    using (StreamWriter writer = new StreamWriter(txtFilePath))
    {
        writer.WriteLine("ローカルホストで利用可能なプリンター:");
        writer.WriteLine("----------------------------------------");

        // ローカルホストで利用可能なすべてのプリンターを繰り返す
        for (int printerNo = 0, printerCount = printer.GetPrinterCount(""); printerNo < printerCount; printerNo++)
        {
            string printerName = printer.GetPrinter(printerNo);
            writer.WriteLine("Printer {0}: {1}", printerNo + 1, printerName);

            // プリンターをオープン
            if (!printer.OpenPrinter(printerName))
                throw new Exception(String.Format("Printer {0} could not be opened. " + 
                "{1} (ErrorCode: 0x{2:x}).", printerName, printer.ErrorMessage, printer.ErrorCode));

            // プリンターのデュプレックスモードをリスト
            writer.WriteLine("  デュプレックスモード:");
            for (int i = 0, n = printer.GetDuplexModeCount(printerName); i < n; i++)
                writer.WriteLine("    - {0}", printer.GetDuplexMode(i));

            // プリンターのビンをリスト
            writer.WriteLine("  ビン:");
            for (int i = 0, n = printer.GetBinCount(printerName); i < n; i++)
                writer.WriteLine("    - {0}", printer.GetBin(i));

            // プリンターの用紙サイズをリスト
            writer.WriteLine("  用紙サイズ:");
            for (int i = 0, n = printer.GetPaperCount(printerName); i < n; i++)
                writer.WriteLine("    - {0}", printer.GetPaper(i));

            // プリンターのメディアタイプをリスト
            writer.WriteLine("  メディアタイプ:");
            for (int i = 0, n = printer.GetMediaTypeCount(printerName); i < n; i++)
                writer.WriteLine("    - {0}", printer.GetMediaTypeName(i));

            // プリンターをクローズ
            printer.ClosePrinter();

            writer.WriteLine("----------------------------------------");
        }
    }
}
Console.WriteLine("終了");

透かしを追加

印刷の結果に透かし(Watermark)を追加します。
サンプルでは、文書(PDFまたはTIFF)を印刷した用紙の1ページおきに透かしを追加します。
透かしの文字や位置などその外観は指定できます。

C#C/C++ ダウンロード
// printerオブジェクト生成
pPrinter = PDFPrnCreateObject();

szPrinterName = PDFPrnGetDefaultPrinter(pPrinter);
if (szPrinterName == NULL || (_tcscmp(szPrinterName, "") == 0))
{
    _tprintf(_T("既定のプリンターがありません。\n"));
    iReturnValue = 1;
    goto cleanup;
}

// 入力ファイルをオープン
if (!PDFPrnOpen(pPrinter, szInputPath, _T("")))
{
    _tprintf(_T("入力ファイル %s をオープンできません。 %s (エラーコード: 0x%08x).\n"),
        szInputPath, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// プリンターをオープン
if (!PDFPrnOpenPrinter(pPrinter, szPrinterName))
{
    _tprintf(_T("プリンター %s をオープンできません。 %s (エラーコード).\n"),
        szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

// 印刷ジョブ開始
if (!PDFPrnBeginDocument(pPrinter, _T("透かし印刷。\n")))
{
    _tprintf(_T("プリンターに接続できません。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}

PDFPrnSetCenter(pPrinter, 1);      // 印刷位置
PDFPrnSetPaperSize(pPrinter, -2);  // 用紙サイズ

// 入力ファイルの全ページを印刷
for (int iPage = 1; iPage <= PDFPrnGetPageCount(pPrinter); iPage++)
{
    // 先頭を含む奇数ページに透かしを追加
    if (iPage % 2 == 1)
    {
        PDFPrnSetPageNo(pPrinter, iPage);
        fWidth = PDFPrnGetPageWidth(pPrinter);
        fHeight = PDFPrnGetPageHeight(pPrinter);
        fFontSize = (float)sqrt(fWidth * fWidth + fHeight * fHeight) / _tcslen(szWatermarkText);

        PDFPrnSetWatermarkBold(pPrinter, 1);
        PDFPrnSetWatermarkOutline(pPrinter, 1);
        PDFPrnSetWatermarkFontName(pPrinter, _T("Courier"));
        PDFPrnSetWatermarkFontSize(pPrinter, fFontSize);
        PDFPrnSetWatermarkColor(pPrinter, 0xCCCCCC);
        PDFPrnSetWatermarkXPos(pPrinter, fWidth / 5);
        PDFPrnSetWatermarkYPos(pPrinter, (fHeight - fHeight / 5 + fFontSize / 2));
        PDFPrnSetWatermarkAngle(pPrinter, (float)atan((double)fHeight / fWidth));
        PDFPrnAddWatermarkText(pPrinter, szWatermarkText);
    }
    else
    {
        // 設定済みの透かし設定を削除
        PDFPrnDeleteWatermarks(pPrinter);
    }

    // ページを印刷
    if (!PDFPrnPrintPage(pPrinter, iPage))
    {
        _tprintf(_T("ファイル %s の %d ページをプリンター %s に印刷できません。 %s (エラーコード: 0x%08x).\n"),
            szInputPath, iPage, szPrinterName, PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
        iReturnValue = 1;
        goto cleanup;
    }
}

// 入力ファイルをクローズ
PDFPrnClose(pPrinter);

// 印刷ジョブ終了
if (!PDFPrnEndDocument(pPrinter))
{
    _tprintf(_T("印刷ジョブを正しく終了できませんでした。 %s (エラーコード: 0x%08x).\n"),
        PDFPrnGetErrorMessage(pPrinter), PDFPrnGetErrorCode(pPrinter));
    iReturnValue = 1;
    goto cleanup;
}
cleanup:
_tprintf(_T("終了"));
C#C/C++ ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    string printerName = printer.DefaultPrinter;
    if (String.IsNullOrEmpty(printerName))
        throw new Exception(String.Format("既定のプリンターがありません。"));

    // 入力ファイルをオープン
    if (!printer.Open(inputPath, ""))
        throw new Exception(String.Format("入力ファイル {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", inputPath, printer.ErrorMessage, printer.ErrorCode));

    // プリンターをオープン
    if (!printer.OpenPrinter(printerName))
        throw new Exception(String.Format("プリンター {0} をオープンできません。 " + 
            "{1} (エラーコード: 0x{2:x}).", printerName, printer.ErrorMessage, printer.ErrorCode));

    // 印刷ジョブ開始
    if (!printer.BeginDocument("透かし印刷。\n"))
        throw new Exception(String.Format("プリンターに接続できません。 " + 
            "{0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));

    printer.Center = true;   // 印刷位置
    printer.PaperSize = -2;  // 用紙サイズ

    // 入力ファイルの全ページを印刷
    for (int pageNo = 1; pageNo <= printer.PageCount; pageNo++)
    {
        // 先頭を含む奇数ページに透かしを追加
        if (pageNo % 2 == 1)
        {
            printer.PageNo = pageNo;
            float width = printer.PageWidth;
            float height = printer.PageHeight;
            float fontSize = (float)Math.Sqrt(width * width + height * height) / 
                             watermarkText.Length;
            printer.WatermarkBold = true;
            printer.WatermarkOutline = true;
            printer.WatermarkFontName = "Courier";
            printer.WatermarkFontSize = fontSize;
            printer.WatermarkColor = 0xCCCCCC;
            printer.WatermarkXPos = width / 5;
            printer.WatermarkYPos = (height - height / 5 + fontSize / 2);
            printer.WatermarkAngle = (float)Math.Atan((double)height / width);
            printer.AddWatermarkText(watermarkText);
        }
        else
        {
            // 設定済みの透かし設定を削除 
            printer.DeleteWatermarks();
        }

        // ページを印刷
        if (!printer.PrintPage(pageNo))
            throw new Exception(String.Format("ファイル {1} の {0} ページをプリンター {2} で印刷できません。" +
                    " {3} (エラーコード: 0x{4:x}).", pageNo, inputPath, printerName, 
                    printer.ErrorMessage, printer.ErrorCode));
    }

    // 入力ファイルをクローズ
    printer.Close();

    // 印刷ジョブ終了
    if (!printer.EndDocument())
        throw new Exception(String.Format("印刷ジョブを正しく終了できませんでした。" +
            " {0} (エラーコード: 0x{1:x}).", printer.ErrorMessage, printer.ErrorCode));
}
Console.WriteLine("終了");

ご質問、お問い合わせ

メールで support@TrustSS.co.jp 宛てにお送りください。
または、質問のページからお送りいただくようお願いします。ご要望も承っております。

PDF-Tools サンプル

PDF Toolsとは

PDF/Aとは