チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
PDF におけるデジタル署名の検証は、ドキュメントが改ざんされておらず、署名者の真正性が確認できることを保証するために非常に重要です。この検証プロセスは、ドキュメントの整合性や信頼性を維持する上で不可欠です。また、デジタル署名の抽出を行うことで、署名画像や証明書情報などの詳細を取得でき、さらなる検証やアーカイブ目的に活用できます。本記事では、Java で Spire.PDF for Java ライブラリを使用して、PDF 内のデジタル署名を検証および抽出する方法を説明します。
まず、Spire.PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.11.2</version>
</dependency>
</dependencies>
Spire.PDF for Java は、PdfSignature.verifySignature() メソッドを提供しており、PDF ドキュメント内のデジタル署名の有効性を確認できます。詳細な手順は以下の通りです。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;
public class VerifySignature {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成
PdfDocument pdf = new PdfDocument();
// PDFドキュメントを読み込む
pdf.loadFromFile("Sample.pdf");
// PDFドキュメントのフォームを取得
PdfFormWidget formWidget = (PdfFormWidget) pdf.getForm();
if(formWidget.getFieldsWidget().getCount() > 0)
{
// フォーム内のすべてのフィールドを反復処理する
for(int i = 0; i < formWidget.getFieldsWidget().getCount(); i ++)
{
PdfField field = formWidget.getFieldsWidget().get(i);
// 署名フィールドを見つける
if (field instanceof PdfSignatureFieldWidget)
{
PdfSignatureFieldWidget signatureField = (PdfSignatureFieldWidget) field;
// 署名を取得
PdfSignature signature = signatureField.getSignature();
// 署名を検証
boolean valid = signature.verifySignature();
if(valid)
{
System.out.print("署名は有効です!");
}
else
{
System.out.print("署名は無効です!");
}
}
}
}
}
}
署名済みの PDF ドキュメントが改ざんされているかを確認するには、PdfSignature.VerifyDocModified() メソッドを使用します。詳細な手順は以下の通りです。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;
public class CheckIfSignedPdfIsModified {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成
PdfDocument pdf = new PdfDocument();
// PDFドキュメントを読み込む
pdf.loadFromFile("Sample.pdf");
// PDFドキュメントのフォームを取得
PdfFormWidget formWidget = (PdfFormWidget) pdf.getForm();
if(formWidget.getFieldsWidget().getCount() > 0) {
// フォーム内のすべてのフィールドを反復処理する
for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++) {
PdfField field = formWidget.getFieldsWidget().get(i);
// 署名フィールドを見つける
if (field instanceof PdfSignatureFieldWidget) {
PdfSignatureFieldWidget signatureField = (PdfSignatureFieldWidget) field;
// 署名を取得
PdfSignature signature = signatureField.getSignature();
// 署名を検証
boolean modified = signature.verifyDocModified();
if(modified)
{
System.out.print("ドキュメントは変更されています!");
}
else
{
System.out.print("ドキュメントは変更されていません!");
}
}
}
}
}
}
PDF から署名画像および証明書情報を抽出するには、PdfFormWidget.extractSignatureAsImages() メソッドと PdfSignature.getCertificate().toString() メソッドを使用します。詳細な手順は以下の通りです。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfSignature;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class ExtractSignatureImage {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成
PdfDocument pdf = new PdfDocument();
// PDFドキュメントを読み込む
pdf.loadFromFile("Sample.pdf");
// PDFドキュメントのフォームを取得
PdfFormWidget formWidget = (PdfFormWidget) pdf.getForm();
// 署名画像を抽出
Image[] images = formWidget.extractSignatureAsImages();
// 画像を反復処理し、それぞれの画像をファイルに保存
for (int i = 0; i < images.length; i++) {
try {
// ImageオブジェクトをBufferedImageに変換
BufferedImage bufferedImage = (BufferedImage) images[i];
// 出力ファイルのパスを定義
File outputFile = new File("output\\cert\\signature_" + i + ".png");
// 画像をPNGファイルとして保存
ImageIO.write(bufferedImage, "png", outputFile);
} catch (IOException e) {
e.printStackTrace();
}
}
// 証明書情報を保存するテキストファイルを作成
try (BufferedWriter writer = new BufferedWriter(new FileWriter("output\\cert\\certificate_info.txt"))) {
if (formWidget.getFieldsWidget().getCount() > 0) {
// フォーム内のすべてのフィールドを反復処理
for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++) {
PdfField field = formWidget.getFieldsWidget().get(i);
// 署名フィールドを見つける
if (field instanceof PdfSignatureFieldWidget) {
PdfSignatureFieldWidget signatureField = (PdfSignatureFieldWidget) field;
// 署名を取得
PdfSignature signature = signatureField.getSignature();
// 署名の証明書情報を取得
String certificateInfo = signature.getCertificate() != null ? signature.getCertificate().toString() : "証明書がありません";
// 証明書情報をテキストファイルに書き込む
writer.write("証明書情報: \n" + certificateInfo);
writer.write("-----------------------------------\n");
}
}
} else {
writer.write("署名フィールドが見つかりませんでした。");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
デジタル技術の急速な発展に伴い、多くの企業が情報を電子的に作成、保存、送信するようになっています。電子ドキュメントの信頼性と真正性を確保するために、デジタル署名が広く利用されています。本記事では、Spire.PDF for Java を使用して PDF に見えるデジタル署名または見えないデジタル署名を追加する方法、およびデジタル署名を削除する方法について解説します。
まず、Spire.PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.11.2</version>
</dependency>
</dependencies>
以下は、Spire.PDF for Java を使用して PDF に見えないデジタル署名を追加する手順です。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfCertificationFlags;
import com.spire.pdf.security.PdfSignature;
public class AddInvisibleSignature {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成
PdfDocument doc = new PdfDocument();
// サンプルPDFファイルを読み込む
doc.loadFromFile("Sample.pdf");
// pfx証明書を読み込む
PdfCertificate cert = new PdfCertificate("gary.pfx", "e-iceblue");
// PdfSignatureオブジェクトを作成
PdfSignature signature = new PdfSignature(doc, doc.getPages().get(doc.getPages().getCount() - 1), cert, "gary");
// ドキュメントの権限を設定(変更を禁止し、フォーム入力を許可)
signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
signature.setDocumentPermissions(PdfCertificationFlags.Allow_Form_Fill);
// 別のPDFファイルとして保存
doc.saveToFile("output/見えないPDF署名.pdf");
doc.close();
}
}
以下は、Spire.PDF for Java を使用して PDF に見えるデジタル署名を追加する手順です。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.*;
import com.spire.pdf.security.GraphicMode;
import com.spire.pdf.security.PdfCertificate;
import com.spire.pdf.security.PdfCertificationFlags;
import com.spire.pdf.security.PdfSignature;
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
public class AddVisibleSignature {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成
PdfDocument doc = new PdfDocument();
// サンプルPDFファイルを読み込む
doc.loadFromFile("Sample.pdf");
// pfx証明書を読み込む
PdfCertificate cert = new PdfCertificate("gary.pfx", "e-iceblue");
// PdfSignatureオブジェクトを作成し、その位置とサイズを指定
PdfSignature signature = new PdfSignature(doc, doc.getPages().get(0), cert, "gary");
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(new Point2D.Float(
(float) doc.getPages().get(0).getActualSize().getWidth() - 320,
(float) doc.getPages().get(0).getActualSize().getHeight() - 120),
new Dimension(270, 100));
signature.setBounds(rect);
// グラフィックモードを設定
signature.setGraphicMode(GraphicMode.Sign_Image_And_Sign_Detail);
// 署名内容を設定
signature.setNameLabel("署名者:");
signature.setName("gary");
signature.setContactInfoLabel("連絡先:");
signature.setContactInfo("02881705109");
signature.setDateLabel("日付:");
signature.setDate(new java.util.Date());
signature.setLocationInfoLabel("場所:");
signature.setLocationInfo("CD");
signature.setReasonLabel("理由:");
signature.setReason("このドキュメントの証明書");
signature.setDistinguishedNameLabel("DN:");
signature.setDistinguishedName(signature.getCertificate().get_IssuerName().getName());
signature.setSignImageSource(PdfImage.fromFile("Signature.png"));
// 署名フォントを設定
signature.setSignDetailsFont(new PdfTrueTypeFont(new Font("Yu Gothic UI", Font.PLAIN, 10), true));
// ドキュメントの権限を設定
signature.setDocumentPermissions(PdfCertificationFlags.Forbid_Changes);
signature.setCertificated(true);
// ファイルに保存
doc.saveToFile("output/可視PDF署名.pdf");
doc.close();
}
}
以下は、Spire.PDF for Java を使用して PDF からデジタル署名を削除する手順です。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.widget.PdfFieldWidget;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfSignatureFieldWidget;
public class DeleteSignatures {
public static void main(String[] args) {
// PdfDocumentオブジェクトを作成(署名付きPDFをロード)
PdfDocument doc = new PdfDocument("output/見えないPDF署名.pdf");
// ドキュメントからフォームウィジェットを取得
PdfFormWidget widgets = (PdfFormWidget) doc.getForm();
// ウィジェットをループ処理
for (int i = 0; i < widgets.getFieldsWidget().getList().size(); i++)
{
// 特定のウィジェットを取得
PdfFieldWidget widget = (PdfFieldWidget)widgets.getFieldsWidget().getList().get(i);
// ウィジェットがPdfSignatureFieldWidgetかどうかを判定
if (widget instanceof PdfSignatureFieldWidget)
{
// 署名ウィジェットを削除
widgets.getFieldsWidget().remove(widget);
}
}
// ドキュメントを別のPDFファイルに保存
doc.saveToFile("output/PDF署名の削除.pdf");
doc.close();
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
PDF ドキュメントは、いくつかの方法でセキュリティを付加することができます。PDF が許可パスワードで保護されている場合、読者はパスワードを入力せずにドキュメントを開くことができますが、印刷やコンテンツのコピーなど、ドキュメントをさらに操作する権限を持っていないかもしれません。この記事では、Java で Spire.PDF for Java ライブラリを使用して PDF ドキュメントのセキュリティ権限を設定する方法について学びます。
まず、Spire. PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.1.9</version>
</dependency>
</dependencies>
以下は、Spire.PDF for Java を使用して PDF ドキュメントにセキュリティ権限を適用する手順です。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;
import java.util.EnumSet;
public class ChangeSecurityPermissions {
public static void main(String[] args) {
//PdfDocumentオブジェクトを作成します
PdfDocument doc = new PdfDocument();
//サンプルのPDFファイルをロードします
doc.loadFromFile("サンプル.pdf");
//オープンパスワードを指定します
String openPsd = "";
//許可パスワードを指定します
String permissionPsd = "password";
//権限を指定します
EnumSet permissionsFlags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Full_Quality_Print);
//ドキュメントをオープンパスワードと許可パスワードで暗号化し、権限と暗号化キーサイズを設定します
doc.getSecurity().encrypt(openPsd, permissionPsd, permissionsFlags, PdfEncryptionKeySize.Key_128_Bit);
//ドキュメントを別のPDFファイルに保存します
doc.saveToFile("output/セキュリティ権限.pdf");
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
パスワードで保護された PDF を開くとき、それはパスワードを入力する必要があります。しかし、時には、PDF を開く前に、PDF がパスワードで保護されているかどうかを知る必要があります。Spire.PDF for Java は、PDF ドキュメントがパスワードで保護されているかどうかを判断するためのメソッド PdfDocument.isPasswordProtected() を提供しています。
まず、Spire. PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>8.8.3</version>
</dependency>
</dependencies>
詳しい手順は以下の通りです。
import com.spire.pdf.PdfDocument;
public class detectIfPDFIsPasswordProtected {
public static void main(String[] args) throws Exception {
//ファイルパスを定義する
String filePath ="Sample.pdf";
//PDFドキュメントがパスワードで保護されているかどうかを検出する
boolean isProtected = PdfDocument.isPasswordProtected(filePath);
//結果を印刷する
if(isProtected)
{
System.out.println("このドキュメントはパスワードで保護されています。");
}
else
{
System.out.println("このドキュメントはパスワードで保護されていません。");
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
機密情報や重要な情報を含む PDF ドキュメントには、パスワードを使って保護し、指定された人だけがドキュメント内の情報にアクセスできるようにすることができます。この記事では、Spire.PDF for Java を使用して PDF ドキュメントを暗号化し、パスワードで保護されたドキュメントを復号化する方法を説明します。
まず、Spire. PDF for Java を Java プロジェクトに追加する必要があります。JAR ファイルは、このリンクからダウンロードできます。Maven を使用する場合は、次のコードをプロジェクトの pom.xml ファイルに追加する必要があります。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url> https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>8.8.3</version>
</dependency>
</dependencies>
PDF ファイルを暗号化するためのパスワードには、「開くパスワード」と「権限パスワード」の2種類があります。前者は PDF ファイルを開くために設定し、後者は印刷や 内容のコピー、コメント付けなどを制限するために設定します。両方の種類のパスワードで PDF ファイルを保護した場合、どちらか一方のパスワードで開くことができます。
Spire.PDF for Java が提供する PdfDocument.getSecurity().encrypt(java.lang.String openPassword, java.lang.String permissionPassword, java.util.EnumSet<PdfPermissionsFlags> permissions, PdfEncryptionKeySize keySize) メソッドは PDF ファイルを暗号化するのに開くパスワードと権限パスワード両方を設定できるようにします。詳細な手順は次のとおりです。
import java.util.EnumSet;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;
public class encryptPDF {
public static void main(String[] args) {
//PdfDocumentクラスのインスタンスを作成する
PdfDocument pdf = new PdfDocument();
//PDFドキュメントを読み込む
pdf.loadFromFile("C:/例.pdf");
//ドキュメントを暗号化する
PdfEncryptionKeySize keySize = PdfEncryptionKeySize.Key_128_Bit;
String openPassword = "e-iceblue";
String permissionPassword = "permission";
EnumSet flags = EnumSet.of(PdfPermissionsFlags.Print, PdfPermissionsFlags.Fill_Fields);
pdf.getSecurity().encrypt(openPassword, permissionPassword, flags, keySize);
//ドキュメントを保存する
pdf.saveToFile("ドキュメントの暗号化.pdf");
pdf.close();
}
}
PDF ファイルのパスワードを削除する必要がある場合、PdfDocument.getSecurity().encrypt(java.lang.String openPassword, java.lang.String permissionPassword, java.util.EnumSet<PdfPermissionsFlags> permissions, PdfEncryptionKeySize keySize, java.lang.String originalPermissionPassword) メソッドを用いて開くパスワードと権限パスワードを空に設定することが可能です。詳細な手順は以下の通りです。
import com.spire.pdf.PdfDocument;
import com.spire.pdf.security.PdfEncryptionKeySize;
import com.spire.pdf.security.PdfPermissionsFlags;
public class decryptPDF {
public static void main(String[] args) throws Exception {
//PdfDocumentクラスのインスタンスを作成する
PdfDocument pdf = new PdfDocument();
//パスワードで暗号化されたPDFドキュメントを読み込む
pdf.loadFromFile("ドキュメントの暗号化.pdf", "e-iceblue");
//ドキュメントを復号化する
pdf.getSecurity().encrypt("", "", PdfPermissionsFlags.getDefaultPermissions(), PdfEncryptionKeySize.Key_256_Bit, "permission");
//ドキュメントを保存する
pdf.saveToFile("ドキュメントの復号化.pdf");
pdf.close();
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。