[PYTHON] Sortie PDF avec WeasyPrint

introduction

Personnellement, je connais wkhtmltopdf en tant que bibliothèque pour la sortie de PDF. Cependant, il m'est arrivé de trouver une bibliothèque appelée WeasyPrint, alors j'ai essayé.

Installation

$ pip install weasyprint

Exemple d'utilisation

Convertissez le HTML suivant en PDF. Comme c'est un gros problème, il peut être affiché dans deux colonnes comme un document PDF.

quanon/magica.html

Le texte est [Wikipedia »Magical Girl Madoka ☆ Magica](https://ja.wikipedia.org/wiki/%E9%AD%94%E6%B3%95%E5%B0%91%E5%A5%B3" Extrait de% E3% 81% BE% E3% 81% A9% E3% 81% 8B% E2% 98% 86% E3% 83% 9E% E3% 82% AE% E3% 82% AB).

01.png

Nous avons également un CSS spécifique au PDF appelé pdf.css.

pdf.css


@page {
  margin: 8.0rem 2.0rem;
  font-family: YuMincho, "Hiragino Mincho ProN", serif;

  @top-center {
    content: "Magical Girl Madoka ☆ Magica";
    vertical-align: bottom;
    font-size: 1.2rem;
    border-bottom: 0.1rem solid;
    margin-bottom: 1.2rem;
  }

  @bottom-right {
    content: counter(page) " / " counter(pages);
  }
}

Sortez le PDF avec la commande suivante.

$ weasyprint magica.html magica.pdf -s pdf.css

C'était: tada:

Voici le PDF de sortie.

スクリーンショット 2017-09-11 22.46.36.png

Il est facile à utiliser et contient beaucoup de documentation, j'aimerais donc continuer à l'utiliser à l'avenir: sparkling_heart:

Bonus: compatible Docker

Dockerfile


FROM python:3.6.2

RUN apt-get update \
 && apt-get install -y \
      python-lxml \
      fontconfig \
      libcairo2 \
      libpango1.0-0 \
      libgdk-pixbuf2.0-0 \
      libffi-dev \
      shared-mime-info \
      unzip \
 && apt-get autoremove \
 && apt-get clean

WORKDIR /opt

ENV WEASYPRINT_VERSION 0.40
RUN pip install weasyprint==$WEASYPRINT_VERSION

ADD https://noto-website.storage.googleapis.com/pkgs/NotoSerifCJKjp-hinted.zip .
RUN unzip -d noto NotoSerifCJKjp-hinted.zip \
 && mkdir -p /usr/share/fonts/opentype \
 && mv -fv noto /usr/share/fonts/opentype/noto \
 && rm -rfv NotoSerifCJKjp-hinted.zip \
 && fc-cache -fv

docker-compose.yml


version: '3.3'
services:
  weasyprint:
    build: .
    volumes:
      - .:/opt/data-volume
    working_dir: /opt/data-volume
    entrypoint:
      - weasyprint
    command:
      - -h
$ docker-compose run weasyprint magica.html magica.pdf -s pdf.css

référence

WeasyPrint

CSS

Recommended Posts

Sortie PDF avec WeasyPrint
Sortie PDF avec Django
Sortie PDF en utilisant l'extension Latex avec Sphinx
Sortie Markdown avec Django
Essayez la sortie Python avec Haxe 3.2
Tester la sortie standard avec Pytest
Intégrez des fichiers PDF avec Python
Comment sortir un document au format pdf avec Sphinx
Numéroter les chapitres et les sections lors de la sortie au format PDF (rst2pdf) avec Sphinx
Sortie vers un fichier csv avec Python
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
Graphique d'appel de sortie avec PyCallGraph
[Note] Sortie Hello world avec python
Sortie du journal de test unitaire avec python
Convertir un PDF en image avec ImageMagick
Essayez de produire de l'audio avec M5 STACK
Graphique de sortie networkX avec graphviz (PyGraphviz)
Sortir les caractères de couleur en joli avec python
Convertir de PDF en CSV avec pdfplumber
Extraire du texte japonais d'un PDF avec PDFMiner
Simplifiez le déverrouillage du mot de passe PDF avec python + bat
UnicodeEncodeError lutte avec la sortie standard de python3
Convertir des fichiers PDF en fichiers PNG avec GIMP
Sortie de cellule riche avec Jupyter Notebook (IPython)