titulo quitar poner online metadatos marca linea insertar gratis editar documento como cambiar agua java pdf itext watermark

java - quitar - ¿Cómo extender el tamaño de página de un PDF para agregar una marca de agua?



quitar marca de agua pdf acrobat (1)

Mi aplicación web firma documentos PDF. Me gustaría permitir que los usuarios descarguen el documento PDF original (no firmado) pero agreguen una imagen y los firmantes en el margen izquierdo del documento pdf.

He visto esta idea en otra aplicación web y me gustaría hacer lo mismo. Por supuesto, me gustaría hacerlo usando la biblioteca itext.

He adjuntado dos imágenes, el documento PDF original (no firmado) y el documento PDF modificado.


Primero esto: es importante cambiar el documento antes de firmarlo digitalmente. Una vez firmado digitalmente, estos cambios romperán la firma.

Dividiré la pregunta en dos partes y omitiré la parte sobre la marca de agua real, ya que esto ya se explica aquí: ¿Cómo marcar PDFs en agua usando texto o imágenes?

Esta pregunta no es un duplicado de esa pregunta, debido al requisito adicional de agregar un margen adicional a la derecha.

Eche un vistazo al documento primes.pdf . Este es el archivo fuente que vamos a usar en el ejemplo AddExtraMargin con el siguiente resultado: primes_extra_margin.pdf . Como puede ver, se agregó un margen de media pulgada a la izquierda de cada página.

Así es como se hace:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); int n = reader.getNumberOfPages(); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); // properties PdfContentByte over; PdfDictionary pageDict; PdfArray mediabox; float llx, lly, ury; // loop over every page for (int i = 1; i <= n; i++) { pageDict = reader.getPageN(i); mediabox = pageDict.getAsArray(PdfName.MEDIABOX); llx = mediabox.getAsNumber(0).floatValue(); lly = mediabox.getAsNumber(1).floatValue(); ury = mediabox.getAsNumber(3).floatValue(); mediabox.set(0, new PdfNumber(llx - 36)); over = stamper.getOverContent(i); over.saveState(); over.setColorFill(new GrayColor(0.5f)); over.rectangle(llx - 36, lly, 36, ury - llx); over.fill(); over.restoreState(); } stamper.close(); reader.close(); }

El PdfDictionary que obtenemos con el método getPageN() se llama diccionario de la página . Tiene mucha información sobre una página específica en el PDF. Solo estamos viendo una entrada: el /MediaBox . Esto es solo una prueba de concepto. Si desea escribir una aplicación más robusta, también debe mirar el /CropBox y la entrada /Rotate . Por cierto, sé que estas entradas no existen en primes.pdf, por lo que las estoy omitiendo aquí.

El cuadro de medios de una página es una matriz con cuatro valores que representan un rectángulo definido por las coordenadas de su esquina inferior izquierda y superior derecha (generalmente, me refiero a ellos como llx , lly , urx y ury ).

En mi ejemplo de código, cambio el valor de llx restando 36 unidades de usuario. Si compara el tamaño de página de ambos PDF, verá que hemos agregado media pulgada.

También usamos estas coordenadas para dibujar un rectángulo que cubra la media pulgada adicional. Ahora cambie a los otros ejemplos de marcas de agua para descubrir cómo agregar texto u otro contenido a cada página.

Actualizar:

si necesita reducir las páginas existentes, lea Reparar la orientación de un PDF para escalarlo