Cómo utilizo PDF con Java
Si queremos crear documentos PDF con Java existen múltiples librerias que nos ayudarán a generarlos, en este articulo vamos a hablar sobre la librería ITEXT.
Qué es ITEXT
ITEXT a parte de ser una buena librería para generar PDF con Java tiene la ventaja de que se integra facilmente con SPRING a la hora de desarrollar aplicaciones Web.
Los datos pueden ser escritos a un fichero o, por ejemplo, desde un servlet a un navegador web.
Cuáles son sus características principales
- Generación de documentos PDF con Java (parrafos, tablas, imágenes, encabezados y pies de pagina…)
- Generar documentos dinámicos a partir de archivos XML o bases de datos
- Agregar marcadores de libros, números de página, marcas de agua, etc
- Split, concatenar, y manipular las páginas PDF con Java.
- Automatizar el llenado de formularios PDF con Java.
- Agregar firma digital a un archivo PDF con Java.
Cómo realizar la INSTALACIÓN:
Para empezar veamos donde descargarnos la librería
Esta es la web de la librería itext, aquí se puede ver la API, ejemplos y tutoriales:
Una vez que seleccionamos y descargamos la versión para Java nos redirecciona a esta otra página:
http://sourceforge.net/projects/itext/files/
Actualmente la versión más reciente es la 5.0.2 (2011)
Una vez que nos hemos descargado la librería, la añadimos al CLASSPATH de nuestro proyecto Java para poder utilizarla.
Ejemplo creación PDF con Java:
Este ejemplo abarca la creación de un documento PDF con Java simple, para ver ejemplos mas complejos nos podemos descargar de la propia página muchos ejemplos que abarcan toda la funcionalidad de esta libreria:
http://www.itextpdf.com/examples/index.php itext pdf
Este es el código con itext
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 | import java.io.FileOutputStream; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.Element; import com.itextpdf.text.Font; import com.itextpdf.text.FontFactory; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.Paragraph; import com.itextpdf.text.Phrase; import com.itextpdf.text.Rectangle; import com.itextpdf.text.Font.FontFamily; import com.itextpdf.text.<strong>pdf</strong>.ColumnText; import com.itextpdf.text.<strong>pdf</strong>.PdfPCell; import com.itextpdf.text.<strong>pdf</strong>.PdfPTable; import com.itextpdf.text.<strong>pdf</strong>.PdfPageEventHelper; import com.itextpdf.text.<strong>pdf</strong>.PdfWriter; public class Test { //Nombre del fichero <strong>PDF</strong> Resultante de la ejecucion public static final String RESULT = “Ejemplo1.<strong>pdf</strong>”; //Titulos public static final String CHUNK = “CHUNK”; public static final String PHRASE = “PHRASE”; public static final String PARAGRAPH = “PARAGRAPH”; public static final String TABLE = “TABLE”; public static final String IMAGE = “IMAGE”; //Textos public static final String SEPARADOR = “———————————————————————————————————————-”; public static final String CHUNK1 = “This is the smallest significant part of text that can be added to a document.”; public static final String CHUNK2 = “Most elements can be divided in one or more Chunks. A chunk is a String with a certain Font. All other layout parameters should be defined in the object to which this chunk of text is added.”; public static final String PHRASE1 = “A Phrase is a series of Chunks.”; public static final String CHUNKPHRASE21 = “A Phrase has a main Font,”; public static final String CHUNKPHRASE22 = ” but some chunks within the phrase can have a Font that differs from the main Font.”; public static final String CHUNKPHRASE23 = ” All the Chunks in a Phrase have the same leading.”; public static final String PARAGRAPH1 = “A Paragraph is a series of Chunks and/or Phrases.”; public static final String PARAGRAPH2 = “A Paragraph has the same qualities of a Phrase, but also some additional layout-parameters: The indentation AND The alignment of the text”; public static void main (String[] args) { try { //Creacion del documento con un tamaño y unos margenes predeterminados Document document = new Document(PageSize.A4, 50, 50, 50, 50); //Al documento se le puede añadir cierta metaInformacion document.addAuthor(“FJHO”); document.addTitle(“EJEMPLO1″); //A DocWriter class for PDF con Java. //When this PdfWriter is added to a certain PdfDocument, //the <strong>PDF</strong> representation of every Element added to this Document will be written to the outputstream. PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT)); //LEADING = separacion entre lineas del documento writer.setInitialLeading(16); Rectangle rct = new Rectangle(36, 54, 559, 788); //Definimos un nombre y un tamaño para el PageBox los nombres posibles son: “crop”, “trim”, “art” and “bleed”. writer.setBoxSize(“art”, rct); //Se crea una instancia de la clase que pinta la cabecera y el pie de pagina y se le asignan los eventos que ocurran en el <strong>PDF</strong> //La en la clase HeaderFooter se capturarar el evento onEndPage para pintarlos HeaderFooter event = new HeaderFooter(); writer.setPageEvent(event); //Opens the document. //You have to open the document before you can begin to add content to the body of the document. document.open(); //Ejemplos de CHUNKS //Creamos el CHUNK definiendo su tipo de letra, tamaño… Chunk titulo = new Chunk(CHUNK, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK)); //Lo añadimos al documento document.add(titulo); //CHUNK predefinido, es un salto de linea document.add(Chunk.NEWLINE); Chunk chunkSeparador = new Chunk(SEPARADOR); Chunk chunkNormal = new Chunk(CHUNK1); document.add(chunkNormal); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); Chunk chunkTunning = new Chunk(CHUNK2,FontFactory.getFont(FontFactory.COURIER, 20, Font.ITALIC, BaseColor.GREEN)); document.add(chunkTunning); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); Chunk chunkTunning2 = new Chunk(CHUNK2,new Font(FontFamily.HELVETICA, 6, Font.BOLD, BaseColor.WHITE)); chunkTunning2.setBackground(BaseColor.BLACK, 10f, 10f, 10f, 10f); document.add(chunkTunning2); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); document.add(chunkSeparador); //FIN Ejemplos de CHUNKS //************************************************************** //Ejemplos de PHRASES titulo = new Chunk(PHRASE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK)); document.add(titulo); document.add(Chunk.NEWLINE); Phrase phraseNormal = new Phrase(PHRASE1); document.add(phraseNormal); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); Phrase phraseTunning = new Phrase(new Chunk(CHUNKPHRASE21)); phraseTunning.add(new Chunk(CHUNKPHRASE22, FontFactory.getFont(FontFactory.COURIER, 5, Font.ITALIC, BaseColor.GREEN))); phraseTunning.add(new Chunk(CHUNKPHRASE23, FontFactory.getFont(FontFactory.TIMES_ROMAN, 15, Font.BOLD, BaseColor.ORANGE))); document.add(phraseTunning); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); Phrase phraseConLeading = new Phrase(30, “Todo es la misma frase LEADING de esta PHRASE=100, Todo es la misma frase LEADING de esta PHRASE=100, Todo es la misma frase LEADING de esta PHRASE=100″); document.add(phraseConLeading); document.add(Chunk.NEWLINE); document.add(chunkSeparador); //FIN Ejemplos de PHRASES //************************************************************** //Ejemplos de PARAGRAPH titulo = new Chunk(PARAGRAPH, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK)); document.add(titulo); document.add(Chunk.NEWLINE); // Añadir parrafo sin formato document.add(new Paragraph(PARAGRAPH1)); Paragraph par = new Paragraph(PARAGRAPH2); par.setIndentationLeft(200); document.add(par); par = new Paragraph(PARAGRAPH2); par.setIndentationRight(300); document.add(par); // Añadir parrafo en Negrita par = new Paragraph(PARAGRAPH2); par.getFont().setStyle(Font.BOLD); par.setAlignment(Element.ALIGN_CENTER); document.add(par); // Añadir parrafo en Cursiva par = new Paragraph(PARAGRAPH2); par.getFont().setStyle(Font.ITALIC); par.setAlignment(Element.ALIGN_RIGHT); document.add(par); // Añadir parrafo tunning par = new Paragraph(PARAGRAPH2, FontFactory.getFont(“arial”, // fuente 16, // tamaño Font.ITALIC, // estilo BaseColor.RED)); // color document.add(par); par.setAlignment(Element.ALIGN_LEFT); document.add(chunkSeparador); document.add(Chunk.NEWLINE); document.add(Chunk.NEWLINE); //FIN Ejemplos de PARAGRAPH //************************************************************** //Ejemplos de TABLE titulo = new Chunk(TABLE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK)); document.add(titulo); //Añadir tabla 5 columnas PdfPTable table = new PdfPTable(5); //Añadir CABECERA PdfPCell cell = new PdfPCell(new Phrase(“CABECERA”)); cell.setColspan(5); cell.setBackgroundColor(BaseColor.GREEN); table.addCell(cell); //Añadir dos filas de celdas sin formato table.addCell(“1.1″); table.addCell(“1.2″); table.addCell(“1.3″); table.addCell(“1.4″); table.addCell(“1.5″); table.addCell(“2.1″); table.addCell(“2.2″); table.addCell(“2.3″); table.addCell(“2.4″); table.addCell(“2.5″); //tunning de Celdas cell = new PdfPCell(new Phrase(“Alto 3 celdas”)); cell.setRowspan(2); cell.setVerticalAlignment(Element.ALIGN_MIDDLE); table.addCell(cell); table.addCell(“3.1″); table.addCell(“3.2″); table.addCell(“3.3″); table.addCell(“3.4″); table.addCell(“4.1″); table.addCell(“4.2″); table.addCell(“4.3″); table.addCell(“4.4″); table.addCell(“5.1″); cell = new PdfPCell(new Phrase(“Ancho 4 celdas”)); cell.setHorizontalAlignment(Element.ALIGN_CENTER); cell.setColspan(4); table.addCell(cell); document.add(table); document.add(chunkSeparador); //FIN Ejemplos de TABLE //************************************************************** //Ejemplos de IMAGE titulo = new Chunk(IMAGE, FontFactory.getFont(FontFactory.COURIER, 20, Font.UNDERLINE, BaseColor.BLACK)); document.add(titulo); Image foto = Image.getInstance(“resources/ferrari.jpg”); foto.scaleToFit(100, 100); foto.setAlignment(Chunk.ALIGN_MIDDLE); document.add(foto); //FIN Ejemplos de IMAGE //************************************************************** // Cierre del documento document.close(); } catch (Exception ex) { System.out.println(ex.getMessage()); } } static class HeaderFooter extends PdfPageEventHelper { public void onEndPage (PdfWriter writer, Document document) { Rectangle rect = writer.getBoxSize(“art”); //CABECERA ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_RIGHT, new Phrase(“<strong>LaMandarinaMecanica</strong>”), rect.getRight(), rect.getTop(), 0); //PIE ColumnText.showTextAligned(writer.getDirectContent(), Element.ALIGN_CENTER, new Phrase(String.format(“page %d”, writer.getPageNumber())), (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() – 18, 0); } } } |
WEB:
Si lo que necesitamos es generar documentos PDF dinamicamente que se le abran al usuario directamente al interactuar con una página web (pinchar botones, links…), podemos crear un servlet que reciba las peticiones de creacion de ficheros PDF
Código pdf dinámico con Java itext:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Paragraph; import com.itextpdf.text.<strong>pdf</strong>.PdfWriter; public class Demo extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ /*GENERACION AL VUELO DE <strong>PDF</strong>*/ try { // Texto que va a ser añadido al <strong>PDF</strong> String text = “Generacion al Vuelo de un <strong>PDF</strong>”; // Paso 1: Creamos el documento Document document = new Document(); // Paso 2: Creamos un ByteArrayOutputStream // todo lo que se escriba en el documento // se escribe tambien en el ByteArrayOutputStream ByteArrayOutputStream baos = new ByteArrayOutputStream(); PdfWriter.getInstance(document, baos); // Abrimos el documento document.open(); // Escribimos document.add(new Paragraph(text)); // Cerramos document.close(); // Hay que configurar las cabeceras para que //el navegador detecte que es un <strong>PDF</strong> response.setHeader(“Expires”, “0″); response.setHeader(“Cache-Control”, “must-revalidate, post-check=0, pre-check=0″); response.setHeader(“Pragma”, “public”); // Configuramos el content type response.setContentType(“application/<strong>pdf</strong>”); // Tamaño response.setContentLength(baos.size()); // Esccribir el ByteArrayOutputStream a el ServletOutputStream OutputStream os = response.getOutputStream(); baos.writeTo(os); os.flush(); os.close(); } catch(com.itextpdf.text.DocumentException e) { throw new IOException(e.getMessage()); } } } |
PDF con Java itext
6 comments
Join the conversationHugo Cardona - 28 mayo, 2011
Excelente tutorial.
Cristian Ortiz - 29 agosto, 2011
Hola amigos. estoy aprendiendo ITEXT version 5. quiero tener un header y footer en el header una imagen que se repita. en cada pagina este es mi codigo.
public class HeaderAndFooter extends PdfPageEventHelper
{
private final Phrase Phrase;
private final Font FooterFont = new Font(Font.FontFamily.HELVETICA,10,Font.BOLD);
private final Integer Year = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
private final String CopyRight;
public HeaderAndFooter()
{
StringBuilder Builder = new StringBuilder(“Corporacion Droling”);
FooterFont.setColor(BaseColor.BLUE);
Builder.append(Year).append(‘.’).append(” “).append(“#Pagina: %d”);
CopyRight = Builder.toString();
Phrase = new Phrase(getChunk()); //The Image is Loaded here with success.. :thumbup:
return;
}
@Override
public void onEndPage (PdfWriter writer, Document document)
{
Rectangle rect = writer.getBoxSize(“art”);
//[Header]new Phrase(Chunk) Chunk have the image…. Not working Nothing Show..
ColumnText.showTextAligned(writer.getDirectContent(),Element.ALIGN_LEFT,Phrase,rect.getRight(), rect.getTop(),0);
//Footer runs Smootly..
ColumnText.showTextAligned(writer.getDirectContent(),Element.ALIGN_CENTER, new Phrase(String.format(CopyRight,writer.getPageNumber()),FooterFont),(rect.getLeft() + rect.getRight()) / 2, rect.getBottom() – 18, 0);
}
private Chunk getChunk()
{
Chunk Chunk = null;
try
{
final java.net.URL URL = CellsHeights.class.getResource(“/org/com/Utilities/PDF/Images/JavaLogo.jpg”);
Image Imagex = Image.getInstance(URL);
Imagex.setAlignment(Image.MIDDLE);
Imagex.setAlt(“Corporacion Droling”);
Imagex.scalePercent(100);
Chunk = new Chunk(Imagex,0,0);
}catch(Exception e){System.err.println(e.getMessage());}
finally{return Chunk;}
}
}
. el footer sale bien pero la imagen en el header no sale nada alguien sabe como colocar la imagen en el header con itext5.
percy - 17 noviembre, 2011
Hola yo lo que necesito es un encabezado complejo: una imagen y texto que paso como parámetros, además necesito un pie de pagina que me soporte una imagen y una tabla, con itext se vuelve tan complejo de hacer no existe por allí alguna librería como fpdf en php que lo hace de manera super sencilla por allí encontré fpdf para java pero aun no esta tan maduro
admin - 18 noviembre, 2011
Hola Percy, desconozco como funciona fpdf, tendría que mirarlo y ahora no estoy con esto.
Siento no poderte ayudar.
Un saludo.
Sergi - 19 febrero, 2013
Buenas querría saber si es posible escribir sobre un .pdf ya creado. Tengo un pdf con una imagen de fondo y quiero escribir sobre esta.
Gracias
Hector - 30 mayo, 2013
Antes que nada excelente ejemplo de aplicación de la librería itextpdf, actualmente estoy desarrollando un sistema de facturas el cual me entrega todo el reporte en pdf, solo que tengo un problema que no he podido solucionar, esta libreria tiene alguna forma de poder poner texto en una coordenada especifica dentro de la hoja del pdf.
Sin mas agradezco su ayuda.
Saludos.
Related Posts
Enviar emails utilizando el paquete UTL_HTTP de Oracle
Ber 28 mayo, 2013Función para enviar emails utilizando el paquete UTL_HTTP de Oracle.
La función es básicamente esta, en la que tenéis que cambiar los datos de los destinatarios, del envío, adjuntos, y el link_mail desde dónde se realizará.
Realizar un import de un fichero .dmp (IMP)
Ber 27 mayo, 2013Partiendo de un fichero .dmp que contenga una copia o backup de una base de datos, o de la estructura de las tablas, podemos realizar una importación utilizando el comando IMP
Import fichero .dmp Oracle
El comando para importar datos en Oracle 9i…11g es imp.
Si queréis ver los detalles del comando o mostrar la ayuda, podéis hacerlo escribiendo por consola la siguiente sentencia:
imp help=yes
Para hacer un import basta con introducir el comando acompañado del usuario/password, el fichero de log en el que queréis que se guarde la información referente al comando, y por último indicar dónde se encuentra el fichero .dmp que tiene almacenado la parte de la base de datos que quieres importar o restaurar.
Como muestra la siguiente imagen:

Leer másPrevisión de amenazas de seguridad en la red para 2013-2014
Ber 13 mayo, 2013Resumen del 2012
En estos últimos años, ha habido un incremento de vulnerabilidades y ataques a través de las redes. Las causas de este incremento de vulnerabilidades durante el año 2012 fueron las siguientes:
- El aumento de la movilidad de los datos a los entornos de red, actualmente las empresas están incorporando la posibilidad de que todos los usuarios puedan acceder a sus datos desde cualquier lugar.
- La diversidad de los entornos de trabajo a diferentes plataformas cada vez tiene más presencia en las empresas (Distribuciones Linux, Windows, Mac), por lo que es necesario ampliar el rango de protección de los equipos.
- Están surgiendo cada vez más programas maliciosos destinados a plataformas móviles, siendo Android el objetivo de la gran mayoría.
- Se ha incrementado el uso de dispositivos personales (Tablets, Teléfonos inteligentes) dentro de los entornos laborales, en los que la seguridad o protección de los mismos no recae sobre el administrador de sistemas.
- El uso de internet sigue creciendo y es la vía principal de distribución de código malicioso.
- Existen empresas que crean y distribuyen software destinado a realizar ataques de seguridad, que es utilizado por otras empresas para comprobar sus vulnerabilidades frente ataques y que finalmente acaban en manos de terceros que destinan el software a hacer ataques reales de seguridad.
- También han aparecido nuevas distribuciones de software desarrollado para realizar ataques de seguridad como la distribución de blackhole que cada vez es más popular.
- La forma tradicional de ataque sigue siendo a sitios web que no están actualizados o que están mal configurados, cobran importancia las actualizaciones de seguridad en las plataformas o gestores de contenidos que se utilizan para desarrollar las aplicaciones web.
Actualidad
Como era previsible el incremento de servicios, y datos en la nube es cada vez mayor. Tanto desde el punto de vista personal como laboral, ya que las empresas están cambiando a entornos en la nube. Por lo tanto, esta nueva adaptación en las empresas tendrá que estar respaldada por administradores de redes que sean capaces de mantener el entorno de trabajo libre de malware que pueda ocasionar perdidas de datos o interrupciones de servicios.
Como podemos ver diariamente la pérdida de datos y contraseñas de usuarios existe en todas las empresas, e incluso las empresas más grandes del sector de las TIC tienen grandes vulnerabilidades y los hackers son capaces de entrar en el sistema y obtener datos importantes de los clientes. En el último año, hemos visto como perdían o se publicaban datos importantes de los usuarios (contraseñas, tarjetas de crédito, etc) de grandes compañías. Este es un resumen de los más importantes del último año:
Cifras
- La red social Linkedln tuvo un problema de seguridad que los hacker aprovecharon y obtuvieron la cifra de 6.5 millones de contraseñas de usuarios.
- La web de contactos eHarmony perdió 1,5 millones de contraseñas de usuarios.
- Formspring encontró que se habían publicado en internet casi medio millón de contraseñas de usuario, debido a esto pidió que los 28 millones de inscritos cambiasen sus contraseñas.
- Yahoo reconoció que habían sido robadas medio millón de direcciones de correo electrónico y contraseñas de usuarios.
- Philips también sufrió un ataque en el que perdió el control de miles cuentas de usuario, con sus números de teléfono, direcciones, contraseñas, etc.
Posibles soluciones
Contemplando el escenario actual, los administradores de sistemas deben de tener en cuenta las últimas estrategias de seguridad, entre las que podemos encontrar las siguientes:
- Controlar el uso o eliminar en caso innecesario los complementos Java de los navegadores ya que durante el último año estos complementos han demostrado ser muy vulnerables a los ataques de terceros.
- Reiterar el uso de contraseñas seguras y diferentes en todos los sitios que almacenen
información importante,
- No almacenar las contraseñas en una base de datos en la que se encuentren los datos sin cifrar. Aplicar algoritmos hash varias veces para que resulte más difícil encontrar las contraseñas durante un ataque.
- Proteger la base de datos de contraseñas, la red y los servidores con sistemas de defensas por capas.
- Eliminar software antiguo o desactualizado que pueda ser vulnerable, como los Gadgets de Windows Sidebar y Gadgets de Windows Vista y Windows 7 ya que Microsoft desaconseja el uso de estos Gadgets por razones de seguridad. Se han eliminado en las últimas versiones de Windows por este mismo problema.
- Reducir la superficie expuesta a ataques: adoptar un enfoque activo para vigilar programas maliciosos y vulnerabilidades dentro de las aplicaciones, sitios web y correos no deseados.
- Protección en todos los puntos de acceso: asegurarse que los usuarios están protegidos en cualquier lugar e independientemente del dispositivo que utilicen (móviles, tabletas, etc), y que utilicen tecnologías que ofrezcan garantías de protección sin afectar a los usuarios ni al rendimiento.
- Bloquear ataques y filtraciones, utilizar sistemas que puedan bloquear las amenazas en sus diferentes fases de ejecución, para permitir bloquear un ataque en diferentes capas independientes entre sí.
Opinión personal
Como conclusión, los administradores deben de proteger un abanico muy amplio de dispositivos y software dentro de una misma empresa, para facilitar esta tarea sería conveniente reducir los posibles escenarios de ataques así como establecer un sistema de bloqueo de las amenazas en diferentes capas por si alguna de las capas falla poder parar la amenaza en la siguiente capa, por último añadir como un buen plan de recuperación de las posibles amenazas que permita restaurar el sistema lo antes posible en caso de fallo de seguridad.
Leer másPoner una página de mantemiento en tu web
Ber 29 abril, 2013Este código nos permitiría poner una Web en modo de mantenimiento de tal manera que solamente tú puedas ver una parte de la web y el resto de personas vean la página de mantenimiento.
En un servidor linux tienes que editar el fichero .htaccess e incorporar las líneas siguientes:
Sustituyendo las xxx.xxx.xxx.xxx por la IP de tu router, podéis omitir esta línea sino vais a llamar a ninguna imagen o css desde la página de mantenimiento:
Podéis cambiar el nombre de la página pruebas.html por la página a la que queréis redirigir todo el tráfico.
Leer másCon esto redirigirás todo el tráfico a la página pruebas.html menos las IPs que hayas indicado, puedes poner todas las líneas de IPs que necesites.