amap-pdf

Última modificación por Administrator el 2019/09/25 16:36

amap-pdf 1.2.0 2019/09/11

Nuevo método agregarPaginasVacias

amap-pdf 1.1.0 2019/07/03

Dos nuevos argumentos en el método proteger: contraseña de propietario y permisos para el pdf.

amap-pdf 1.0.4 2018/03/14

Optimizaciones en la comunicación con el servidor.
Añadido método que admite objeto File como parámetro para transformar a pdf

amap-pdf 1.0.3 2016/02/02

Añadido método para la validación de ficheros PDF/A-1.

amap-pdf 1.0.1 2014/11/17

Mejoras en la gestion de errores, comprobación del tipo de formato a convertir.

amap-pdf 1.0.0 2013/07/01

Primera versión del componente.

<dependency>
<groupId>es.gobcantabria.amap.integracion</groupId>
<artifactId>amap-pdf</artifactId>
<version>1.2.0</version>
</dependency>

Es necesario de disponer de los siguientes datos:

  • Usuario del Proxy de Servicios
  • Acceso físico al Proxy de Servicios

Sin recursos disponibles.

Configuración

Para la utilización del componente amap-pdf basta con añadir la dependencia al pom.xml de maven (o el jar y sus correspondientes dependencias al classpath de la aplicación) y crear un servicio del siguiente modo:

PDFClienteInterface cliente = PDFCliente.getService(new URL(URL));

El servicio concreto a usar se definirá a partir de un fichero de properties junto con el resto de los parámetros:

KeyDescripciónEjemplo
sistemas.global.amap.plataformapdf.urlEndpoint del servicio web de pdf.http://******/plataforma-pdf/services/plataformaPDFWS

Los valores de las propiedades aquí mostrados son meramente ilustrativos. En los entornos de desarrollo / preproducción y producción los valores de las variables han de ser externalizados tal y como se especifica en el documento Definición de acceso a propiedades de sistema

N/A

Nombreamap-pdf
Identificadoramap-pdf
Grupoes.gobcantabria.amap.integracion
Versión1.2.0
Licencia
Desarrollador
Descripción

Cliente de la plataforma de conversión a PDF corporativa.

Documentaciónamap-pdf (JavaDoc)
Binarioamap-pdf (Jar)
Dependenciasamap-pdf (Librerías)

Sin particularidades. Seguir las recomendaciones del fabricante.

Ejemplos de uso

Nota Importante:

Para no saturar el servicio se recomienda emplear un mínimo de 500 milisegundos entre invocaciones.

Convertir a PDF

 

Para convertir un fichero a pdf  se invoca al método generar del servicio indicando como parámetros un array de bytes con el contenido binario del fichero, la extensión (formato) correspondiente al contenido del fichero y el grado de calidad en la conversión a aplicar.

String nombreAplicacionLlamante = "MI_APLICACION_1";
byte[] fichero = getCliente().generar(FileUtils.readFileToByteArray(f1), "doc", Constantes.CALIDAD_MEDIA, nombreAplicacionLlamante);

Adicionalmente es posible indicar un tiempo máximo concreto de "timeout" para la conversión indicado en milisegundos.

String nombreAplicacionLlamante = "MI_APLICACION_1";
byte[] fichero = getCliente().generar(FileUtils.readFileToByteArray(f1), "doc", Constantes.CALIDAD_MEDIA, nombreAplicacionLlamante, 900000);

También es posible indicar el fichero (File)  a convertir como parámetro (en lugar de un byte[]).

Este método nos devuelve el fichero ya convertido a formato PDF.

El componente utiliza OpenOffice para la conversión, por lo que se recomienda comprobar el contenido previamente en esta herramienta.

Convertir a PDF (En modo asíncrono)

 

Para convertir un fichero a pdf es posible la generación en modo asíncrono, útil para los casos de ficheros muy grandes o envíos masivos, ya que permite la invocación del servicio de forma rápida y solicitar en un momento posterior el estado del proceso de generación del pdf correspondiente. Esto se hace mediante la ejecución del hilo o de los respectivos hilos implicados en la operación, de manera asíncrona e independiente, y que acabarán terminando el proceso cuando sea que se terminen las acciones pertinentes. Para usar este método bastará con invocar al método generarAsincrono del servicio pasándole como parámetros un array de bytes con el contenido binario del fichero, la extensión (formato) correspondiente al contenido del fichero y el grado de calidad en la conversión a aplicar.

String nombreAplicacionLlamante = "MI_APLICACION_1";
String idFichero = getCliente().generarAsincrono(FileUtils.readFileToByteArray(f2), "docx", Constantes.CALIDAD_ALTA, nombreAplicacionLlamante);

También es posible indicar el fichero (File)  a convertir como parámetro (en lugar de un byte[]).

Este método nos devuelve el id del fichero generado durante el lanzamiento del proceso asíncrono de conversión. Y que tendrá que ser consultado en todo momento que así se desee, para comprobar su estado durante todo el proceso, y para finalmente obtenerlo ya convertido en PDF.

FicheroGenerado fichGen = getCliente().obtenerGenerado(idFichero );

//FicheroGenerado es una clase con los siguientes metodos:

 public DataHandler getFichero();

 public void setFichero(DataHandler fichero);

 public EstadoConversion getEstado();

 public void setEstado(EstadoConversion estado);

//EstadoConversion un enumerado con los siguientes posibles valores:
ESPERANDO, PROCESANDO, ERROR, GENERADO

//En una invocación típica, al final de todo el proceso el EstadoConversion será igual a GENERADO y fichero se pdf se habrá generado, pudiéndose acceder a través del metodo "getFichero".

También es posible indicar el fichero (File)  a convertir como parámetro (en lugar de un byte[]).

Concatenar PDFs

 

Para concatenar pdfs basta con añadirlos a un ArrayList de byte[] en el orden deseado al método concatenar del servicio.

List<byte[]> ficherosEntrada = new ArrayList<byte[]>();

File f1 = new File(CARPETA+"/f2.pdf");
ficherosEntrada.add(FileUtils.readFileToByteArray(f1));
File f2 = new File(CARPETA+"/f5.pdf");
ficherosEntrada.add(FileUtils.readFileToByteArray(f2));
  
byte[] fichero = getCliente().concatenar(ficherosEntrada);

Proteger con contraseña un PDF

 

El método proteger devuelve un PDF protegido por las contraseñas indicadas y los permisos definidos.

Argumentos:

  • fichero: fichero que se quiere proteger.
  • contrasena: contraseña de usuario con la que se protegerá el pdf. A esta contraseña se le vincularán permisos mediante el argumento permisos.
  • contrasenaPropietario: contraseña del propietario del fichero, está contraseña tiene sus permisos por defecto.
  • permisos: permisos vinculados a la contraseña. Si no se definen los permisos, solo se permitirá la visualización e impresión del documento.
    • MEZCLA: Se permite la mezcla cuando el documento es abierto por el usuario.
    • COPIA:  Se permite la copia cuando el documento es abierto por el usuario.
    • IMPRESION_DEGRADADA: Se permite la impresión degradada cuando el documento es abierto por el usuario.
    • RELLENADO: Se permite la rellenar el documento cuando este es abierto por el usuario.
    • MODIFICAR_ANOTACIONES: Se permite la modificación de anotaciones cuando el documento es abierto por el usuario.
    • MODIFICAR_CONTENIDO: Se permite modificar el contenido cuando el documento es abierto por el usuario.
    • IMPRESION: Se permite la impresión del documento cuando es abierto por el usuario.
    • LECTURA_PANTALLA: Se permite la lectura de pantalla cuando es abierto por el usuario.
List<PdfPermisos> permisos = new ArrayList<PdfPermisos>();
permisos.add(PdfPermisos.IMPRESION);

byte[] fichero = getCliente().proteger(FileUtils.readFileToByteArray(f1),  "pass", "propietarioPass", permisos);

Añadir o cambiar los metadatos de un PDF

 

El método setMetadatos del servicio permite modificar cualquiera de los siguientes metadatos:

  • Título
  • Autor
  • Creador
  • Palabras clave
  • Asunto
byte[] fichero = getCliente().modificarMetadatos(FileUtils.readFileToByteArray(f1),  "titulo_modificado", "autor_modificado", "creador_modificado", "palabras_modificado", "asunto_modificado");

Obtener los metadatos de un PDF

 

El método obtenerMetadatos del servicio permite obtener los metadatos de un fichero, además de los metadatos modificables, existen otros 3 metadatos de solo lectura:

  • fechaCreacion: fecha de creación del documento.
  • fechaModificacion: fecha de modificación del documento.
  • paginas: número paginas del documento.
Map<String,String> metadatos = getCliente().getMetadatos(FileUtils.readFileToByteArray(f1));
System.out.println("El documento tiene "+metadatos.get("paginas")+" paginas");

Dividir un PDF

 

A partir de un PDF de varias páginas, el sistema será capaz de descomponer este documento en varios documentos más pequeños. Los parámetros de entrada serán el origen y la forma de separar el documento, pudiendo indicarse un rango y marcar en un atributo que se quiere separar en documentos de una hoja totalmente independientes. El resultado es un conjunto de archivos binario.

List<byte[]> ficherosSalida = getCliente().dividir(FileUtils.readFileToByteArray(f1), rango, independientes);

De esta forma si se indica en el parámetro "rango" los valores "2-5,7-8" e "independiente" a "false" se obtendrán 2 ficheros pdf, el primero con las páginas 2,3,4 y 5 y el segundo con las páginas 7 y 8, mientras que si repetimos la misma invocación con el parámetro "independiente" a "true" generará 6 documentos de una página (la 2,3,4,5,7 y 8 respectivamente).

Manipular un PDF

 

El conjunto de parámetros de entrada son la calidad del documento final la marca de agua, cabecera y pie (los valores se obtienen del método getArchivos) y la necesidad o no de número de página. Los parámetros de este método se pueden pasar vacíos para a aplicar solo las acciones que se consideren oportunas, de esta forma, el usuario combina las acciones para conseguir el documento deseado. El resultado es un archivo binario.

String marcaAgua = "Logo_Gobierno_de_España.png"; 
String cabecera = "Logo_Gobierno_de_España.png"; 
String pie= "Logo_Gobierno_de_España.png";
  
boolean numeracionCabecera = true; 
boolean numeracionPie = true; 
  
byte[] fichero = getCliente().manipular(FileUtils.readFileToByteArray(f1), marcaAgua, cabecera, pie, numeracionCabecera, numeracionPie, Constantes.CALIDAD_ALTA);

Agregar páginas vacías a un PDF

 

Método que permite agregar páginas en blanco al final de un pdf.
Este método está sobrecargado:
 - El primer parámetro es el fichero en un array de de byte[]
 - El segundo parámetro puede ser el número de páginas a agregar o un enumerado de PdfPaginas.
El resultado es un archivo binario.


byte[] fichero = getCliente().agregarPaginasVacias(FileUtils.readFileToByteArray(f1), 2);
byte[] fichero2 = getCliente().agregarPaginasVacias(FileUtils.readFileToByteArray(f1), PdfPaginas.HASTA_PAR);

Listar archivos

 

Los posibles ficheros a insertar en la cabecera, el pie o la marca de agua pueden listarse usando el método getArchivos. Esté metodo recibe un String con los tipos a listar (Constantes.TIPO_IMAGEN_*)

archivosCarpetaTest = getCliente().getArchivos(Constantes.TIPO_IMAGEN_CABECERA);

Validar ficheros PDF/A

El método "validarPdfa" permite comprobar que un fichero cumple con el formato PDF/A-1b (definido en el ISO 19005-1).
El único argumento a introducir en el método sera el fichero en forma de arrays de bytes.

  File pdfa = new File(CARPETA + "/pdfa1A-example.pdf");
  ValidacionPdfaResponse response = getCliente().validarPdfa(FileUtils.readFileToByteArray(pdfa));

Este metodo retornara un objeto del tipo "ValidacionPdfaResponse" que contendra un boolean definiendo si la validación ha sido correcta, que puede traerse con el metodo "isCorrecto" y una lista de errores en caso de que sea false, compuestos por error y descripción.

response.isCorrecto(); //retornara true o false
List<ErrorValidacionPdfa> errores = response.getErrores();
ErrorValidacionPdfa error = errores.get(0);
error.getCodigoError(); //retornara un String
error.getDescripcion(); //retornada un String
© 2014 GOBIERNO DE CANTABRIA - AVISO LEGAL Y PROTECCIÓN DE DATOS