Abrir documentos pdf, word, etc desde Java

En general la clase Desktop es capaz de abrir e imprimir cualquier tipo de fichero con la aplicación que haya sido definida por defecto en el SO para ese tipo de fichero.

Un ejemplo típico de uso de la clase Desktop es abrir un documento pdf desde java:

try {
     File path = new File ("carpeta/tuArchivo.pdf");
     Desktop.getDesktop().open(path);
}catch (IOException ex) {
     ex.printStackTrace();
}

Con la clase Desktop también se pueden hacer otras cosas como por ejemplo abrir una url (web) desde java.

Mediante el uso de la clase Desktop se evitan códigos específicos para cada SO. Por ejemplo también podríamos abrir un documento pdf (o cualquier otro tipo de documento) mediante el siguiente código (Pero solo para Windows):

try {
	Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + "carpeta/tuArchivo.pdf");
} catch (IOException e) {
                e.printStackTrace();
}

Fuentes:

Acerca de franciscoguemes

Ingeniero en Informática
Esta entrada fue publicada en Java. Guarda el enlace permanente.

47 respuestas a Abrir documentos pdf, word, etc desde Java

  1. kevLinK dijo:

    Excelente, me funciona en linux, me imagino que también lo hace en windows

    • franciscoguemes dijo:

      Me alegro de que la información te haya sido de ayuda.

      Contestando a tu pregunta: Si, también funciona en Windows, ya que la clase Desktop es una clase del API de Java y por tanto ese código funcionará en cualquier SO que disponga de JRE (Java Runtime Environment, también conocido como JVM (Java Virtual Machine)).

  2. Victor Maldonado dijo:

    Muchas gracias. El codigo funciona correctamente.

  3. dompir dijo:

    Me funciono muy bien, tengo una consulta como puedo cambiar color de un TextPane, EditorPane solo de lo seleccionado. Gracias por la Ayuda

    • franciscoguemes dijo:

      Hola, para un JTextPane:
      JTextPane textPane = new JTextPane();
      textPane.setSelectedTextColor(Color.RED);
      textPane.setSelectionColor(Color.GREEN);

      En el caso del JEditorPane:
      JeditorPane = new JEditorPane();
      editorPane.setSelectedTextColor(Color.RED);
      editorPane.setSelectionColor(Color.GREEN);

      No sé si es esto a lo que te referías.

  4. Miguel dijo:

    Hola!! gracias por compartir este código, si me funciona
    mi pregunta era como puedo hacer para que mi pdf se muestre dentro de un jframe o iframe, asi poder verlo mejor como parte de la aplicación.
    gracias por tu respuesta.

    • franciscoguemes dijo:

      El código que yo he posteado en la entrada lo que hace es buscar la aplicación predeterminada en el SO para abrir ese tipo de fichero.

      Para abrir el pdf dentro de un JFrame o un iFrame como parte de tu aplicación (que es lo que creo que preguntas) lo que tendrías que hacer es leer el contenido del pdf y cargarlo en un componente Java como por ejemplo un JEditorPane o un JTextPane (date cuenta de que contenido del pdf puede combinar distintos formatos de texto, formatos de página, distintos tamaños, colores y tipografías, imágenes, figuras …). Posteriormente tendrías qu añadir este componente a tu JFrame. El asunto es que para leer el contenido de un pdf desde dentro de tu aplicación, procesarlo y cargarlo en el componente Swing, necesitarías hacer una biblioteca de clases que implementen un lector/visor de documentos pdf, lo cuál supone leer, comprender y asimilar el estandar de los documentos pdf para posteriormente ponerte a programar. Como ya irás imaginando este trabajo Hercúleo es equivalente a programar un Adobe Acrobat Reader, y me imagino que no estarás por la labor. Lo mejor que puedes hacer (bajo mi punto de vista) es buscar una biblioteca de terceros que haga este trabajo por tí. No sé si hay alguna por ahí hecha en Java o con API para Java, pero si la encuentras sería de agradecer que me contaras cuál.

      Una cosa curiosa es que el paso contrario es relativamente sencillo. Es decir generar un documento pdf a partir del contenido de tu aplicación (el contenido de tu JEditorPane, JTextPane), para ello hay varias bibliotecas de terceros entre las que destaca iText.

      • wil dijo:

        hola felicitaciones y gracias por ayudarnos…

        encontraron alguna forma de mostrar pdf en un componente de swing???

        • franciscoguemes dijo:

          No hay ninguna forma de embeber un pdf dentro de un componente de swing, al menos no con los componentes “estandard” (javax.swing) ya que el código del post lo que hace es delegar la acción de abrir el fichero a la aplicación definida en el SO para ese tipo de fichero. Lo que no sé si existirá, aunque lo dudo, es un componente de terceros que te permita visualizar un pdf y embeberlo dentro de un JFrame.

  5. Daniel dijo:

    Gracias Franciso por la información. Ma ha servido. Por cierto la biblioteca iText me parece muy buena, solo que toma un poco de tiempo para manejarla ya que no tiene javadoc, pero nada que un buen manual no pueda solucionar como el “iText in action” de Bruno Lowagie.
    Saludos.

  6. JOHANN dijo:

    Oye una pregunta, hay alguna forma de hacer que este código:

    try {
    File path = new File (“dist/libro_254.pdf”);
    Desktop.getDesktop().open(path);
    }catch (IOException ex) {
    ex.printStackTrace();
    }

    sea universal, o sea que yo al colocar un archivo pdf en la carpeta dist, al ejecutar el archivo. jar y dar clic en un botón, desde cualquier computador abra el archivo deseado?? El problema es que solo sirve en mi pc

    • franciscoguemes dijo:

      mmmm me gustaría saber exactamente a qué te refieres cuando dices “universal”. Con el código que he expuesto en este post únicamente puedes abrir ficheros (no necesariamente *.pdf, también *.html, *.rtf, etc …) que estén en la misma máquina donde se ejecuta el código (en tu caso el fichero *.jar).

      Lo que creo que intentas hacer es llevarte el fichero *.jar a otra máquina y que automáticamente te abra los *.pdf que haya en el directorio “/dist”. En este caso si que se puede hacer, pero para ello primero tienes que ver si el directorio existe, y en caso de que exista ver que ficheros *.pdf existen en el directorio. Sería algo así:
      //Comprobar que el directorio existe
      String dir = File.separator + “dist”;
      File miDirectorio = new File(dir);
      if(miDirectorio.exists()){
      //El directorio existe, ver que ficheros *.pdf hay…
      //Aqui las posibilidades son varias:
      // 1- habrir todos los pdf que haya (es un poco salvaje)
      // 2- mostrar un JFileChooser y que el usuario elija que fichero abrir
      // 3- buscar un fichero en concreto (voy ha hacer esta opción):
      String pdfName = “libro_254.pdf”;
      File miPdf = new File(dir + File.separator + pdfName);
      if(miPdf.exists()){
      //El fichero existe, es cuestión de ejecutar el código
      try {
      Desktop.getDesktop().open(miPdf );
      }catch (IOException ex) {
      ex.printStackTrace();
      }
      }else{
      //El fichero no existe, por ejemplo notificar al usuario…
      System.out.println(“El fichero: ” + file.getAbsolutePath() + ” no existe”
      }
      }else{
      //El directorio no existe, por ejemplo notificar al usuario…
      System.out.println(“El directorio: ” + dir + ” no existe”
      }

      Espero que te sirva, si pretendías hacer otra cosa dímelo.
      Saludos.

  7. seba dijo:

    es posible ejecutar ese comando y que abra un archivo comprimido en un jar?

    • franciscoguemes dijo:

      Si, es posible, pero en el caso de los ficheros *.jar el tema de las rutas (path) al fichero que deseas abrir funciona un poco diferente, ya que hay que usar rutas relativas a la raíz de la estructura interna del fichero *.jar, ya que cuando escribes el código no sabes donde estará alojado finalmente el fichero *.jar cuando se vaya a ejecutar.

      Supongamos que el fichero que quieres abrir se llama “documento.pdf” y este se encuentra en el directorio “resources”. Supongamos que el directorio “resources” se ubica en la raíz del hipotético fichero *.jar. En este caso la ruta al ser relativa debe comienzar con el caracter File.serparator. Posteriormente habrá que hayar la ruta absoluta al fichero que se desea abrir.

      El ejemplo quedaría de la siguiente forma:

      try {
      String rutaRelativa = File.separator + “resources” + File.separator + “documento.pdf”;
      URL url = this.getClass().getResource(rutaRelativa);
      File path = new File (url.toURI());
      Desktop.getDesktop().open(path);
      }catch (IOException ex) {
      ex.printStackTrace();
      }

      //Si el código que he puesto está en un método “static” entonces la URL se obtiene así:
      URL url = class.getClass().getResource(rutaRelativa);

  8. Pol dijo:

    graciassssss

  9. Pedrox91 dijo:

    A probarlo ya que lo tengo que integrarlo en mi proyecto

  10. kta dijo:

    hola buen post pero mi primera seria, tengo lo que es un buscador de archivos pero solo me da la ruta en un texfield, si quisiera que lo abriera pero tomando la ruta del extfield como lo implementaria , soy un poco novato y gracias

    • franciscoguemes dijo:

      Suponiendo que en el TextField tengas la ruta absoluta al archivo pdf…

      //Recoger la ruta del textField
      String ruta = textField.getText();
      //El resto del código es igual...
      try {
      File path = new File (ruta);
      Desktop.getDesktop().open(path);
      }catch (IOException ex) {
      ex.printStackTrace();
      }

  11. CESAR MAYITH GARCIA ARENAS dijo:

    hey muchas gracias la primera parte la entendi y me funciono a la perfeccion .. eres un genio
    solo me queda una inquietud .. un ejemplo en donde pueda colocar la segunda parte del codigo para que me abra como dices tu .. todo tipo de texto

    • franciscoguemes dijo:


      //El usuario escoge un fichero de tipo Word mediante un cuadro de diálogo
      File fichero = null;
      JFileChooser chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter(
      "Documento de Word", "doc", "xdoc");
      chooser.setFileFilter(filter);
      int returnVal = chooser.showOpenDialog(miVentanaDeTipoJFrame);
      if(returnVal == JFileChooser.APPROVE_OPTION) {
      fichero = chooser.getSelectedFile();
      }
      //El resto del código es lo expuesto en la entrada
      try {
      Desktop.getDesktop().open(fichero);
      }catch (IOException ex) {
      ex.printStackTrace();
      }

      Este código lo que haría es abrir un fichero de Word, o mejor dicho decirle a tu Sistema Operativo que abra el fichero de Word seleccionado haciendo uso de la aplicación asociada a ese tipo de ficheros.

  12. alan dijo:

    Me manda un error que no existe, y tengo que poner toda la ruta desde el C, no solo desde la capeta dentro del proyecto, y al momento de quererlo ejecutar el JAR en otra compu pues no funcionan los archivos que quiero abrir AYUDA

    • franciscoguemes dijo:

      Para que no te de ese error, no solo te tienes que llevar a la otra máquina el *.jar, sino que también te tienes que llevar el *.pdf y ubicarlo exactamente en la misma ruta que especificaste en tu programa. Sin embargo, esa solución es una chapuza, ya que tener rutas absolutas (a ficheros o a cualquier otra cosa) explícitamente especificadas en el código es una mala práxis de programación que se debe evitar (el nombre técnico para esto es hard coding).
      Yo generalmente suelo abordar el problema de dos formas:

      • Ficheros externos a la aplicación: Mostrar un cuadro de diálogo donde el usuario pueda seleccionar el fichero, recoger la ruta al mismo y abrir el documento. En un comentario anterior puse un ejemplo de esto.

      • Ficheros de ayuda y similares: Cuando el *.pdf a abrir es un manual de usuario etc, incluyo el documento dentro del proyecto, en una carpeta (paquete) específicamente destinada para tal fin, y cargo la ruta relativa al documento desde una instancia de la clase Properties. Si no te ves capaz de hacerlo del tirón usando una instancia de la clase Properties, prueba primero a “hardcodear” una ruta relativa al fichero.

      Saludos.

  13. Martha Guillen dijo:

    Hola, este codigo me sirvio de mucho, gracias.

    Pero tengo una pregunta, digamos que en mi aplicación yo quisiera abrir documentos que se encuentran en una carpeta compartida que se encuentra en un servidor X, funcionaria de la misma manera?

    Saludos,

    • franciscoguemes dijo:

      Si te soy sincero no lo he probado con documentos remotos, pero a priori debería funcionar, lo único que tienes que tener en cuenta es usar el constructor File(Uri uri) para el objeto File que le vas a pasar a Desktop.open(). Es decir:


      URI uri = new URI("La URI de tu fichero");
      File file = new File (uri);
      Desktop.getDesktop().open(file);

      Para mas información sobre como especificar la URI a tu fichero puedes consultar la documentación de la clase URI o bien el file URI scheme en Wikipedia.

  14. Hola, muy buen artículo! después de leer todo entendí mucho mejor el funcionamiento de esta clase. Ahora quisiera que me aconsejaras sobre un desarrollo similar que requiero hacer: La aplicación del portal requiere incluir una funcionalidad que pueda mostrar el contenido de un manual hecho en word, debido a que el manual contiene información sensible sólo requieren que se muestre en el navegador, conservando propiedades como enlaces existentes dentro del documento. lo que pensé fue en el desarrollo de un lector de documentos, pero quisiera que me aconsejaras qué otras opciones podría evaluar que permita mostrar la información a los analistas salvaguardando la integridad del documento. Agradezco mucho el a[porte que puedas darme sobre este tema.

    • franciscoguemes dijo:

      Buenas, siento tardar tanto en contestarte, pero he estado bastante ocupado últimamente. Si lo que deseas es que no puedan modificar el manual creo que la mejor solución sería que mostraras el manual en versión PDF, a partir de la versión 2007 de Office tienes la opción de exportar el documento en formato PDF. Al ser una aplicación web tienes la opción de embeber un visor de documentos PDF dentro de la propia página web, lo que no estoy seguro es de si podras deshabilitar la funcionalidad de descarga del documento en el visor embebido, pero apostaría a que sí que existe la posiblidad.

  15. aantaress dijo:

    Hola, ¿como puedo iniciar automáticamente un documento pdf, por ejemplo desde la herramienta “Aplicaciones al inicio” en linux cuando arranco el ordenador?. Solo da opción a iniciar automaticamente programas, pero una vez dí con la sintaxis adecuada y pude iniciar un documento, solo que ahora no la recuerdo.
    ¿me podrías echar una mano? gracias

    • franciscoguemes dijo:

      No sé que distribución de Linux tienes, y aunque lo supiera si no es Ubuntu (que es la que uso últimamente) es complicado poder ayudarte. En Ubuntu desde el terminal sería algo así como: “gnome-open MiArchivo.pdf”. Donde “MiArchivo.pdf” representa la ruta absoluta a tu fichero, por ejemplo: “$HOME/Documents/Manual.pdf”. Usando la opción de iniciar automáticamente programas supongo que dará la opción de seleccionar un programa de una lista o bien teclear la orden, así que puedes probar primero desde el terminal de Linux, y una vez tengas una orden que abre el documento desde el terminal, puedes probar a copiarla en la opción de iniciar programas automáticamente.

  16. CESAR dijo:

    Oye amigo tengo un proyecto, no se como hacerlo, el proyecto trata de un control de trabajadores y el administrador necesita que registrarlos a todos y pues cada trabajador necesita su curp en formato pdf la pregunta es ¿como hago para que el administrador cada ves que escriba por ejemplo en un txt curp.pdf que el programa lo busque en el sistema, que lo registre, se guarde y que al momento de que le de click a un botón del mismo sistema muestre la curp que se escribió? me urge gracias por tu tiempo y tu respuesta…. SALUDOS

  17. Alex dijo:

    Hola amigo una pregunta parecida a la ultima yo también tengo que registrar a mis alumnos, y cada alumno que registre tengo que subir varios pdf, y con una tabla cada ves que busque un alumno, que lo encuentre y que al seleccionarlo que salga su información, y que al presionar un boton ya puesto me aparezca su acta de nacimiento en formato pdf pero que al seleccionar otro alumno y al presionar otra ves el mismo boton me salga otra acta de nacimiento diferente a la de mi primer alumno??????

  18. Marco dijo:

    Que tal amigo, muchas gracias por la info. Tengo un problema y quisiera saber si podrias ayudarme, al ejecutar el codigo que posteas me sale una java.awt.HeadlessException y no se a que se deba, sin alguien tiene la respuesta se los agradeceria.

  19. damr21 dijo:

    holaa amigo tengo un problema estoy programando en JCreator y pongo tu codigo y me tira el siguiente error
    C:\Users\DAMR\Desktop\Cosas2\PruebasJAVA\pruebapdf.java:18: cannot find symbol
    symbol : class IOException
    location: class pruebapdf
    } catch (IOException e) {
    ^
    1 error
    no se si tengo que importar un paquete ayuda porfaa

    • franciscoguemes dijo:

      Hola!
      Si, en efecto el fallo que te da es que no conoce la clase IOException, para solucionarlo tienes que importarla, prueba a poner “import java.io.IOException;”. En los IDE modernos (Eclipse, NetBeans, etc…) este tipo de soluciones son sugeridas por el propio IDE poniendo simplemente el cursor del ratón sobre el error.

  20. Camilo dijo:

    Hola Amigo, una pregunta de principiante, donde debo colocar el archivo .pdf, ya que lo coloque en la carpeta de las imagemes y me dice que no existe… gracias🙂

    • franciscoguemes dijo:

      Tienes 2 opciones:
      Poner la ruta absoluta al fichero (no te lo recomiendo)
      Poner el fichero en un directorio que esté en el classpath y usar una ruta relativa para acceder al recurso. Si usas Maven o simplemente Eclipse IDE, este te genera por defecto una estructura de directorios donde el directorio src/main/resources está en el classpath. Para ver como leer el fichero puedes ver las respuestas a los comentarios de otras personas, hay una donde explico como leer pdf que está dentro de un jar, el código es el mismo.

  21. brandon dijo:

    lo que pasa es que cuando ingreso la ruta para que por medio de un boton me abra el pdf, lo hace bien ya queda de la siguiente manera “” la ruta”” (“C:/Users/brayu/Desktop/HxC01.1.pdf”);
    pero cuando lo deseo abrir en otra maquina no me abre , entonces quisiera saber si puedo cambiar el directorio , para que en todas las maquinas me abra el programa correctamente sin necesidad de estar cambiando la ruta , ” me hago entener “”, gracias , espero su reespuesta

    • franciscoguemes dijo:

      Hola,
      Una de las reglas generales más básicas en el desarrollo de software es que nunca hay que especificar rutas absolutas a fichero ni directorios (ya sean externos o internos a la aplicación), porque en el momento que ejecutes el software en una máquina distinta, simplemente no va a funcionar. En inglés esto se denomina “Hardcode”. Siguiendo al hilo con tu pregunta:

      • Si el pdf que intentas abrir es algo interno de la aplicación (por ejemplo el manual de usuario), es mejor que incluyas el pdf dentro de la aplicación. La mejor solución para esto es ubicar el fichero en un subdirectorio de “src/main/resources” (Eclipse y Maven incluyen por defecto en el classpath este directorio). Posteriormente es una cuetión de abrir el pdf utilizando una ruta relativa al fichero.
      • Si por contra el pdf que quieres abrir es algo dinámico (El usuario puede elegir que fichero quiere abrir), entonces es mejor que utilices un diálogo para preguntar al usuario qué fichero desea abrir (En java ya tienes la clase JFileChooser que viene con un montón de métodos y utilidades listas para ser utilizadas), en este caso puedes usar la ruta absoluta al fichero que el usuario escoja.

      No sé si es la respuesta que esperabas, pero seguro que le vas a sacar partido. Saludos.

  22. hola tu código funciona correctamente … pero no se si me pudiera orientar para hacer que desde un boton me abra un archivo seleccionado desde un JFileChooser… & se pueda visualizar
    por favor ..!

  23. gaby dijo:

    hola gracias x la aportacion, una preg estoy haciendo y un lector de archivos pero solo me lee .txt, .xml, .css, .java, etc pero el de word lo abre con puros caracteres especiales x asi decirlo, y nose sii se pueda abrir el achivo de word en un txtarea para despues hacer una busqueda de texto en todos los archivos de texto incluyendo los de word

    • franciscoguemes dijo:

      Los archivos de MS Word (*.doc, *.docx) tienen un formato privado y no son archivos de texto, es por ello que al abrirlos ves los caracteres especiales. No he visto ninguna aplicación Java que sea capaz de extraer el texto de un fichero de MS Word, y dudo que lo vea puesto que tal y como he dicho anteriormente es un formato privado. Tendrías que conseguir la especificación del formato de archivo y construirte tu propio “parser” para poder extraer el texto y mostrarlo en un JTextArea o similar. Mi consejo es que pruebes con Open Office, que es un formato abierto y además tienes disponibles bibliotecas de clases que te puedan ayudar a parsear los ficheros de OO.
      Saludos.

  24. Byron dijo:

    y como puedo abrir desde codigo un .exe ??

  25. Miguelito dijo:

    Buenos Dias tengo este codigo y este abre una ventana pero necesito que dentro de esta ventana abra automaticamente un pdf me podria ayudar gracias…

    package PDF;

    import java.awt.BorderLayout;
    import java.awt.Desktop;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;

    import javax.swing.*;

    import com.sun.pdfview.*;

    public class Clase1 extends JFrame {
    PagePanel panelpdf;
    JFileChooser selector;
    PDFFile pdffile;
    int indice=0;

    public Clase1(){
    panelpdf=new PagePanel();
    JMenuBar barra=new JMenuBar();
    JMenu archivo=new JMenu(“Archivo”);
    JMenuItem ver=new JMenuItem(“Buscar Archivo”);
    ver.addActionListener(new ActionListener(){

    @Override
    public void actionPerformed(ActionEvent e) {
    indice=0;
    selector=new JFileChooser();
    int op=selector.showOpenDialog(Clase1.this);
    if(op==JFileChooser.APPROVE_OPTION){
    try{
    File file = selector.getSelectedFile();
    RandomAccessFile raf = new RandomAccessFile(file, “r”);
    FileChannel channel = raf.getChannel();
    ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY,0, channel.size());
    pdffile = new PDFFile(buf);
    PDFPage page = pdffile.getPage(indice);
    panelpdf.showPage(page);
    repaint();
    }catch(Exception ioe){
    JOptionPane.showMessageDialog(null, “Error al abrir el archivo”);
    }
    }
    }
    });
    JPanel pabajo=new JPanel();
    JButton bsiguiente=new JButton(“Siguiente”);
    bsiguiente.addActionListener(new ActionListener(){

    @Override
    public void actionPerformed(ActionEvent e) {
    indice++;
    PDFPage page = pdffile.getPage(indice);
    panelpdf.showPage(page);
    }

    });
    JButton banterior=new JButton(“Anterior”);
    banterior.addActionListener(new ActionListener(){

    @Override
    public void actionPerformed(ActionEvent e) {
    indice–;
    PDFPage page = pdffile.getPage(indice);
    panelpdf.showPage(page);
    }

    });
    pabajo.add(banterior);
    pabajo.add(bsiguiente);
    archivo.add(ver);
    barra.add(archivo);
    setJMenuBar(barra);
    add(panelpdf);
    add(pabajo,BorderLayout.SOUTH);

    }

    public static void main(String arg[]){
    Clase1 p=new Clase1();
    p.setDefaultCloseOperation(EXIT_ON_CLOSE);
    p.setVisible(true);
    p.setBounds(0, 0, 600, 600);
    p.setLocationRelativeTo(null);
    }
    }

  26. Wandy dijo:

    Excelente. Mil gracias, me salvaste la vida. A dos semanas de entregar mi proyecto final. Me ayudaste muchisímo😀 (y) .Excelente post

  27. miguel dijo:

    Te madaste maestro😀 crei que hacer eso me llevaria horas encontrarlo, muchas gracias.

  28. Liss Mtz dijo:

    Hola como puedo abrir mi fichero de mi pc al darle click en un boton de mi formulario en java
    yo ocupo como IDE ECLIPSE

    gracias!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s