Sigueme por RSS! RSS

API para convertir archivos a PDF desde PHP

Cloudconvert es uno de los sitios más interesante que nos hemos encontrado para convertir diferentes tipos de documentos a PDF, cuenta con una API que puede ser usada en diferentes lenguajes de programación, como PHP, Phyton, Swift, etc.

Se puede por ejemplo, programar un cron que ejecute nuestro script y lea constantemente de un directorio en busca de archivos a convertir, sean archivos .DOC, .PPT, .XLS, etc.

Para usar la API, hay que registrarse en el sitio y obtener la API KEY (algunos ejemplos de la web muestran una api key que puede ser usada temporalmente), una vez registrados, obtendremos una hash key que nos permitirá interactuar con los servicios de Cloudconvert.

Cómo usarlo
  • descargar e instalar composer en tu ordenador.
  • crear un directorio en tu servidor, por ejemplo php_pdf.
  • crear dentro de tu carpeta, un archivo llamado composer.json y dentro incluir el siguiente código:
{
 "name": "Example Application",
"description": "This is an example",
"require": {
"cloudconvert/cloudconvert-php": "2.2.*"
}
}
  • luego, abrir la consola/terminal y situarse sobre la carpeta que creamos anteriormente y ejecutar
php composer.phar install
  • el paso anterior creará una carpeta ./vendor con lo necesario para empezar a usar la API.
  • lo siguiente será crear un script (index.php) con el siguiente código:
<?php
   require __DIR__ . '/vendor/autoload.php';
   use \CloudConvert\Api;
   $api = new Api("your_api_key");
   ...
  • luego, dependiendo del tipo de archivo que se quiera convertir, usar uno u otro procedimiento, por ejemplo:
  • pasar de DOC a PDF sería así:
$api->convert([
"inputformat" => "docx",
"outputformat" => "pdf",
"input" => "upload",
"file" => fopen($doc_file, 'r'),
])
->wait()
->download();
  • pasar de PPT a PDF:
$api->convert([
"inputformat" => "ppt",
“outputformat" => "pdf",
"input" => "upload",
“file" => fopen($ppt_file, 'r'),
])
->wait()
->download();
  • pasar de XLS a PDF:
$api->convert([
"inputformat" => "xls",
"outputformat" => "pdf",
"input" => "upload",
"file" => fopen($xls_file, 'r'),
])
->wait()
->download();

Hay muchos tipos de archivos que se pueden convertir, adicional mente, desde el backend del sitio se pueden ir viendo los resultados de los archivos que se han procesado, y en caso de no haberse podido, el porqué, un motivo para que la conversión falle puede ser que el archivo esté corrupto.

Aunque para sacarle provecho a la API hay que pagar alguno de los planes que tiene, es una de las mejores opciones para convertir archivos a PDF desde PHP que hemos encontrado.

Ubuntu: habilitar puerto en el firewall

¿Necesitas habilitar un puerto del sistema?

Vamos a utilizar UFW para interactuar con el cortafuegos del kernel de Ubuntu.

Abrimos la consola y ..

Por defecto el cortafuegos/firewall suele estar desactivado, podemos ver el estado usando el comando "ufw status":
sudo ufw status

Si nos muestra algo como: "Estado: inactivo", lo habilitamos usando "ufw enable".
sudo ufw enable

que nos devolvería algo como: "El cortafuegos está activo y habilitado en el arranque del sistema".

Para abrir un puerto usamos el comando "ufw allow [puerto]", donde "[puerto]" es el número que quieres abrir, ejemplo
sudo ufw allow 10010

Si por el contrario, lo que deseas es denegar el acceso por un puerto determinado, haces: "sudo ufw deny [puerto]"
sudo ufw deny [puerto]

Si quisieras denegar todas conexiones entrantes
sudo ufw default deny

y luego reiniciar el firewall
sudo ufw disable
sudo ufw enable

Para visualizar en detalle las políticas de acceso y los estados de los puertos
sudo ufw status verbose

Ubuntu Netbeans: not all requested modules can be enabled

Si el JDK no está configurado correctamente en el IDE, recibirás el siguiente mensaje cuando intentes crear un proyecto:
Netbeans not all requested modules can be enabled
junto con una lista de módulos que no han podido ser cargados.

Para solucionarlo hay que hacer lo siguiente:
- abrimos el archivo netbeans.conf ubicado en la carpeta /etc del directorio de instalación de netbeans, en mi caso /opt/netbeans-8.2/etc
sudo gedit /opt/netbeans-8.2/etc/netbeans.conf
- una vez abierto, editamos la variable netbeans_jdkhome y le agregamos la ruta al jdk
netbeans_jdkhome="/usr/lib/jvm/java-8-oracle"
- guardamos los cambios, cerramos el archivo y reiniciamos el IDE.
- ya debería funcionar correctamente al crear un proyecto.

Instalar o desinstalar Netbeans en Ubuntu

Instalación

- debemos ir al sitio oficial https://netbeans.org
- entramos en el apartado de descargas y seleccionamos Español en la opción "IDE Language"
- descargamos la versión más acorde a nuestras necesidades
- una vez que se descarga, vamos al directorio donde se encuentra el archivo ejecutable netbeans-[version].sh
- en mi caso el archivo se llama netbeans-8.2-linux.sh
- abrimos la terminal y lo ejecutamos:
sudo sh netbeans-8.2-linux.sh
- aparecerá un asistente para guiarnos (podemos cambiar la ruta de instalación si lo deseamos)
- en mi caso lo instalo en /opt/netbeans-8.2
- luego nos va solicitando el path del JDK con la que trabajará y si instalamos el Glasshfish o el Tomcat, lo mismo (podemos dejar por defecto)
- podemos marcar la casilla Check for updates para que haga las actualizaciones automáticas
- luego de que llegue al 100% el proceso de instalación ya tendrás disponible el IDE para comenzar a trabajar

Configurar lista de S.O. en el arranque de Windows

Si te ha pasado que al arrancar el ordenador te muestra más de un sistema operativo para elegir (varias versiones de Windows por ejemplo), puedes decidir cual se carga por defecto o configurar lo para que no te muestre la lista y acceda siempre al mismo.

Para conseguirlo debes entra a tu versión de Windows favorita y clic derecho sobre

Mi PC  -> Propiedades -> Opciones avanzadas > Inicio y recuperación > Configuración

una vez allí, desmarcas la casilla Mostrar la lista de sistemas operativos durante y presionas el botón Aceptar.

Luego de reiniciar el sistema debería entrar directamente a tu versión de Windows seleccionada.

Magento (recopilación) [v1.7.x]

Desactivar la visualización de SID en las URL

En ocasiones suele pasar que las URL de magento llevan la variable SID, dominio?SID=09b5e9d112345bd7...
A nivel de SEO se recomienda desactivarlas por considerarlas URL toxicas. Lo hacemos desde
menú administración -> Sistema -> Configuración -> Web -> Session Validation Settings -> Use SID on Frontend
lo seteamos en OFF y guardamos.
-  y en el robot.txt agregamos:
## Do not crawl links with session IDs
Disallow: /*?SID=

en el .htaccess
<IfModule mod_rewrite.c>
    RewriteEngine On
    #remove PHPSESSID
    RewriteCond %{QUERY_STRING} SID=.*$
    RewriteRule .* %{REQUEST_URI}? [R=301,L]
</IfModule>

Determinar si la página actual es una categoria
echo (Mage::registry('current_category')) ? 'is-category-page' : 'default-page';

Drupal 7: agregar rel="next" y rel="prev“ a la paginación

A nivel de SEO, se suele recomendar que se indique la relación entre las direcciones URL de los componentes de una serie paginada, por ejemplo, un blog. De esa manera, se le dice a los rastreadores tanto la sucesión como la profundidad de páginas  y le facilitamos el trabajo.

Implementar etiquetas rel="next" y rel="prev"

En Drupal puede ser un dolor de cabeza hacer una modificación como esta, que parece ser muy sencilla, pero si no conoces la estructura del CMS, puede llevarte mucho tiempo.

La solución es hacer le un hook a la función del sistema theme_pager_link
https://api.drupal.org/api/drupal/includes!pager.inc/function/theme_pager_link/7.x

Drupal 7 (recopilación)

¿Cómo ocultar el título "Welcome to site"?
Abrir el page.tpl.php de tu theme y luego buscar la siguiente condicional
<?php if ($title): ?>

y sustituirla por:
<?php if ($title and !drupal_is_front_page()) : ?>
de esa manera Drupal evitará imprimir el título si nos encontramos en el Home page.

¿Cómo eliminar u ocultar el mensaje por defecto "No front page content has been created yet"?
lo podemos hacer de varias formas:
1.- Abrir el page.tpl.php de tu theme y luego buscar la siguiente línea:
<?php print render($page['content']);?>

y sustituirla por:
<?php
if(drupal_is_front_page() and isset($page['content']['system_main']['default_message'])){
   unset($page['content']['system_main']['default_message']);
}
print render($page['content']);
?>