-
使用通过 jasper 报告生成的 base64 字符串生成 pdf,我也可以在 jrxml 中保护密码,但我有不同的要求,所以我不能保留在那里。 我想在仅发送附件时制作受保护的pdf,所以我尝试了许多可能性,例如(pdf作家,流媒体和所有(,但没有任何效果。 在我用来生成pdf作为附件的代码下面,我想使该附件受密码保护。
MimeMessage message = mailSenderImpl.createMimeMessage(); MimeMessageHelper helper; helper = new MimeMessageHelper(message, true); helper.setFrom(CacheUtils.getConfig(ApplicationConstant. DEFAULT_FROM_EMAIL)); helper.setTo(request.getToEmail()); helper.setSubject(request.getSendSubject()); helper.setText("", request.getSendMessage()); String sendAttachment = request.getSendAttachment(); JSONObject jsonRec = new JSONObject(sendAttachment); JSONArray jArray = jsonRec.getJSONArray("Attachment"); DataSource dataSource; String sAttachName; String sAttachBase64; JSONObject jsonRec = new JSONObject(sendAttachment); JSONArray jArray = jsonRec.getJSONArray("Attachment"); DataSource dataSource; String sAttachName; String sAttachBase64; sAttachName = jArray.getJSONObject(i).has("AttachName") ?jArray.getJSONObject(i).getString("AttachName") : null; sAttachBase64 = jArray.getJSONObject(i).has("AttachBase64") ? jArray.getJSONObject(i).getString("AttachBase64") : null; dataSource = sAttachBase64 !=null ? new ByteArrayDataSource(Base64.getDecoder().decode(sAttachBase64.getBytes()), "application/pdf") : null; helper.addAttachment(sAttachName, dataSource);
java 中的 pdf 编写器类能够制作加密的 pdf 文件。你可以用它创建。PDF编写器类提供用户名,密码加密以及加密类型,权限等...您可以在那里找到更多详细信息: PDF 作家类
byteStream = Base64.getDecoder().decode(sAttachBase64);
inputStream = new ByteArrayInputStream(byteStream);
byte[] buffer = new byte[1024];
baos = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
baos.write(buffer, 0, bytesRead);
}
reader = new PdfReader(byteStream);
stamper = new PdfStamper(reader, baos);
stamper.setEncryption("test".getBytes(), "test".getBytes(),PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
dataSource = new ByteArrayDataSource(baos.toByteArray(), "application/pdf");