Esta contribución se inspira ampliamente en
Génération améliorée de fichiers PDF
y en :Génération de PDF pour SPIP - Drop Zone City
Invito a que revises esas contribuciones antes que ésta.
Instalación
Encontrarás en el documento adjunto (titulado PDF Nueva Versión), los ficheros necesarios para la generación de los artículos en formato PDF.
No se debe olvidar crear una subcarpeta llamada _article_PDF
en la carpeta /IMG
y de asignarle los permisos a 777 (como lo habían hecho en la instalación de SPIP para el directorio IMG por ejemplo).
A continuación, instala los archivos adjuntados en la raíz de su sitio SPIP.
Atención : Si ya utilizas un archivo mes_fonctions.php3, deberás copiar el código contenido en el mes_fonctions.php3 que aquí se incluye y pegarlo entre las balizas <?php
y ?>
en tu archivo mes_fonctions.php3.
Luego, sólo resta incluir el vínculo en su esqueleto article.html hacia article_pdf.php3. Un ejemplo sería esto : :
<a href="article_pdf.php3?id_article=#ID_ARTICLE" title="el artículo en formato PDF">Descargar formato PDF</a>
Funcionalidades añadidas en ésta versión
- Los PDF se regeneran automáticamente cuando se modifica un artículo, mientras que con las contribs anteriores se debía borrar a mano los pdf en la carpeta IMG/_article_PDF cada vez que se modificaba un artículo.
- El problema de título demasiado largo que se cortaba y en consecuencia que no correspondía a la línea se ha corregido.
- Mejora de la generación de algunos carácteres especiales.
- Los logos de los artículos aparecen correctamente.
- Las imágenes insertadas en los artículos aparecen correctamente.
- Esta contribución es compatible con la contribución : Découper un article en plusieurs pages et lui ajouter un sommaire, así los <hr>
generados no aparecen en el pdf.
- Las imágenes en formato GIF se administran de 2 maneras : Con código PHP puro, siendo el resultado no muy satisfactorio aunque utilizable ; o bien, si está disponible, con utilización de la librería GD en una versión capaz de manipular los GIF, devolviendo un resultado perfecto.
- Se administran los archivos PNG con capa ALFA pero el PNG generado en el PDF tendrá inevitablemente un fondo blanco (aunque se podría cambiar el color por defecto desde una variable fácilmente)
- Utilizamos la última versión de FPDF que al momento de éste artículo es la 1.53. Para más información sobre las diferencias de las versiones vea aquí.
Un PDF simplificado sin portada
Encontrarás también entre las piezas adjuntas el archivo que permitirá generar un artículo al formato PDF, de presentación más simple, sin portada.
Instalación :
Se instala como se describió anteriormente el « paquete PDF Nueva Versión ». Luego basta con sustituir el archivo lib_pdf_spip.php que se sitúa en el directorio : lib/class_pdf por el proporcionado en el documento adjunto (cuyo título del zip es « PDF simple sans page de garde »).
Obtendrás entonces un PDF simple sin portada, con un pie de página dónde se encuentra el autor, el número de páginas, la fecha de publicación y el nombre del sitio.
Podrás fácilmente modificar el tamaño, el tipo de letra y los espacios entre cada baliza (antetítulo, título, subtítulo y texto).
Ejemplo :
//Titre
$this->SetFont('helvetica','B',12);
$this->WriteHTML($titre);
$this->Ln(12);
- SetFont permite definir el formato (B=Negrita 12=tamaño, obviamente)
- WriteHTML sirve para transformar las balizas HTML en códigos interpretables por el PDF
- Ln(12) = Efectúa un salto de línea, y 12 = amplitud del salto de línea.
Para más información, ves a http://www.fpdf.org
Para ir más lejos : Añadir campos extra en la generación de los PDF
Si se desea utilizar los campos extras, es necesario declararlos en el fichero : lib_pdf_spip.php como esto :
línea 137 sustituir
global $texte, $chapo, $ps, $notes ;
por :
global $texte, $chapo, $extra, $ps, $notes ;
alrededor de la línea 146 buscar este código :
//Texte -
justifie $this->SetFont('helvetica','',10);
$this->WriteHTML($texte) ; $this->Ln(12);
y añadir a continuación :
if ($extra) // extra $this->SetFont('helvetica','',10) ; $this->WriteHTML($extra) ; $this->Ln(12) ;
En este ejemplo, los campos extra aparecerán en sus pdf bajo el texto del artículo y antes del PostScriptum.
Puedes situar el código siguiente antes del texto del artículo, antes del chapo, después del PS...
En article_pdf.html :
Línea 11, debajo de
$conf_nom_site = "[(#NOM_SITE_SPIP|pdf_first_clean)]" ;
inserta los campos extras que quieras mostrar, aquí un ejemplo con 2 campos extra (Misión, Competencia) :
$extra = "Misión : "."[(#EXTRA|Mision|pdf_first_clean)]"."
"."Competencia : "."[(#EXTRA|Competencia|pdf_first_clean)] ;
Puedes agregar de esta forma tantos campos extra como desees.
Para más información sobre los campos extra, ve a la parte privada de spip-contrib.net y haz una búsqueda sobre « extra ». Allí encontrarás toda la doc. sobre los campos extra y su utilización.
Bien, creo que no olvidé nada, sólo resta aclarar que esta contribución es sólo una recopilación de información del spip-contrib y sus foros. Pues no soy más que un ensamblador de lo que encontré y no el creador. Gracias a Chag que completó esta contrib. mejorando la gestión de las imágenes, de los cuadros e integrando la última versión de FPDF.
Integración de las imágenes en los PDF gracias a la librería GD
Comencemos por dar al César lo que es del César. Estas modificaciones se inspiran en este comentario.
Esta librería de manipulación de imágenes permite mejorar la calidad de algunas imágenes integradas en los PDF. Los formatos de archivos en cuestión son :
- GIF : Este formato de imagen se sometía a licencia. Con el fin de no correr el riesgo de problemas judiciales y para no pagar, la librería GD no manipula ya los ficheros GIF entre su versión 1.6.0 (que corresponde a la fecha en la cual UNISYS comenzó a querer hacer pagar los usuarios) y la versión 2.0.28 (fecha a la cual su algoritmo principal pasó a dominio público). La ventaja de la librería GD es que manipula muy bien las imágenes en formato GIF.
Para saber si puedes utilizarlo ejecuta ?php phpinfo();?>
desde una página php. Deberías obtener varias secciones incluidas una que se refiere a GD y que se podría asemejar a esta :
GD Support | enabled |
GD Version | bundled (2.0.28 compatible) |
FreeType Support | enabled |
FreeType Linkage | with freetype |
GIF Read Support | enabled |
GIF Create Support | enabled |
JPG Support | enabled |
PNG Support | enabled |
WBMP Support | enabled |
XBM Support | enabled |
Es necesario al menos que el soporte de lectura de GIF sea posible para poder utilizar la librería GD.
Tanto el caso de estar habilitado como no, nuestra modificación permite incluir en el fichero PDF una imagen en formato GIF ; pero será más limpia con la utilización de GD.
- PNG : Cuando UNISYS comenzó a querer hacer pagar licencias para el formato GIF, el formato PNG emergió. La librería FPDF utilizada para crear los PDF de esta contribución ya sabe administrar los ficheros PNG, pero no los PNG con capa alfa.
Para resumir, la capa ALFA, es un método de transparencia sobre las imágenes que permite tener partes más o menos transparentes.
Nuestra modificación en la librería permite administrar los ficheros PNG con capa ALFA. El fichero se pondrá de nuevo obligatoriamente sobre un fondo blanco.
Aunque no tengan la intención de utilizar de imágenes PNG con canal alfa, sepan por ejemplo que, si añaden un documento PDF a un artículo, su icono es un PNG con canal ALFA.
Sobre la imagen siguiente, pueden comparar 2 capturas de pantalla de PDF generados a partir de SPIP. El primero no administra correctamente el canal alfa. El segundo, si.
Discussions par date d’activité
2 discussions
Hola
En los esqueletos que hemos hecho, basados en las plantillas de Mollio, ubicados en http://alufis35.uv.es/spip/Esquelet...,
tienen modificaciones al código mostrado en este artículo, que permite, entre otras cosas, mostrar en el idioma apropiado (actualmente Español, Inglés, Catalán y Francés) los elementos « Página », « Resumen », « Fecha de publicación », « Puesto online el », que en la versión de los esqueletos, aparece siempre en Francés.
Saludos
Pablo
Répondre à ce message
Esoty intentando ponerlo en práctica.
¿sabés de alguien que haya jugado con esto ?
Busco alguna manera de que el PDF se genere en el momento, pera no consumir espacio en disco...
También estoy buscando la manera de justificar el texto
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |