Ir al contenido

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.

Descripción:

Método Valores devueltos Descripción
merge(List inputs, OutputStream output) 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);
}
}
}

Descripción:

Método Valores devueltos Descripción
merge(String token, List docIds, String dstPath) 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);

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();
}
}
}

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);

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.

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.

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.

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.

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.

Descripción:

Método Valores devueltos Descripción
isEncrypted(InputStream input) boolean Devuelve true si el stream PDF está cifrado.

Descripción:

Método Valores devueltos Descripción
isEncrypted(File input) boolean Devuelve true si el fichero PDF está cifrado.

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.

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.

Descripción:

Método Valores devueltos Descripción
getNumberOfPages(File pdf) int Devuelve el número de páginas de un fichero PDF local.

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);

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.

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.

Descripción:

Método Valores devueltos Descripción
split(File file, String baseName, List pages) 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.

Descripción:

Método Valores devueltos Descripción
split(String token, String docId, String dstId, List pages, String baseName) 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.

Descripción:

Método Valores devueltos Descripción
extract(File src, File dst, List pages) void Extrae las páginas indicadas de un fichero PDF y escribe el resultado en dst.

Descripción:

Método Valores devueltos Descripción
extract(String token, String docId, String dstId, List pages, String docName) 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.

Descripción:

Método Valores devueltos Descripción
rotate(File src, File dst, List pages, Integer angle) void Rota las páginas indicadas de un fichero PDF el ángulo dado (90, 180 o 270 grados) y escribe el resultado en dst.

Descripción:

Método Valores devueltos Descripción
rotate(String token, String docId, String dstId, List pages, String docName, Integer angle) 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.

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.

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).

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.

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.

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);