PDF Printer(PDF印刷) サンプル

PDF を印刷 概要

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

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

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

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

価格見積り

PDF Printer 機能概要

無償評価版(リンク先は英語)
以下のダウンロード(無償)では完全なソースコードライブラリおよびライセンスキーを入手できます。
製品マニュアル: ライブラリコマンドライン

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


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

PDF文書やTIFF画像を印刷

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

C# C/C++ Python ダウンロード
// 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("終了"));
PDFPrnCreateObject印刷オブジェクト生成
PDFPrnPrintFile入力ファイルの指定ページを印刷
 第一引数:印刷オブジェクト
 第二引数:印刷するファイルのパス名
 第三引数:出力プリンタ名
 第四引数:暗号化のパスワード
 第五引数:印刷開始ページ
 第六引数:印刷終了ページ

C# C/C++ Python ダウンロード
// 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("終了");
Printer印刷オブジェクト
PrintFile入力ファイルの指定ページを印刷
 第一引数:印刷するファイルのパス名
 第二引数:出力プリンタ名
 第三引数:暗号化のパスワード
 第四引数:印刷開始ページ
 第五引数:印刷終了ページ

C# C/C++ Python ダウンロード
import PdfPrinter

# オブジェクト生成
try:
    prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
except Exception as e:
    print("Error: ", e)
    exit()

# 指定された1台のプリンタに入力されたファイルを印刷する
if not prn.PrintFile("in.pdf", printerName, "", iFirstPage, iLastPage):
    print("Error:", prn.ErrorMessage)

print("終了");
PrinterInterface印刷オブジェクト
 引数にライセンスキーを指定します。
PrintFile入力ファイルの指定ページを印刷
 第一引数:印刷するファイルのパス名
 第二引数:出力プリンタ名
 第三引数:暗号化のパスワード
 第四引数:印刷開始ページ
 第五引数:印刷終了ページ

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

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

C#C/C++ Python ダウンロード
// 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("終了"));
PDFPrnCreateObject印刷オブジェクト生成
PDFPrnOpenPrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:出力プリンタ名
PDFPrnBeginDocument印刷ジョブを開始
 第一引数:印刷オブジェクト
 第二引数:印刷ジョブ名
PDFPrnOpen入力ファイルをオープン
 第一引数:印刷オブジェクト
 第二引数:入力ファイルのパス名
 第三引数:暗号化のパスワード
PDFPrnGetPageCount入力ファイルのページ数を取得
 第一引数:印刷オブジェクト
PDFPrnPrintPage印刷するページを指定
 第一引数:印刷オブジェクト
 第二引数:ページ番号
PDFPrnClose入力ファイルをクローズ
 第一引数:印刷オブジェクト
PDFPrnEndDocument印刷ジョブを終了
 第一引数:印刷オブジェクト

C# C/C++ Python ダウンロード
// 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("終了");
Printer印刷オブジェクト
OpenPrinter印刷先プリンタをオープン
 第一引数:出力プリンタ名
BeginDocument印刷ジョブを開始
 第一二引数:印刷ジョブ名
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
PageCount入力ファイルのページ数
PrintPage印刷するページを指定
 第一引数:ページ番号
Close入力ファイルをクローズ
EndDocument印刷ジョブを終了

C# C/C++ Python ダウンロード
import PdfPrinter

# オブジェクト生成
try:
    prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
except Exception as e:
    print("Error: ", e)
    exit()

# プリンタをオープン
if not prn.OpenPrinter(printerName):
    print('プリンタ',printerName,'をオープンできません。', prn.ErrorMessage)

# 印刷ジョブ開始
if not prn.BeginDocument('My print job'):
    print('プリンタに接続できません。', prn.ErrorMessage)

# 全文書を繰り返す
for path in inputPaths:
    # 入力ファイルをオープン
    if not prn.Open(path,''):
        print('入力ファイル', path, 'をオープンできません。', prn.ErrorMessage)
    else:
        # オープンしたファイルの全ページを繰り返す
        for pageNo in range(1, prn.PageCount+1):
            prn.PrintPage(pageNo)

        # 入力ファイルをクローズ
        prn.Close()

# 印刷ジョブ終了
if not prn.EndDocument():
    print('印刷ジョブを正常に終了できませんでした。')
else:
    print("終了")
PrinterInterface印刷オブジェクト
 引数にライセンスキーを指定します。
OpenPrinter印刷先プリンタをオープン
 第一引数:出力プリンタ名
BeginDocument印刷ジョブを開始
 第一二引数:印刷ジョブ名
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
PageCount入力ファイルのページ数
PrintPage印刷するページを指定
 第一引数:ページ番号
Close入力ファイルをクローズ
EndDocument印刷ジョブを終了

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

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

C# C/C++ Python ダウンロード
// 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("終了"));
PDFPrnCreateObject印刷オブジェクト生成
PDFPrnOpen入力ファイルをオープン
 第一引数:印刷オブジェクト
 第二引数:入力ファイルのパス名
 第三引数:暗号化のパスワード
PDFPrnOpenPrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:出力プリンタ名
PDFPrnBeginDocument印刷ジョブを開始
 第一引数:印刷オブジェクト
 第二引数:印刷ジョブ名
PDFPrnPrintPage印刷するページを指定
 第一引数:印刷オブジェクト
 第二引数:ページ番号
PDFPrnEndDocument印刷ジョブを終了
 第一引数:印刷オブジェクト
PDFPrnClosePrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
PDFPrnGetPageCount入力ファイルのページ数を取得
 第一引数:印刷オブジェクト
PDFPrnClose入力ファイルをクローズ
 第一引数:印刷オブジェクト

C# C/C++ Python ダウンロード
// 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("終了");
Printer印刷オブジェクト
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
OpenPrinter印刷先プリンタをオープン
 第一引数:出力プリンタ名
BeginDocument印刷ジョブを開始
 第一引数:印刷ジョブ名
PrintPage印刷するページを指定
 第一引数:ページ番号
EndDocument印刷ジョブを終了
ClosePrinter印刷先プリンタをオープン
PageCount入力ファイルのページ数
Close入力ファイルをクローズ

C# C/C++ Python ダウンロード
import PdfPrinter

# printerオブジェクト生成
prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
if not prn.LicenseIsValid:
    print('License is Not valid.')
    exit()

# 入力ファイルをオープン
if not prn.Open(inputPath,''):
    print('入力ファイル', inputPath, 'をオープンできません。', prn.ErrorMessage)
else:
    # 最初のプリンタをオープン
    if not prn.OpenPrinter(firstPrinterName):
        print('プリンタ', firstPrinterName, 'をオープンできません。', prn.ErrorMessage)
    else:
        # 最初の印刷ジョブを開始
        if not prn.BeginDocument('My first print job'):
            print('プリンタに接続できません。', prn.ErrorMessage)
        else:
            # 入力ファイルの指定されたページを印刷
            if not prn.PrintPage(1):
                print(inputPath, 'のページ(1)を', firstPrinterName, 'に印刷できません。', prn.ErrorMessage)

            # 最初のプリンタをクローズ
            if not prn.EndDocument():
                print('印刷ジョブを正しく終了できませんでした。', prn.ErrorMessage)

        # 最初のプリンタをクローズ
        prn.ClosePrinter()

    # 2番目のプリンタをオープン
    if not prn.OpenPrinter(secondPrinterName):
        print('プリンタ', secondPrinterName, 'をオープンできません。', prn.ErrorMessage)
    else:
        # 2番目の印刷ジョブを開始
        if not prn.BeginDocument('My second print job'):
            print('', prn.ErrorMessage)
        else:
            # 2ページ目(もし存在すれば)から最終ページまでを繰り返す
            for (pageNo in range(1, pageCount+1)):
                if not prn.PrintPage(pageNo):
                    print('ページ', pageNo, 'をプリンタ', secondPrinterName, 'に印刷できません。', prn.ErrorMessage)

            # 2番目の印刷ジョブを終了
            if not prn.EndDocument():
                print('印刷ジョブを正しく終了できませんでした。', prn.ErrorMessage)

        # 2番目のプリンタをクローズ
        prn.ClosePrinter()

    # 入力ファイルをクローズ
    prn.Close()

print("終了")
PrinterInterface印刷オブジェクト
 引数にライセンスキーを指定します。
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
OpenPrinter印刷先プリンタをオープン
 第一引数:出力プリンタ名
BeginDocument印刷ジョブを開始
 第一引数:印刷ジョブ名
PrintPage印刷するページを指定
 第一引数:ページ番号
EndDocument印刷ジョブを終了
ClosePrinter印刷先プリンタをオープン
PageCount入力ファイルのページ数
Close入力ファイルをクローズ

PDF文書をファイルに印刷

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

C# C/C++ Python ダウンロード
// 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("終了"));
PDFPrnCreateObject印刷オブジェクト生成
PDFPrnOpenPrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:出力プリンタ名
PDFPrnSetOutput印刷データを出力するファイルを設定
 第一引数:印刷オブジェクト
 第二引数:出力先ファイルパス名
PDFPrnBeginDocument印刷ジョブを開始
 第一引数:印刷オブジェクト
 第二引数:印刷ジョブ名
PDFPrnOpen入力ファイルをオープン
 第一引数:印刷オブジェクト
 第二引数:入力ファイルのパス名
 第三引数:暗号化のパスワード
PDFPrnGetPageCount入力ファイルのページ数を取得
 第一引数:印刷オブジェクト
PDFPrnPrintPage印刷するページを指定
 第一引数:印刷オブジェクト
 第二引数:ページ番号
PDFPrnClose入力ファイルをクローズ
 第一引数:印刷オブジェクト
PDFPrnEndDocument印刷ジョブを終了
 第一引数:印刷オブジェクト

C# C/C++ Python ダウンロード
// 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("終了");
Printer印刷オブジェクト
OpenPrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:出力プリンタ名
Output印刷データを出力するファイルパス名を指定
BeginDocument印刷ジョブを開始
 第一引数:印刷ジョブ名
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
PageCount入力ファイルのページ数
PrintPage印刷するページを指定
 第一引数:ページ番号
Close入力ファイルをクローズ
EndDocument印刷ジョブを終了

C# C/C++ Python ダウンロード
import PdfPrinter

# printerオブジェクト生成
prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
if not prn.LicenseIsValid:
    print('License is Not valid.')
    exit()

# プリンタをオープン
if not prn.OpenPrinter(printerName):
    print('プリンタ', printerName, 'をオープンできません。', prn.ErrorMessage)
else:

    # 印刷データを出力するファイル名
    prn.Output = "out.dat"

    # 印刷ジョブ開始
    if not prn.BeginDocument('My print job'):
        print('プリンタに接続できません。', prn.ErrorMessage)
    else:
        # 入力ファイルをオープン
        if not prn.Open(inputPath,''):
            print('入力ファイル', inputPath, 'をオープンできません。', prn.ErrorMessage)
        else:
            # 入力ファイルの全てのページを印刷
            for pageNo in range(1, prn.PageCount+1):
                if not prn.PrintPage(pageNo):
                    print(ページ', pageNo, 'をプリンタ', printerName, 'で印刷できません。)

            # 入力ファイルをクローズ
            prn.Close()

        # 印刷ジョブ終了
        prn.EndDocument()

print("終了")
PrinterInterface印刷オブジェクト
 引数にライセンスキーを指定します。
OpenPrinter印刷先プリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:出力プリンタ名
Output印刷データを出力するファイルパス名を指定
BeginDocument印刷ジョブを開始
 第一引数:印刷ジョブ名
Open入力ファイルをオープン
 第一引数:入力ファイルのパス名
 第二引数:暗号化のパスワード
PageCount入力ファイルのページ数
PrintPage印刷するページを指定
 第一引数:ページ番号
Close入力ファイルをクローズ
EndDocument印刷ジョブを終了

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

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

C# C/C++ Python ダウンロード
// 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("終了"));
PDFPrnCreateObject印刷オブジェクト生成
PDFPrnGetPrinterCount指定ホスト上のプリンタ数
 第一引数:印刷オブジェクト
 第二引数:ホスト名
  ""の場合はローカルホスト
PDFPrnGetPrinterプリンタ名を取得
 第一引数:印刷オブジェクト
 第二引数:プリンタのインデックス
  "PDFPrnGetPrinterCount"で指定されたホスト上のもの
PDFPrnOpenPrinterプリンタをオープン
 第一引数:印刷オブジェクト
 第二引数:プリンタ名
PDFPrnGetDuplexModeCountデュプレックスモードの総数を取得
 第一引数:印刷オブジェクト
 第二引数:プリンタ名
PDFPrnGetDuplexModeデュプレックスモード名を取得
 第一引数:印刷オブジェクト
 第二引数:デュプレックスモードのインデックス
PDFPrnGetBinCount印刷用紙トレーの総数を取得
 第一引数:印刷オブジェクト
 第二引数:プリンタ名
PDFPrnGetBin印刷用紙トレー名を取得
 第一引数:印刷オブジェクト
 第二引数:印刷用紙トレーのインデックス
PDFPrnGetPaperCount印刷用紙サイズの総数を取得
 第一引数:印刷オブジェクト
 第二引数:プリンタ名
PDFPrnGetPaper印刷用紙サイズ名を取得
 第一引数:印刷オブジェクト
 第二引数:印刷用紙サイズのインデックス
PDFPrnGetMediaTypeCount印刷用メディアタイプの総数を取得
 第一引数:印刷オブジェクト
 第二引数:プリンタ名
PDFPrnGetMediaTypeName印刷用メディアタイプ名を取得
 第一引数:印刷オブジェクト
 第二引数:印刷用メディアタイプのインデックス
PDFPrnClosePrinterプリンタをクローズ
 第一引数:印刷オブジェクト

C# C/C++ Python ダウンロード
// 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("終了");
Printer印刷オブジェクト
GetPrinterCount指定ホスト上のプリンタ数
 第一引数:ホスト名
  ""の場合はローカルホスト
GetPrinterプリンタ名を取得
 第一引数:プリンタのインデックス
  "GetPrinterCount"で指定されたホスト上のもの
OpenPrinterプリンタをオープン
 第一引数:プリンタ名
GetDuplexModeCountデュプレックスモードの総数を取得
 第一引数:プリンタ名
GetDuplexModeデュプレックスモード名を取得
 第一引数:デュプレックスモードのインデックス
GetBinCount印刷用紙トレーの総数を取得
 第一引数:プリンタ名
GetBin印刷用紙トレー名を取得
 第一引数:印刷用紙トレーのインデックス
GetPaperCount印刷用紙サイズの総数を取得
 第一引数:プリンタ名
GetPaper印刷用紙サイズ名を取得
 第一二引数:印刷用紙サイズのインデックス
GetMediaTypeCount印刷用メディアタイプの総数を取得
 第一引数:プリンタ名
GetMediaTypeName印刷用メディアタイプ名を取得
 第一引数:印刷用メディアタイプのインデックス
ClosePrinterプリンタをクローズ

C# C/C++ Python ダウンロード
import PdfPrinter

# printerオブジェクト生成
prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
if not prn.LicenseIsValid:
    print('License is Not valid.')
    exit()

# ローカルホストで利用可能なプリンタのリストを出力するテキストファイルを生成
writer = open('out.txt', 'w')
writer.write("ローカルホストで利用可能なプリンタ:\n")
writer.write("----------------------------------------\n")

# ローカルホストで利用可能なすべてのプリンタを繰り返す
for printerNo in range(prn.GetPrinterCount("")):
    printerName = prn.GetPrinter(printerNo)
    writer.write("Printer {0}: {1}\n".format(printerNo+1, printerName))

    # プリンタをオープン
    if not prn.OpenPrinter(printerName):
        print('プリンタ', printerName, 'をオープンできません。')
    else:

        # プリンタのデュプレックスモード名をリスト
        writer.write("  デュプレックスモード:\n")
        for i in range(prn.GetBinCount(printerName)):
            writer.write("    - {0}\n".format(prn.GetBin(i)))

        # プリンタの印刷用紙サイズ名をリスト
        writer.write("  用紙サイズ:\n")
        for i in range(prn.GetPaperCount(printerName)):
            writer.write("    - {0}\n".format(prn.GetPaper(i)));

        # プリンタの印刷用メディアタイプ名をリスト
        writer.write("  メディアタイプ:\n")
        for i in range(prn.GetMediaTypeCount(printerName)):
            writer.write("    - {0}\n".fprmat(prn.GetMediaTypeName(i)));

        # プリンタをクローズ
        prn.ClosePrinter();

    writer.write("----------------------------------------\n");
writer.close()
print("終了")
PrinterInterface印刷オブジェクト
 引数にライセンスキーを指定します。
GetPrinterCount指定ホスト上のプリンタ数
 第一引数:ホスト名
  ""の場合はローカルホスト
GetPrinterプリンタ名を取得
 第一引数:プリンタのインデックス
  "GetPrinterCount"で指定されたホスト上のもの
OpenPrinterプリンタをオープン
 第一引数:プリンタ名
GetDuplexModeCountデュプレックスモードの総数を取得
 第一引数:プリンタ名
GetDuplexModeデュプレックスモード名を取得
 第一引数:デュプレックスモードのインデックス
GetBinCount印刷用紙トレーの総数を取得
 第一引数:プリンタ名
GetBin印刷用紙トレー名を取得
 第一引数:印刷用紙トレーのインデックス
GetPaperCount印刷用紙サイズの総数を取得
 第一引数:プリンタ名
GetPaper印刷用紙サイズ名を取得
 第一二引数:印刷用紙サイズのインデックス
GetMediaTypeCount印刷用メディアタイプの総数を取得
 第一引数:プリンタ名
GetMediaTypeName印刷用メディアタイプ名を取得
 第一引数:印刷用メディアタイプのインデックス
ClosePrinterプリンタをクローズ

透かしを追加

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

C# C/C++ Python ダウンロード
// 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++ Python ダウンロード
// printerオブジェクト生成
using (Printer printer = new Printer())
{
    string printerName = printer.GetDefaultPrinter();
    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("終了");

C# C/C++ Python ダウンロード
import PdfPrinter

# printerオブジェクト生成
prn = PdfPrinter.PrinterInterface("1-QHtb2-KwmTr3k-qfmb5Qn-ktgpk7H")
if not prn.LicenseIsValid:
    print('License is Not valid.')
    exit()

printerName = prn.GetDefaultPrinter()
watermarkText = 'TrustSoftwareSystem'

# 入力ファイルをオープン
if not prn.Open(inputPath, ''):
    print('入力ファイル', inputPath, 'をオープンできません。')
else:
    # プリンタをオープン
    if not prn.OpenPrinter(printerName):
        print('プリンタ', printerName, 'をオープンできません。')
    else:
        # 印刷ジョブ開始
        if not prn.BeginDocument('Watermark'):
            print('プリンタに接続できません。')
        else:

            prn.Center = True   // 印刷位置
            prn.PaperSize = -2  // 用紙サイズ

            # 入力ファイルの全ページを印刷
            for pageNo in range(1, prn.PageCount+1):
                # 先頭を含む奇数ページに透かしを追加
                if pageNo % 2 == 1:
                    prn.PageNo = pageNo
                    width = prn.PageWidth
                    height = prn.PageHeight
                    fontSize = math.sqrt(width * width + height * height) / len(watermarkText)
                    prn.WatermarkBold = True
                    prn.WatermarkOutline = False
                    prn.WatermarkFontName = "Courier"
                    prn.WatermarkFontSize = fontSize
                    prn.WatermarkColor = 0xCCCCCC
                    prn.WatermarkXPos = width / 5
                    prn.WatermarkYPos = (height - height / 5 + fontSize / 2)
                    prn.WatermarkAngle = math.atan(height / width)
                    prn.AddWatermarkText(watermarkText)
                else:
                    # 設定済みの透かし設定を削除
                    prn.DeleteWatermarks()

                # ページを印刷
                if not prn.PrintPage(pageNo):
                    print('ファイル', inputPath, 'の', pageNo, 'ページをプリンタ', printerName, 'で印刷できません。')

            # 印刷ジョブ終了
            prn.EndDocument()

    # 入力ファイルをクローズ
    prn.Close()

print('終了')

ご質問、お問い合わせ

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

PDF-Tools サンプル

PDF Toolsとは

PDF/Aとは