java pdfstamper_Java Applet中的PdfStamper

我在Java applet中使用PdfStamper来签署pdf文件 . 问题是每次使用pdfStamper.close()时到达行时,applet都会挂起;我认为我的问题与一些java applet策略有关但我已经授予所有权限:

grant {

permission java.security.AllPermission;

};

我的代码是:

import com.lowagie.text.DocumentException;

import com.lowagie.text.Rectangle;

import com.lowagie.text.pdf.PdfReader;

import com.lowagie.text.pdf.PdfSignatureAppearance;

import com.lowagie.text.pdf.PdfStamper;

import java.io.BufferedReader;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.security.AccessController;

import java.security.KeyStore;

import java.security.KeyStoreException;

import java.security.NoSuchAlgorithmException;

import java.security.PrivateKey;

import java.security.PrivilegedAction;

import java.security.UnrecoverableKeyException;

import java.security.cert.Certificate;

import java.security.cert.CertificateException;

import java.util.Enumeration;

import javax.swing.JApplet;

public class SignApplet extends JApplet {

public void test() {

AccessController.doPrivileged( new PrivilegedAction() {

@Override

public Object run() {

try {

KeyStore keyStore = KeyStore.getInstance( "PKCS11-custom_name" );

String pin = "custom_pin";

keyStore.load( null, pin.toCharArray() );

Enumeration aliases = keyStore.aliases();

String alias = aliases.nextElement();

PrivateKey key = ( PrivateKey ) keyStore.getKey( alias, pin.toCharArray() );

Certificate[] chain = keyStore.getCertificateChain( alias );

String unsigned_pdf = "C:\\Users\\user_name\\unsigned.pdf";

String signed_pdf = "C:\\Users\\user_name\\signed.pdf";

PdfReader pdfReader = new PdfReader( (new File( unsigned_pdf )).getAbsolutePath() );

File outputFile = new File( signed_pdf );

PdfStamper pdfStamper;

pdfStamper = PdfStamper.createSignature( pdfReader, null, '\0', outputFile );

PdfSignatureAppearance sap = pdfStamper.getSignatureAppearance();

sap.setCrypto( key, chain, null, PdfSignatureAppearance.SELF_SIGNED );

sap.setReason( "reason" );

sap.setLocation( "" );

sap.setVisibleSignature( new Rectangle( 10, 10, 50, 30 ), 1, null );

pdfStamper.setFormFlattening( true );

pdfStamper.close(); // -- applet suspends right there

} catch ( Exception ex ) {

ex.printStackTrace();

}

return null;

}

} );

}

}

我从那样的html运行它:

密钥库来自USB令牌 .

在java调试控制台中,我没有看到任何异常 . 当我从main方法运行相同的源代码时(对传递参数几乎没有修改),它运行得很好 .

不知道是什么问题?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值