com.groupdocs.viewer.Viewer と com.groupdocs.signature.Signature の組み合わせについて

サポート様
こんにちは

詳細は添付ファイルを参照願います。

権限設定.7z (273.6 KB)

com.groupdocs.viewer.Viewerで権限を設定したPDFに
com.groupdocs.signature.Signatureで電子証明書を設定すると
com.groupdocs.viewer.Viewerで設定した内容が変更されてしまいます。

com.groupdocs.viewer.Viewerで設定した内容を維持したまま、電子証明書を設定する方法を
ご教授願います。

com.groupdocs.signature.Signatureで電子証明書を設定した後
com.groupdocs.viewer.Viewerで権限設定をしようとすると以下の例外が発生します。

class com.groupdocs.viewer.internal.c.a.pd.d.v: You cannot change this document because it is certified.

お手数をお掛けしますがよろしくお願いいたします。

@yuki.hana

サポート様
こんにちは

お問い合わせありがとうございます。

問題を詳しく理解するために、まず、PDFファイルに権限を設定する際に使用しているコードのスニペットをご提供いただけますでしょうか?
それにより、電子証明書を設定した後、com.groupdocs.viewer.Viewerで設定した権限を保持する最適な方法をご案内できるかと思います。

また、com.groupdocs.signature.Signatureを使って電子証明書を追加する具体的なコードもいただけますと、より正確なサポートが可能になります。

お手数をおかけしますが、よろしくお願いいたします。

こんにちは

ご返答ありがとうございます。
添付ファイルのsheet1の内容を掲載いたします。

watermarkerの設定部分は削除しています。
また、ライセンス情報、機密情報に関する部分は文字の置き換えをしています。

ーーーーーーーーーーーーーーー以下 ソースコード ーーーーーーーーーーーー
MixTest .java

package GroupDocsTest.GroupDocsTest;

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.domain.SignResult;
import com.groupdocs.signature.domain.enums.HorizontalAlignment;
import com.groupdocs.signature.domain.enums.PdfDigitalSignatureType;
import com.groupdocs.signature.domain.enums.VerticalAlignment;
import com.groupdocs.signature.domain.signatures.PdfDigitalSignature;
import com.groupdocs.signature.exception.GroupDocsSignatureException;
import com.groupdocs.signature.internal.c.a.ms.System.IO.File;
import com.groupdocs.signature.options.sign.DigitalSignOptions;
import com.groupdocs.viewer.Viewer;
import com.groupdocs.viewer.options.PdfViewOptions;
import com.groupdocs.viewer.options.Permissions;
import com.groupdocs.viewer.options.Security;
import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.common.IDocumentInfo;
import com.groupdocs.watermark.options.PdfAnnotationWatermarkOptions;
import com.groupdocs.watermark.options.PdfLoadOptions;
import com.groupdocs.watermark.watermarks.Font;
import com.groupdocs.watermark.watermarks.FontStyle;
import com.groupdocs.watermark.watermarks.ImageWatermark;
import com.groupdocs.watermark.watermarks.TextWatermark;

public class MixTest {
public static void main(String[] args) throws GroupDocsSignatureException {
// TODO 自動生成されたメソッド・スタブ

	String LicenceFile = "XXXXXXX.lic";

	String LocalPath = System.getProperty("user.dir");
	String DocName = "inputFile.pdf";
	String SignedName = "signeFile.pdf";
	String SigneFile = "XXXXX.pfx";
	String SignePassword = "1234567890";
	String LockImageFile = "Sign_Check.png";

	String WatermarkImage = "WaterMark.png";
	String WhiteBOX = "WhiteBOX.png";
	String OutName = "outputFile.pdf";


	try {
		//ライセンス設定
		if(File.exists(LocalPath + "/" + LicenceFile)) {
			//シグネチャ
			com.groupdocs.signature.licensing.License siglicence = new com.groupdocs.signature.licensing.License();
			siglicence.setLicense(LocalPath + "/" + LicenceFile);
			
			//ウォータマーク
			com.groupdocs.watermark.licenses.License warlicence = new com.groupdocs.watermark.licenses.License();
			warlicence.setLicense(LocalPath + "/" + LicenceFile);
			
			//ビューワー
			com.groupdocs.viewer.License viewlicence = new com.groupdocs.viewer.License();
			viewlicence.setLicense(LocalPath + "/" + LicenceFile);
		}
		
		//権限設定
		Security security = new Security();
		security.setPermissionsPassword("test");
		security.setPermissions(Permissions.DENY_MODIFICATION);
		
		PdfViewOptions viewOptions = new PdfViewOptions(LocalPath + "/" + DocName);
		viewOptions.setSecurity(security);
		
		//pdf出力
		Viewer viewer = new Viewer(LocalPath + "/" + DocName);
		viewer.view(viewOptions);
		viewer.close();
		
		
		//電子署名設定
		//署名するPDFの指定
		Signature signatuer = new Signature(LocalPath + "/" + DocName);
	
		//証明書ファイルの指定
		DigitalSignOptions options = new DigitalSignOptions(LocalPath + "/" + SigneFile);
		options.setPassword(SignePassword);		//証明書に設定したパスワード
	
		//証明書オプションの設定
		PdfDigitalSignature digitalsignatuer = new PdfDigitalSignature();
		digitalsignatuer.setReason("XXXXXXXXXX");
		digitalsignatuer.setContactInfo("XXXXXXXXXX");
		digitalsignatuer.setLocation("XXXXXXXXX");
		digitalsignatuer.setType(PdfDigitalSignatureType.Certificate);
		
		options.setSignature(digitalsignatuer);
	
		//ロック画像設定
		//options.setImageFilePath(LocalPath + "/" + LockImageFile);
		options.setVerticalAlignment(VerticalAlignment.Top);
		options.setHorizontalAlignment(HorizontalAlignment.Left);
		options.setWidth(23);
		options.setHeight(40);
		
		SignResult result = signatuer.sign(LocalPath + "/" + SignedName, options);
		System.out.print("\nSource document signed successfully with "+result.getSucceeded().size()+" signature(s).\nFile saved at " + LocalPath + "/" + SignedName + ".");
	}
	catch(Exception e) {
		throw new GroupDocsSignatureException(e.getMessage());
	}
}

}

ーーーーーーーーーーーーーーーー ここまで ーーーーーーーーーーーーーーーーー

よろしくお願いします。

@yuki.hana

こんにちは

ご提供いただいたコードに基づいて、問題を再現することができました。
現在のところ、com.groupdocs.signature.Signatureで電子証明書を追加した後に、PDFに設定された権限が変更されてしまう状況を確認しました。

この問題は、SIGNATUREJAVA-2882として記録され、調査中です。

そこでご質問です。GroupDocs.SignatureでPDFのセキュリティ設定を行えるようにする方法を追加することで、この問題を解決する形でも問題ないでしょうか?
これにより、電子署名を追加しても、元の権限設定を保持することが可能になると考えています。

ご確認のほど、よろしくお願いいたします。

@vladimir.litvinchik

こんにちは

お忙しい中、調査とご回答ありがとうございます。

>そこでご質問です。GroupDocs.Signature でPDFのセキュリティ設定を行えるようにする方法を追>加することで、この問題を解決する形でも問題ないでしょうか?
問題ありません。
ご提案内容の方が処理時間が短縮でき助かります。

対応時期は何時ごろになりますか?
この機能を使用したプログラムを1月にリリースするため、12月に必要と思っています。

お忙しい中、ご検討よろしくお願いいたします。

@yuki.hana

こんにちは

ご返信いただき、ありがとうございます。

ご提案に問題がないとのことで安心しました。
開発チームにETA(対応予定時期)を確認し、分かり次第、改めてご連絡いたします。

お待たせして申し訳ございませんが、どうぞよろしくお願いいたします。