Skip to main content

the avatar of Hollow Man's Blog

mdbook-pdf: A mdBook backend for generating PDF files

last-commit release-date Crate mdbook-pdf build mdbook-pdf test

Followers watchers stars forks

Open Source Love GPL Licence Repo-Size

Introduction

mdBook allows you to create book from markdown files. It’s pretty much alike Gitbook but implemented in Rust. However, unlike Gitbook that supports using calibre for generating PDF, for a long time, mdBook doesn’t support generating PDF files natively, and supporting that is also not in their roadmap. Existing plugins (backends) such as mdbook-latex that utilize Tectonic as well as pandoc solutions will generate a PDF page that doesn’t unify with the existing mdBook generated HTML version. Considering these facts, I created a mdBook backend named mdbook-pdf for generating PDF based on headless chrome and Chrome DevTools Protocol Page.printToPDF.

mdbook-pdf depends on Google Chrome / Microsoft Edge / Chromium. The generated page are pretty much alike the one you manually print to PDF in your browser by opening print.html or executing google-chrome-stable --headless --print-to-pdf=output.pdf file:///path/to/print.html, but with customization of PDF paper orientation, scale of the webpage rendering, paper width and height, page margins, generated PDF page ranges, whether to display header and footer as well as customize their formats, and more, as well as automation. It supports all the platform where Google Chrome / Microsoft Edge / Chromium would work. You can check samples of the generated PDF files in the Artifacts here (The Rust book collections generated in x86_64 Windows, macOS as well as Linux).

Installation & Usage

Since it’s a plugin (backend) for mdBook, first of all you should ensure that mdbook is available.

If your machine’s architecture is x86_64, or you are using Linux for ARM64, check the successful build GitHub Actions workflows, click into the latest one, and then you can get a binary from the Artifacts (including Windows, Linux, macOS).

Otherwise, make sure the rust compiling environment is available, execute cargo install mdbook-pdf to compile and install.

If you want to compile the latest version, make sure the Rust build environment is available (cargo build). Then run git clone https://github.com/HollowMan6/mdbook-pdf.git, in the cloned folder, run cargo build --release , get the executable in target/release/, and put it in PATH.

For running, have Google Chrome / Chromium / Microsoft Edge available (installed at the default location, in PATH or binary location configured) as currently, automatically downloading Chromium binary isn’t available (will update once upstream fixes such support).

  • On Windows 10 and above, the program can generate PDF normally without installing any additional software, because Microsoft Edge is the browser provided with Windows system. Of course, considering the support for the older versions of Windows without Edge, you can install Google Chrome on your computer.
  • In MacOS, you need to install Google Chrome / Microsoft Edge or Chromium.
  • In Linux, you can choose to install any of the Google Chrome / Chromium / Microsoft Edge browsers. It is recommended to install Chromium. The name of this software package in your Linux distribution is commonly chromium or chromium-browser (Note: for Ubuntu later than 18.04, you have to install chromium-browser through snap).

Make sure the following exists in your book.toml:

[output.html]

[output.pdf]

And also [output.html.print] is not disabled (it should be enabled by default, so don’t worry if the following lines doesn’t occur in you book.toml).

[output.html.print]
enable = true

A simplest book.toml is as follows:

[book]
title = "An Example"

[output.html]

[output.pdf]

Finally you can build your book and get the PDF file with mdbook build command, your PDF file will be available at book/pdf/output.pdf.

An example for the output of the building progress

Configuration

Check book.toml and comments for details for the available configurations of [output.pdf].

Credits

This project relies on headless_chrome. Because the new version has not been released, and the default timeout is not friendly to PDF generation, I use my Fork version to publish mdbook-pdf-headless_chrome for expanding the relevant timeout to 300 seconds as a submodule of this project, thus enabling the project to be published on Crates.io as well.

Some Notes and Thoughts

mdBook supports adding alternative backend. When the mdbook build command is invoked, if the book.toml in the book folder has an [output.pdf] item in addition to the default [output.html] for generating the html web page, mdbook-pdf will be called, and the relevant book information and parameter configuration in JSON are passed to the standard input of the program. Relevant mdBook documentation can be found here.

Mechanism behind mdbook-pdf

A headless browser means that all the operations will be in the background without a graphical interface.

Before decided to use Chrome DevTools Protocol Page.printToPDF, I also tried wkhtmltopdf which is based on QT4 Webkit. Hovewer, wkhtmltopdf doesn’t seem to support CSS Printing @media Rule, which will make some extra components visible and printed in the PDF.

I’ve also tried directly making HTTP calls to the WebDriver in python based on W3C WebDriver Protocol Print Page, as well as using selenium for calling Chrome DevTools Protocol Page.printToPDF in Python. All those methods are not robust for large pages with the errors as follows for just the same reason for the original upstream headless_chrome: the default timeout is 10 seconds, which is not friendly to large page PDF generation.

timeout: Timed out receiving message from renderer: 10.000

selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted because of page crash
from unknown error: cannot determine loading status
from tab crashed

At present, I have tested that Firefox does not support using headless_chrome for PDF generation, and the Safari browser even does not support the W3C WebDriver Protocol Print Page, let alone Chrome DevTools Protocol.

I’ve noticed that for some book, by using this backend, when click on some links that link inside the book, a html page that points to the original generated HTML storing path of the book will be opened, just as the issue mentioned here. I guess for those “internal” links inside the book, work should be done in the mdbook side for print.html referring here so that all the links linked “internally” would jump inside the generated print.html, as all the contents should already be on the print.html, there shouldn’t be any hyperlinks that jump to other html files in the book. By resolving in this way, the generated PDF would also jump internally instead of opening a browser that won’t connect to anything. I have already created a PR for this, hope it will get merged soon.

In addition, as I found that special characters such as : are very likely to appear in the title of the book, which will cause the generation of the related PDF file to fail, so the file name does not use the form of <book name>.pdf but output.pdf

Hope you enjoy it.

a silhouette of a person's head and shoulders, used as a default avatar

Plasma 5.24 tendrá soporte extendido (LTS)

Me complace compartir con vosotros que la siguiente versión del entorno de trabajo de la Comunidad KDE, Plasma 5.24 tendrá soporte extendido, lo cual significa que durante año y medio recibirá correcciones para convertirla en un lanzamiento que destacará por su estabilidad.

Plasma 5.24 tendrá soporte extendido (LTS)

Las versiones del escritorio Plasma suelen tener una vida de unos cuatro meses, durante los cuales se realizan 5 actualizaciones corrigiendo los errores.

Con este sistema se consigue tener un entorno de trabajo puntero y con pocos errores ya que las actualizaciones siguen un intervalo de una serie de Fibonacci (en otra entrada las explico en profundidad) pero la idea es solucionar los errores mayores las primeras semanas desde su lanzamiento.

Lanzada la beta de Plasma 5.24, pequeñas pero muchas mejoras para un gran escritorio

No obstante, existen usuarios que no pretenden tener lo más nuevo ya que prefieren (o necesitan) mucho más la estabilidad de su sistema por delante de nuevas funcionalidades. Para todos ellos se crean cada 18 meses las versiones Plasma LTS (acrónimo de Long Time Support,)

Pues bien, me complace anunciar que Plasma 5.24 tendrá soporte extendido, es decir, será LTS que es como se suelen denominar estar versiones, siguiendo la estela de Plasma 5.8, 5.12 o 5.18.

Muchas de las novedades de Plasma 5.24 se han ido desgranando en el blog de Nate Graham, e incluso ya ha sido presentado su nuevo fondo oficial, pero si queréis saber qué nos espera no dejéis de ver el anuncio oficial donde veréis el ingente número de novedades para Wayland, el lanzador de aplicaciones, Discover, Breeze, plasmoides, Krunner, etc.

Aprovecho para recordar que la versión final de Plasma 5.24 estará disponible para el público en general el 8 de febrero, que en la actualidad se encuentra en fase beta de corrección de errores, que si encuentras uno deberías reportarlo (como se explica en esta entrada del blog) y que ahora sabemos que se mantendrá sin importantes cambios hasta octubre de 2023.

a silhouette of a person's head and shoulders, used as a default avatar

Primeras contribuciones a Season of KDE 2022

Un año más se está celebrando una nueva edición de un programa cuyo objetivo es incorporar nuevos estudiantes al gran proyecto mundial que es KDE.  En otras palabras, me complace presentar las primeras contribuciones a Season of KDE 2022, que a lo largo de su más de una década de existencia se ha consolidado como una alternativa bastante fiable a otros programas como Google Summer of Code o Google Code In que consiguen incorporar sabia nueva al proyecto.

Primeras contribuciones a Season of KDE 2022

Uno de los objetivos del proyecto KDE es involucrar al mayor número de personas en él y para ello organiza todo tipo de acciones: eventos como Akademy, encuentros como los Sprints, blogs colaborativos como KDE Planet, participación en proyectos para estudiantes como el Google Code In o Google Summer of Code, y, por supuesto, mejorar el código de sus múltiples proyectos con sus programas de incubación.

Primeras contribuciones a Season of KDE 2022

No contento con esto, una vez al año organiza Season of KDE, es decir, su programa para involucrar a nuevos estudiantes en KDE. Una especie de Google Summer of Code pero para colaborar directamente en KDE y con la posibilidad de desarrollar proyectos no vinculados necesariamente con la programación, es decir, proyectos de promoción, documentación, diseño, etc.

Este año, en el Dot de KDE se ha redactado un artículo escrito por Johnny Jazeix, donde nos explica nueve de estos proyectos que se han iniciado el pasado mes de diciembre.

Para dar visibilidad al proyecto creo que es positivo darlos a conocerlos en el blog en perqueñas contribuciones. De esta forma tenemos a:

  • Ayush Singh que trabajará en una capa de Rust para KConfig. Con esta capa, y las existentes para qmetaobject y ki18n, será más fácil desarrollar aplicaciones KDE en Rust. Se puede encontrar más información en la lista de correo kde-devel. Ayush tendrá como mentor a Jos van den Oever.
  • Pablo Marcos añadirá un nuevo panel para mostrar notificaciones en Tokodon, el cliente Mastodon de KDE. Pablo tendrá como mentor a Carl Schwan.
  • Snehit Sah ayudará a empaquetar más aplicaciones KDE para Flathub. Algunos paquetes están casi listos para Flathub, pero les falta información o archivos de manifiesto, por lo que aún no están disponibles en la plataforma. El objetivo del proyecto es mejorar los paquetes existentes y publicar más aplicaciones en Flathub. Snehit tendrá como mentor a Timothée Ravier.

En próximas entradas más proyectos de este Season of KDE 2022.

a silhouette of a person's head and shoulders, used as a default avatar

#openSUSE Tumbleweed revisión de la semana 4 de 2022

Tumbleweed es una distribución «Rolling Release» de actualización contínua. Aquí puedes estar al tanto de las últimas novedades.

Tumbleweed

openSUSE Tumbleweed es la versión «rolling release» o de actualización continua de la distribución de GNU/Linux openSUSE.

Hagamos un repaso a las novedades que han llegado hasta los repositorios esta semana.

El anuncio original lo puedes leer en el blog de Dominique Leuenberger, publicado bajo licencia CC-by-sa, en este este enlace:

Nueva semana de actualizaciones sin sobresaltos, lo que da un total de 6 nuevas snapshots publicadas.

Como siempre, hagamos un repaso a las novedades más importantes:

  • systemd 249.9
  • Un montón de cambios en YaST (la mayoría cambios no visibles, y algunos cambios en la interfaz del instalador)
  • Mozilla Firefox 96.0.2
  • Samba 4.15.3 & 4.15.4
  • Virtualbox 6.1.32
  • Bash 5.1.16
  • Linux kernel 5.16.2
  • Cambio del gestor predeterminado de red de wicked a NetworkManager: hasta ahora, esto solo se hizo para instalaciones gráficas, pero recientemente NetworkManager también es el predeterminado en instalaciones solo de servidor/consola. Con nmtui es bastante cómodo configurarlo. Los actualizadores (todavía) no se migran a NetworkManager, pero permanecen con wicked. Por supuesto, wicked todavía está disponible en los repositorios.

Y para próximas actualizaciones, ya se está trabajando entre otras muchas en cosas como:

  • Linux kernel 5.16.3
  • KDE Plasma 5.24
  • Ruby 3.1 será el intérprete predeterminado de Ruby. Y Ruby 2.7 y 3.0 desaparecerán.
  • Python 3.6 será eliminado
  • Python 3.10 será el intérprete de Python predeterminado
  • GCC 12 ya se ha ido introduciendo, preparándose para cuando se publique definitivamente, lo que implicará la recompilación de TODOS los paquetes de la distro, como es normal y habitual.

Si quieres estar a la última con software actualizado y probado utiliza openSUSE Tumbleweed la opción rolling release de la distribución de GNU/Linux openSUSE.

Mantente actualizado y ya sabes: Have a lot of fun!!

Enlaces de interés

Geeko_ascii

——————————–

a silhouette of a person's head and shoulders, used as a default avatar

Cara mengubah hostname tanpa restart

Bismillah,

Pada kesempatan kali ini saya akan menjelaskan cara merubah hostname tanpa perlu merestart komputer. Langkah ini sangat sederhana dan mudah, tanpa merubah beberapa parameter yang ada di dalam file (misalnya hostname dan host yang ada di dalam folder /etc/). Berikut langkah-langkahnya.

  1. Ketik hostname untuk mengetahui nama dari hostname yang sekarang.
  2. Kemudian ketik hostnamectl set-hostname <nama_hostname_baru>.
  3. Untuk memastikan hasilnya, ketik kembali hostname.

Perlu diketahui, hostnamectl hanya tersedia pada distro GNU/Linux yang menggunakan systemd.

Semoga tutorial yang sangat singkat ini bisa membantu pembaca.

a silhouette of a person's head and shoulders, used as a default avatar

KTorrent friert ein

Die Tage musste ich leider Feststellen, dass mein KTorrent beim Download der aktuellen Pwned-Passwords-List von Have I been Pwned komplett einfror. Eine Suche nach dem Problem liefert nicht viele Treffer, aber fördert einen 5 Jahre alten Forenbeitrag zutage, der eine Lösung für das Problem liefert. Den Firefox einmal kurz zu schließen taut KTorrent wieder auf.

Das Problem scheint nur aufzutreten, wenn KTorrent aus dem Firefox startet. Das passiert wenn man Firefox einen Link auf eine Torrent-Datei mit KTorrent öffnen lässt, dieser aber noch nicht lief. Dadurch gibt zwei einfache Wege das Problem zu umgehen und die obige Lösung dann gar nicht erst zu brauchen:

  1. Ist KTorrent bereits gestartet bevor Firefox die Datei übergibt, so scheint das Problem nicht aufzutreten.
  2. Kopiert man die URL der Torrent-Datei in die Zwischenablage, kann man diese auch aus KTorrent direkt mit Datei - Adresse öffnen bzw. Strg+P öffnen und umgeht die Interaktion zwischen Firefox und KTorrent komplett.
the avatar of Nathan Wolf

YouTube Shorts | Blathering

YouTube Shorts are the response of the Video Giant to the Tik Tok. They are 1 minute in length or less and have to be in portrait format to be a “short.” I don’t have nor do I want a Tik Tok so this sort of intrigues me, but I do wonder if it will […]
a silhouette of a person's head and shoulders, used as a default avatar

Sardi, una gran colección de iconos personalizables linux

Hace tiempo que tengo esta entrada en el congelador y ya va siendo hora de que salga a la luz. Hoy tengo el gusto de presentaros Sardi, una gran colección de iconos coloridos linux que destaca por su variedad, flexibilidad y su gran número de iconos.

Sardi, una gran colección de iconos personalizables linux

Para el escritorio Plasma de la Comunidad KDE hay cientos de temas de todo tipo disponibles para los usuarios: iconos, cursores, emoticonos, etc, Y como me gusta cambiar de vez en cuando, en el blog le he dedicado muchos artículos a cada uno de los packs.

En esta ocasión, os presento una colección de iconos que, aunque aparece alguna variante en la Store de KDE, tienen su completa e increíble página web.

Se trata de Sardi, que no es ni más ni menos que una espectacular colección de iconos que destaca por ser flexible, completa, colorida pero sobria y, sobre todo, editable ya que todos los iconos están en formato svg, lo cual significa que podremos adaptarla a nuestras necesidades o gustos.

Sardi, una gran colección de iconos personalizables linux
Sardi básico

De hecho, en su página web hay una buena lista de tutoriales de como personalizar los iconos Sardi a nuestro gusto.

Para ello Sardi nos ofrece de 6 colecciones básicas de iconos como son:

  1. Sardi
  2. Sardi Flat
  3. Sardi Orb
  4. Sardi Flexible
  5. Sardi Ghost Flexible
  6. Sardi Mono

A partir de los cuales podemos adaptar, como es el caso de como pasar de Sardi Flat Colora a Sardi Ghost Flexible Spiderman.

Cómo instalar los packs de iconos Sardi

La instalación es sencilla:

  • Descarga y descomprime el pack Sardi que desees (si es necesario).
  • Crea una carpeta con el nombre de «iconos» en su carpeta de inicio ~/.local/share para KDE/PLASMA.
  • Mueve la carpta de iconos descomprimida en la carpeta ~/.local/share
  • Ahora ejecuta las Preferencias del Sistema, busca la sección de iconos y seleccionala desde ahí
Sardi, una gran colección de iconos personalizables linux
Sardi Flexile Froly

Más información: Sardi

a silhouette of a person's head and shoulders, used as a default avatar

openSUSE Tumbleweed – Review of the week 2022/04

Dear Tumbleweed users and hackers,

The week has passed without any major hiccups, which also shows in the number of Tumbleweed snapshots released during this week. Not the highest count ever achieved, but we are at a solid 6 snapshots (0121.0126), with the next one already in QA.

The major changes in those 6 snapshots were:

  • systemd 249.9
  • Lots of YaST changes (mostly under the hood, some UI changes in the installer)
  • Mozilla Firefox 96.0.2
  • Samba 4.15.3 & 4.15.4, including a rather large reorganisation of the library packages (i.e. multiple libs combinaed into samba-client-libs
  • Virtualbox 6.1.32
  • Bash 5.1.16
  • Linux kernel 5.16.2
  • Switch the default Network interface manager from wicked to NetworkManager: so far this was only done for graphical installations, but newly NetworkManager is also the default on server/console-only installs. With nmtui it is rather comfortable to configure it. Upgraders do not (yet) get migrated to NetworkManager, but stay on their working wicked config. Of course wicked is still available in the repos

Thins being worked on to reach you in the future include:

  • Linux kernel 5.16.3
  • Polkit with fix for pwnkit (Snapshot 0127(: the fix is also already in the Tumbleweed update channel. Make sure to get this update soon
  • Ruby 3.1, incl switch of default Ruby version to 3.1
  • Removal of Ruby 2.7 and Ruby 3.0 (together with the switch to Ruby 3.1)
  • KDE Plasma 5.24 (currently beta is staged and being tested)
  • Python 3.6 interpreter will be removed (We have roughly 100 python36-FOO packages left)
  • Python 3.10 as the distro default interpreter (a bit down the line)
  • GCC 12 introduction has started to be as ready as possible for when the upstream release happens.

a silhouette of a person's head and shoulders, used as a default avatar

Propuestas constitucionales para Chile en la era de la información

Cambios en el gobierno de Chile traen la oportunidad para que el pueblo de Chile haga oír sus propuestas en cuanto a derechos y libertades digitales

Activistas chilenos han presentado tres propuestas constitucionales relacionadas con el software libre y la libertad del usuario, pero para que estas propuestas se sometan al debate constitucional, deben conseguir un número de firmas hasta el 1 de febrero de 2022.

Así que desde este pequeño blog, quiero dar difusión y expandir esta gran propuesta para que si resides en Chile, las tomes en cuenta y las apoyes si crees (como yo) que deben ser aprobadas.

A continuació reproduzco un texto de Félix Freeman que se ha publicado en la web de la FSF, en el que explica qué propuestas están desarrollando.

Chile vive un momento histórico, por primera vez está redactando una constitución con constituyentes elegidos de forma democrática, paritaria y con participación de los pueblos originarios. 154 personas están encargadas de la redacción de la nueva carta fundamental del país, quienes han dispuesto un mecanismo de participación popular en base a la recolección de apoyos: 15.000 firmas son requeridas para elevar propuestas ciudadanas al debate constitucional de forma directa.

La oportunidad de conseguir un cambio sustantivo y a largo plazo en pro de los derechos digitales y la libertad del software así como otras obras intelectuales es única en nuestra historia, y podría no repetirse durante el transcurso de nuestra vida. Es por esto que 4 comunidades históricamente relacionadas al uso y la difusión del software libre en Chile nos reunimos a redactar 3 de estas propuestas, las cuales son:

  1. Acceso al conocimiento: Se promueve la igualdad de acceso al conocimiento garantizando el acceso universal a las tecnologías de la información y la liberación del conocimiento generado con los recursos de todos los chilenos. Iniciativa 46.114
  2. Derecho a la privacidad en internet: Se reconoce y garantiza el derecho a la privacidad – esencial para la protección de la autonomía y dignidad humana – como base para las libertades de consciencia, expresión y asociación. Iniciativa 43.014
  3. Soberanía tecnológica y digital: Se reconoce y defiende nuestra soberanía nacional en el ciberespacio. El desarrollo, autonomía y protección de nuestros territorios, cuerpos, datos e interacción virtual deben ser considerados parte estructural y estratégica de nuestra soberanía. Iniciativa 46.138

Estas propuestas constitucionales explican principios de la nación, derechos de los ciudadanos y deberes del Estado en torno a estos. La inclusión de los articulados permitirán y provocarán la creación de leyes que defiendan nuestras libertades y derechos de forma efectiva, por lo que no son el fin del camino en pro de las libertades intelectuales y los derechos digitales, sino solo el comienzo.

Puedes ver y apoyar nuestras propuestas ingresando a https://EraDeLaInformacion.cl ; Además encontrarás material de difusión e incluso software libre para hacer seguimiento estas. Puedes monitorear el progreso de nuestras, y otras, iniciativas en en https://votos.eradelainformacion.cl

No dejes pasar esta oportunidad histórica, si eres Chileno puedes apoyar las iniciativas número 46114, 46138 y 43014 en la plataforma https://iniciativas.chileconvencion.cl con tu «clave única» o «serie de carnet.» Si eres de cualquier nacionalidad puedes apoyarnos difundiendo la palabra por todo Internet.


Así que si resides en Chile espero que después de revisar estas propuestas las consideres adecuadas y firmes por ellas. Para que sea un ejemplo a otros países.

Enlaces de interés