PDF ファイルに視覚的な識別子を追加することは、知的財産の保護や文書のブランディングに不可欠です。
GroupDocs.Watermark Cloud SDK for Java は、Java アプリケーションから PDF に画像透かしを直接埋め込むシンプルな API を提供します。このチュートリアルでは、Java で PDF ドキュメントに画像透かしを追加する方法を学び、完全な動作例を確認し、クラウド統合のための同等の cURL REST 呼び出しも検討します。

JavaでPDFドキュメントに画像透かしを追加する5ステップ

  1. API クライアントの初期化: クライアント ID とシークレットを使用して ApiClient インスタンスを作成します。
ApiClient apiClient = new ApiClient("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
WatermarkApi watermarkApi = new WatermarkApi(apiClient);

この手順により、Java コードが GroupDocs.Watermark Cloud サービスに接続されます。詳細については、API リファレンス を参照してください。

  1. ソース PDF ファイルを指定する: ウォーターマークを付けたい PDF を指す FileInfo オブジェクトを作成します。
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("input.pdf");

ファイルはリクエストの前に GroupDocs ストレージにアップロードされている必要があります。

  1. 画像透かしを設定する: 画像パス、透明度、スケール係数、回転、配置を定義します。
ImageWatermark imageWatermark = new ImageWatermark();
imageWatermark.setImagePath("watermark.png");
imageWatermark.setOpacity(0.5);
imageWatermark.setScaleFactor(0.3);
imageWatermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
imageWatermark.setVerticalAlignment(VerticalAlignment.CENTER);
imageWatermark.setMargin(new Margin(10, 10, 10, 10));

これらの値を調整して目的の外観を実現してください。opacity は透明度を制御し、scaleFactor はページに対するサイズを決定します。

  1. 透かしオプションと出力パスを設定: ファイル情報と透かしを組み合わせて WatermarkOptions オブジェクトを作成します。
WatermarkOptions options = new WatermarkOptions();
options.setFileInfo(fileInfo);
options.setImageWatermark(imageWatermark);
options.setOutputPath("output.pdf");

outputPath は、サービスに生成された PDF を保存する場所を指示します。

  1. リクエストを実行する: AddWatermarkRequest を作成し、API を呼び出します。成功またはエラーの応答を処理します。
    AddWatermarkRequest request = new AddWatermarkRequest(options);
    try {
        AddWatermarkResponse response = watermarkApi.addWatermark(request);
        System.out.println("Watermark added successfully. Output file: " + response.getPath());
    } catch (Exception e) {
        System.err.println("Error adding watermark: " + e.getMessage());
    }
    
    実行後、透かしが付いた PDF は指定した場所にあります。

完全なコード例: JavaでPDFドキュメントに画像透かしを追加

以下の例は、クライアントの初期化から透かし入り PDF の保存までの完全な実装を示しています。

import com.groupdocs.cloud.watermark.api.WatermarkApi;
import com.groupdocs.cloud.watermark.client.ApiClient;
import com.groupdocs.cloud.watermark.model.AddWatermarkRequest;
import com.groupdocs.cloud.watermark.model.AddWatermarkResponse;
import com.groupdocs.cloud.watermark.model.FileInfo;
import com.groupdocs.cloud.watermark.model.ImageWatermark;
import com.groupdocs.cloud.watermark.model.Margin;
import com.groupdocs.cloud.watermark.model.WatermarkOptions;
import com.groupdocs.cloud.watermark.model.enums.HorizontalAlignment;
import com.groupdocs.cloud.watermark.model.enums.VerticalAlignment;

public class AddImageWatermarkExample {
    public static void main(String[] args) {
        // Initialize API client (replace with your actual credentials)
        ApiClient apiClient = new ApiClient("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET");
        WatermarkApi watermarkApi = new WatermarkApi(apiClient);

// Input PDF file information
        FileInfo fileInfo = new FileInfo();
        fileInfo.setFilePath("input.pdf");

// Image watermark configuration
        ImageWatermark imageWatermark = new ImageWatermark();
        imageWatermark.setImagePath("watermark.png");          // Path to watermark image
        imageWatermark.setOpacity(0.5);                        // 50% opacity
        imageWatermark.setScaleFactor(0.3);                    // 30% of page size
        imageWatermark.setRotationAngle(0);                    // No rotation
        imageWatermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
        imageWatermark.setVerticalAlignment(VerticalAlignment.CENTER);
        imageWatermark.setMargin(new Margin(10, 10, 10, 10));  // 10 points margin on all sides

// Watermark options
        WatermarkOptions options = new WatermarkOptions();
        options.setFileInfo(fileInfo);
        options.setImageWatermark(imageWatermark);
        options.setOutputPath("output.pdf"); // Resulting PDF with watermark

// Create request and call API
        AddWatermarkRequest request = new AddWatermarkRequest(options);
        try {
            AddWatermarkResponse response = watermarkApi.addWatermark(request);
            System.out.println("Watermark added successfully. Output file: " + response.getPath());
        } catch (Exception e) {
            System.err.println("Error adding watermark: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

注: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパス(input.pdfwatermark.pngoutput.pdf)を実際のファイルの場所に合わせて更新し、必要なすべての依存関係が正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメントをご参照いただくか、サポートチームにお問い合わせください。

cURL と REST API を使用した PDF ドキュメントへの画像透かしの適用

以下は、Javaコードを書かずに同じ結果を得るために cURL で使用できる REST 呼び出しです。

  1. アクセストークンを取得する
curl -X POST "https://api.groupdocs.cloud/v2.0/auth/token" \
     -H "Content-Type: application/json" \
     -d '{"client_id":"YOUR_CLIENT_ID","client_secret":"YOUR_CLIENT_SECRET"}'

レスポンスには、後続の呼び出しで使用される access_token が含まれています。

  1. ソースPDFをアップロード

    curl -X POST "https://api.groupdocs.cloud/v2.0/storage/upload?path=input.pdf" \
         -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
         -F "file=@/path/to/input.pdf"
    
  2. ウォーターマーク画像をアップロード

    curl -X POST "https://api.groupdocs.cloud/v2.0/storage/upload?path=watermark.png" \
         -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
         -F "file=@/path/to/watermark.png"
    
  3. 画像の透かしを追加

curl -X POST "https://api.groupdocs.cloud/v2.0/watermark/add" \
     -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
           "fileInfo": { "filePath": "input.pdf" },
           "imageWatermark": {
               "imagePath": "watermark.png",
               "opacity": 0.5,
               "scaleFactor": 0.3,
               "horizontalAlignment": "Center",
               "verticalAlignment": "Center",
               "margin": { "top": 10, "right": 10, "bottom": 10, "left": 10 }
           },
           "outputPath": "output.pdf"
         }'

このリクエストは Java のコードロジックと同様で、同じ不透明度、スケーリング、配置設定を適用します。

  1. 透かし入りPDFをダウンロード
    curl -X GET "https://api.groupdocs.cloud/v2.0/storage/download?path=output.pdf" \
         -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
         -o output.pdf
    

リクエスト ボディとサポートされているパラメータの詳細については、公式 API ドキュメントをご覧ください。

インストールと構成 GroupDocs.Watermark Cloud SDK for Java

Maven 依存関係を pom.xml に追加してください(または同等の Gradle スニペットを使用してください)。このライブラリは Maven Central にホストされています。

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-watermark-cloud</artifactId>
    <version>23.8</version>
</dependency>

有効な GroupDocs Cloud アカウントも必要です。Client IDClient SecretGroupDocs ポータル から取得してください。SDK がクラウドサービスと通信するため、追加のランタイムインストールは不要です。

PDF ドキュメントの画像透かしオプションの微調整

SDK は、透かしの視覚的外観を制御できる複数のプロパティを提供します。

不透明度の調整

imageWatermark.setOpacity(0.75); // 75% opacity for a more visible watermark

不透明度の値は 0.0(完全に透明)から 1.0(完全に不透明)までです。

スケール係数の変更

imageWatermark.setScaleFactor(0.5); // Watermark occupies 50% of the page width

スケール係数は、ページの寸法に対する透かしのサイズを決定します。

配置と余白の設定

imageWatermark.setHorizontalAlignment(HorizontalAlignment.RIGHT);
imageWatermark.setVerticalAlignment(VerticalAlignment.BOTTOM);
imageWatermark.setMargin(new Margin(20, 20, 20, 20));

これらの設定は、ウォーターマークを右下隅に20ポイントの余白で配置します。

構成可能なプロパティの完全な一覧については、API リファレンス を参照してください。

結論

Java で PDF ドキュメントに画像透かしを追加することは、GroupDocs.Watermark Cloud SDK for Java を使用すれば簡単です。SDK は低レベルの PDF 操作をすべて処理し、透明度、スケーリング、位置指定といった視覚的な側面に集中できるようにします。ネイティブな Java 実装でも、クラウドベースの cURL ワークフローでも、パフォーマンスを犠牲にすることなく同じ高品質な結果が得られます。製品版で使用する際は適切なライセンスを取得することを忘れないでください。価格情報は製品ページに掲載されており、評価用には一時ライセンスページ を利用できます。

よくある質問

  • Javaで品質を失わずにPDFに画像の透かしを追加する方法は?
    scaleFactor プロパティを使用して、ページに対する透かしのサイズを指定し、元のPDFの DPI を保持します。SDK は PDF の解像度を維持するため、ズームレベルに関係なく透かしは鮮明に表示されます。

  • 同じPDFに複数の透かしを追加できますか?
    はい。異なる設定の ImageWatermark オブジェクトを個別に作成し、addWatermark を複数回呼び出すか、リクエスト内のリストに追加して順番に適用します。

  • 透かしでサポートされている画像形式は何ですか?
    API は一般的な画像タイプを受け入れます。たとえば PNGJPGBMPGIF および TIFF です。PNG はロスレス品質と透過サポートのために推奨されます。

  • 透かしを適用する前にプレビューする方法はありますか?
    GroupDocs.Watermark Cloud SDK for Java を使用して、透かし付きの一時的な PDF を生成し、レビュー用にダウンロードできます。これは、出力パスを一時的な場所に指定した同じ addWatermark 呼び出しを使用します。

さらに読む