У меня есть приложение jee, где я генерирую PDF и показываю его пользователю в браузере. У меня есть просьба защитить PDF для печати, поэтому пользователь не может использовать документ иначе, чем для чтения. Я использую itext 5, и я пытался зашифровать документ, но я получаю ошибку: java.lang.SecurityException: класс "org.bouncycastle.asn1.ASN1Primitive" информация о подписывающем не совпадает с информацией о подписывающем устройстве других классов в том же пакете «
Я посмотрел несколько примеров для шифрования, даже в книге для itext5, но я не могу исправить эту ошибку. Я также посмотрел на некоторые решения моей проблемы, некоторые говорят, что это проблема зависимостей, возможно, дублированная, но я до сих пор не могу найти где, потому что мне даже не добавили надувной замок к моей поме.
Это выдержка из моего pom.xml веб-модуля.
<properties>
<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<itext.version>5.5.13</itext.version>
</properties>
<dependecies>
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>6.2</version>
</dependency>
<dependency>
<groupId>javax.faces</groupId>
<artifactId>javax.faces-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.13</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-xtra</artifactId>
<version>${itext.version}</version>
</dependency>
</dependencies>
The code I am trying to run is the next:
public void crearPDFconTextoHTML(String nombreArchivo, String texto) {
try {
String dirCarpetaTemp = directorio();//Creo el directorio temporal sin los archivos
String dirFinalArchivo = dirCarpetaTemp + nombreArchivo;//Directorio completo del archivo
FileOutputStream fos = new FileOutputStream(dirFinalArchivo);
Document document = new Document(PageSize.A4);
String USER_PASS = "Hello123";
String OWNER_PASS = "Owner123";
PdfWriter writer = PdfWriter.getInstance(document, fos);
writer.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128);
document.setMarginMirroring(true);
document.open();
Paragraph parrafo = new Paragraph();
parrafo = convertirHtmlConFormatoAParrafoPdfOld(parrafo, texto);
// parrafo = convertirTexto(parrafo, texto);
parrafo.setAlignment(Element.ALIGN_JUSTIFIED);
document.add(parrafo);
document.close();//cierro el documento
writer.close();//cierro la escritura
setNombreArchivo(nombreArchivo);//Agregar el nombre archivo final a la dependencia
// OutputStream fos = new FileOutputStream(dirCarpetaTemp + nombreArchivo);//Crear archivo final
// PdfTempUtil.doMerge(listPdfs, fos);//Combinar pdfs que se agregaron en la lista
generarLinksAccesoAlPdf();//Generar la url que se mostrará en la lista
} catch (DocumentException | IOException ex) {
System.out.println(ex);
}
}
Зависимости должны быть в порядке, и шифрование должно работать, чтобы пользователь не мог распечатать PDF, когда он его открыл.