PDFUtils
PDFUtils es un bean de Spring que proporciona métodos para trabajar con documentos PDF: fusionar, cifrar, descifrar, dividir, extraer páginas, rotar, rellenar formularios y renderizar páginas como imágenes. Las sobrecargas estáticas operan sobre streams y ficheros locales; los métodos de instancia operan directamente sobre documentos del repositorio de OpenKM.
merge (streams)
Sección titulada «merge (streams)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| merge(List |
void | Fusiona varios streams de entrada PDF en un único PDF escrito en el stream de salida. |
Ejemplo:
package com.openkm;
import com.openkm.api.OKMDocument;import com.openkm.util.ContextWrapper;import com.openkm.util.FileUtils;import com.openkm.util.PDFUtils;import com.openkm.util.PathUtils;import org.apache.commons.io.IOUtils;
import java.io.*;import java.util.Arrays;
public class Test {
public static void main(String[] args) { File tmp = null; try { OKMDocument okmDocument = ContextWrapper.getContext().getBean(OKMDocument.class); PDFUtils pdfUtils = ContextWrapper.getContext().getBean(PDFUtils.class);
tmp = FileUtils.createTempFile("pdf");
try (OutputStream fos = new FileOutputStream(tmp)) { pdfUtils.merge(Arrays.asList( okmDocument.getContent(null, "c0984ecf-8d9e-40f8-b5fb-2c83d202bd9d", false), okmDocument.getContent(null, "b3d0af95-076c-4cc4-9b85-bd3e7eb2baa3", false) ), fos); }
try (InputStream fis = new FileInputStream(tmp)) { okmDocument.createSimple(null, "/okm:root/docMerge.pdf", fis); } } catch (Exception e) { e.printStackTrace(); } finally { FileUtils.deleteQuietly(tmp); } }}merge (documentos del repositorio)
Sección titulada «merge (documentos del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| merge(String token, List |
String | Fusiona una lista de documentos de OpenKM (por ruta o UUID) en un único PDF y guarda el resultado en dstPath en el repositorio. Los documentos que no son PDF se convierten automáticamente a PDF antes de la fusión. Devuelve la ruta del documento resultante. |
- token: Token de autenticación.
- docIds: Lista de rutas o UUIDs del repositorio a fusionar.
- dstPath: Ruta del repositorio donde se creará el PDF fusionado.
Ejemplo:
PDFUtils pdfUtils = ContextWrapper.getContext().getBean(PDFUtils.class);String result = pdfUtils.merge(null, Arrays.asList("/okm:root/doc1.pdf", "/okm:root/doc2.pdf"), "/okm:root/merged.pdf");System.out.println("Merged to: " + result);Operaciones con formularios
Sección titulada «Operaciones con formularios»fillForm
Sección titulada «fillForm»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| fillForm(InputStream input, Map<String, Object> values, OutputStream output) | void | Rellena campos AcroForm en un PDF. Los campos cuyo valor actual contiene expresiones de plantilla (por ejemplo, ${variable}) se procesan mediante el motor de plantillas. Los campos también se emparejan por nombre a partir del mapa values. Admite campos de texto, checkbox y fecha. El formulario se aplana (se hace no editable) para cualquier campo que se rellene. |
- input: El stream de entrada del PDF.
- values: Un mapa de nombre de campo → valor para la sustitución.
- output: El stream de salida para el PDF rellenado.
Ejemplo:
package com.openkm;
import com.openkm.util.PDFUtils;
import java.io.*;import java.util.HashMap;import java.util.Map;
public class Test {
public static void main(String[] args) { try (InputStream is = new FileInputStream("/home/openkm/template.pdf"); OutputStream os = new FileOutputStream("/home/openkm/filled.pdf")) {
Map<String, Object> values = new HashMap<>(); values.put("customerName", "John Smith"); values.put("invoiceDate", new java.util.Date()); values.put("approved", "true"); // checkbox
PDFUtils.fillForm(is, values, os); } catch (Exception e) { e.printStackTrace(); } }}listFormFields
Sección titulada «listFormFields»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| listFormFields(String input) | List |
Devuelve los nombres de todos los campos AcroForm en la ruta de fichero PDF indicada. Devuelve una lista vacía si el PDF no tiene formulario. |
- input: La ruta del sistema de ficheros local al fichero PDF.
Ejemplo:
List<String> fields = PDFUtils.listFormFields("/home/openkm/template.pdf");System.out.println("Form fields: " + fields);Cifrado
Sección titulada «Cifrado»encrypt (streams)
Sección titulada «encrypt (streams)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| encrypt(InputStream input, String userPassword, String ownerPassword, int permissions, OutputStream output) | void | Cifra un stream PDF con las contraseñas y permisos indicados. Pase null en userPassword para permitir abrirlo sin contraseña (restringido por los permisos). Pase un userPassword no nulo para requerir una contraseña para abrir el documento. |
- permissions: Constantes de permisos de iText combinadas con OR, por ejemplo
PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY.
encrypt (fichero)
Sección titulada «encrypt (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| encrypt(File input, String userPassword, String ownerPassword, int permissions) | File | Cifra un fichero PDF y devuelve un nuevo fichero temporal con el contenido cifrado. |
encrypt (documento del repositorio)
Sección titulada «encrypt (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| encrypt(String token, String docId, String userPassword, String ownerPassword, int permissions, String dstPath) | void | Cifra un documento de OpenKM y guarda el resultado en dstPath. Si dstPath ya existe, el documento se bloquea (checkout) y se libera (checkin) con el nuevo contenido. |
decrypt (streams)
Sección titulada «decrypt (streams)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| decrypt(InputStream input, String ownerPassword, OutputStream output) | void | Descifra un stream PDF usando la contraseña de propietario y escribe el resultado en el stream de salida. |
decrypt (fichero)
Sección titulada «decrypt (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| decrypt(File input, String ownerPassword) | File | Descifra un fichero PDF y devuelve un nuevo fichero temporal con el contenido descifrado. |
isEncrypted (InputStream)
Sección titulada «isEncrypted (InputStream)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| isEncrypted(InputStream input) | boolean | Devuelve true si el stream PDF está cifrado. |
isEncrypted (File)
Sección titulada «isEncrypted (File)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| isEncrypted(File input) | boolean | Devuelve true si el fichero PDF está cifrado. |
disableEncryption (streams)
Sección titulada «disableEncryption (streams)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| disableEncryption(InputStream input, OutputStream output) | void | Elimina el indicador de cifrado de un PDF sin requerir la contraseña de propietario, permitiendo su posterior modificación. |
disableEncryption (fichero)
Sección titulada «disableEncryption (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| disableEncryption(File input) | File | Elimina el indicador de cifrado de un fichero PDF y devuelve un nuevo fichero temporal con el resultado. |
Recuento de páginas
Sección titulada «Recuento de páginas»getNumberOfPages (File)
Sección titulada «getNumberOfPages (File)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| getNumberOfPages(File pdf) | int | Devuelve el número de páginas de un fichero PDF local. |
getNumberOfPages (InputStream)
Sección titulada «getNumberOfPages (InputStream)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| getNumberOfPages(InputStream stream) | int | Devuelve el número de páginas de un stream PDF. |
getNumberOfPages (documento del repositorio)
Sección titulada «getNumberOfPages (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| getNumberOfPages(String token, String docId) | int | Devuelve el número de páginas de un documento de OpenKM. Los documentos que no son PDF se convierten automáticamente a PDF. |
Ejemplo:
PDFUtils pdfUtils = ContextWrapper.getContext().getBean(PDFUtils.class);int pages = pdfUtils.getNumberOfPages(null, "e6b61e8d-4bf1-4c37-828f-09ecc34261cc");System.out.println("Pages: " + pages);Renderizado de documentos
Sección titulada «Renderizado de documentos»getDocumentInPdf
Sección titulada «getDocumentInPdf»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| getDocumentInPdf(String token, String docId) | InputStream | Devuelve el contenido del documento como un stream PDF. Si el documento no es un PDF, se convierte primero a PDF (usando la caché de conversión si está disponible). El llamador es responsable de cerrar el stream. |
getPageAsImage
Sección titulada «getPageAsImage»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| getPageAsImage(String token, String docId, int page, String size) | File | Renderiza una única página de un documento PDF (o convertible) como una imagen PNG y devuelve un fichero temporal. |
- page: El número de página, empezando en 1.
- size: El descriptor de tamaño/resolución de imagen deseado.
Operaciones de página
Sección titulada «Operaciones de página»split (fichero)
Sección titulada «split (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| split(File file, String baseName, List |
File | Divide un fichero PDF en los límites de página indicados y devuelve un fichero ZIP que contiene las partes resultantes, cada una nombrada usando baseName. |
split (documento del repositorio)
Sección titulada «split (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| split(String token, String docId, String dstId, List |
List |
Divide un documento PDF de OpenKM en los límites de página indicados y guarda las partes resultantes en la carpeta dstId. Devuelve la lista de documentos creados. |
extract (fichero)
Sección titulada «extract (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| extract(File src, File dst, List |
void | Extrae las páginas indicadas de un fichero PDF y escribe el resultado en dst. |
extract (documento del repositorio)
Sección titulada «extract (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| extract(String token, String docId, String dstId, List |
Document | Extrae las páginas indicadas de un documento PDF de OpenKM y guarda el resultado como un nuevo documento llamado docName en la carpeta dstId. Devuelve el documento creado. |
rotate (fichero)
Sección titulada «rotate (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| rotate(File src, File dst, List |
void | Rota las páginas indicadas de un fichero PDF el ángulo dado (90, 180 o 270 grados) y escribe el resultado en dst. |
rotate (documento del repositorio)
Sección titulada «rotate (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| rotate(String token, String docId, String dstId, List |
Document | Rota las páginas indicadas de un documento PDF de OpenKM y guarda el resultado como un nuevo documento en la carpeta dstId. Devuelve el documento creado. |
Optimización y conversión
Sección titulada «Optimización y conversión»optimize (fichero)
Sección titulada «optimize (fichero)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| optimize(File pdfIn, File pdfOut) | void | Optimiza un fichero PDF linealizándolo para una visualización web rápida y escribe el resultado en pdfOut. |
optimize (documento del repositorio)
Sección titulada «optimize (documento del repositorio)»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| optimize(String token, String docId) | void | Optimiza un documento PDF de OpenKM en el mismo lugar, bloqueándolo (checkout), optimizándolo y liberándolo de nuevo (checkin). |
convertToPdfA
Sección titulada «convertToPdfA»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| convertToPdfA(File input) | File | Convierte un fichero PDF al formato PDF/A para archivo a largo plazo y devuelve un nuevo fichero temporal con el resultado. |
Utilidad
Sección titulada «Utilidad»generateSample
Sección titulada «generateSample»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| generateSample(int paragraphs, OutputStream os) | void | Genera un PDF de ejemplo Lorem Ipsum con el número de párrafos indicado. |
createPdfWithText
Sección titulada «createPdfWithText»Descripción:
| Método | Valores devueltos | Descripción |
|---|---|---|
| createPdfWithText(String text, File out) | void | Crea un PDF simple de una sola página con el texto indicado y lo escribe en el fichero de salida especificado. |
Ejemplo:
File out = FileUtils.createTempFile("pdf");PDFUtils.createPdfWithText("Hello, OpenKM!", out);