blog/content/tips/latex-adblock-fr.md

98 lines
6.9 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
Title: Bloquer la publicité dans les PDFs à laide de LaTeX
Date: 2019-04-23 09:00
Modified: 2019-04-24 00:48
Author: Fabrice
Lang: fr
Category: astuces
Tags: LaTeX, inkscape, ads, git
Slug: latex-ad-block
og_image: ../images/thumb_stop-pub.png
twitter_image: ../images/thumb_stop-pub.png
Header_Cover: ../images/covers/velov.jpg
Summary: Retirer les publicités dun pdf à imprimer na jamais été aussi facile. Un script est disponible à la fin du billet.
---
Jéprouve un sentiment de frustration envers les publicités.
Comme, jimagine, beaucoup dentre vous, jutilise un bloqueur de publicité pour surfer sur le net, mais il y a un genre de publicité qui me hérisse le poil au plus haut point: la publicité sur les billets à imprimer.
Non seulement ça empoisonne nos yeux, mais en plus ça nécessite de lencre pour limprimer!
Je suis conscient que lon peut simplement ouvrir le code à scanner sur nos téléphones de nos jours, mais même, nest-ce pas plus agréable de simplement se débarrasser des publicités directement?
Une première solution évident serait dimporter le fichier pdf dans nimporte quel [logiciel dédition dimages matricielles](https://www.gimp.org/) et utiliser un outil de détourage rectangulaire quelconque pour en finir avec la publicité dérangeante.
Cependant, cela produit un nouveau pdf (ou une image en fait) qui ne contient plus aucune information textuelle, et qui (suivant la résolution) grossit sensiblement en poids.
Pour éviter ça, il suffit dès lors dutiliser un logiciel de dessin vectoriel, par exemple ouvrir le fichier pdf dans [inkscape](https://inkscape.org/) et supprimer dun seul coup limage correspondant à la publicité.
Si cela est plus élégant, cette approche nest toujours pas parfaite.
En effet, si vous ne possédez pas les polices sur votre ordinateur, cela *casse* laffichage des fonts en basculant sur les polices du système.
De plus, certaines polices (comme
(Comme la police “_Excellence in Motion_” dAir France) sont propriétaires et un peu velues à obtenir facilement par des moyens légaux.
Mais inkscape peut toujours nous servir pour supprimer ces publicités dérangeantes!
En effet, parmi les informations que ce dernier fournit, il donne la position et les dimensions de ces publicités, comme illustré ci-dessous (cliquez pour agrandir):
[![Inkscape pour repérer les dimensions](/examples/inkscape-adblock.png)](/examples/inkscape-adblock.png)
**Explications**:
Après avoir ouvert le pdf, on commence par sélectionner la publicité (<span style="color:#8b0074">en violet</span>), il se peut quon ait besoin de dégrouper les objets (ctrl+maj+g).
Ensuite, on fixe les dimensions dans notre unité de mesure favorite, par exemple en cm (<span style="color:#0000ff">en bleu</span>), et finalement noter les dimensions du cadre de la publicité en question (<span style="color:#ff0000">en rouge</span>).
Ensuite, il nous suffit dutiliser LaTeX pour recouvrir la publicité dun voile blanc (ou nimporte quelle couleur de fond, je laisse au lecteur le soin de découvrir comment LaTeX permet dimporter nimporte quellle couleur RGB à laide du paquet [xcolor](https://www.ctan.org/pkg/xcolor)).
Jai déjà utilisé le paquet [wallpaper](https://www.ctan.org/pkg/wallpaper) dans un [autre billet](/latex-letterhead.html), mais celui-ci souffre de quelques limitations: il ne permet pas dimporter plusieurs pages (comme sur un billet aller-retour), et tikz interagit mal avec la géométrie de la page induite par wallpaper (ne me demandez pas pourquoi).
Je me suis donc inspiré de cette [réponse sur stackexchange](https://tex.stackexchange.com/questions/12838/can-i-add-tikzpictures-to-pages-included-with-pdfpages) pour arriver à mes fins.
Pour faire simple, on utilise le package [pdfpages](https://ctan.org/pkg/pdfpages) avec ses options `pages={-}` pour inclure toutes les pages, et `pagecommand` pour inclure rectangle blanc avec les bons positionnements et dimensions `X`, `Y`, `L`, `H`.
Cela donne le fichier `.tex` suivant, qui peut simplement être compilé à laide de votre moteur latex favoris (par exemple `pdflatex fichier.tex` deux fois).
```tex
\documentclass[a4paper]{article}
% Tikz et pdfpages
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pdfpages}
% Éviter la numérotation des pages
\pagestyle{empty}
\begin{document}
\includepdf[pages={-},% inclure toutes les pages
pagecommand={% est appelé à chaque page
\begin{tikzpicture}[remember picture,overlay]
\draw[color=white,fill=white] ($(current page.north west) +%
(X, -Y)$) rectangle ++ (L, -H);% position et dimensions
\end{tikzpicture}%
}]%
{original fichier.pdf}
\end{document}
```
**Remarque:** vous avez sans doute remarqué le signe moins devant `Y` et `H`. Cela est dû à lorientation des repères qui nest pas la même entre tikz et inkscape (et gimp).
Voici quelques exemples de dimensions que vous pouvez copier-coller (je laisse ça là pour moi):
* Rhônexpress:
```tex
… + (1.5cm, -14.65cm)$) rectangle ++ (18cm, -9cm);
```
* Les billets pliables dAir France/KLM
```tex
… + (11cm, -18cm)$) rectangle ++ (9cm, -9cm);
```
Vous avez sûrement remarqué que ce ne sont pas les mêmes dimensions que mont donné inkscape, cest à cause des billets Air France qui possèdent parfois un encart publicitaire plus grand. Qui peut le plus peut le moins.
Mais de toute manière, si vous souhaitez utiliser votre téléphone, ces compagnies fournissent aussi une image png minimale sans publicités!
Comme je nachète pas des billets davion tous les jours, je nai pas ressenti le besoin de scripter tout ça, en plus je nai pas assez dexemples de tels fichiers pour faire une base de donnée suffisamment intéressante.
Néanmoins, écrire ce billet a été loccasion de me dire que ça pourrait être une bonne idée pour récupérer collaborativement cette base de donnée…
Le script en question est donc prêt à être [cloné](git-tricks.html) [par ici](https://git.epheme.re/fmouhart/hidepdfads).
Comme il sagit dun dépôt privé auto-hébergé, si vous souhaitez contribuer, je vous invite à faire une *pull request* sur ce
[dépôt github](https://github.com/Chouhartem/hidepdfads) ou menvoyer un courriel à ladresse <img style="height:2em" src="/images/mel.png" alt="courriel"/>. Dans tous les cas, nhésitez pas à me contracter si vous avez des remarques, des commentaires ou des questions.
<center>
![xkcd 1319 Randall Munroe](https://imgs.xkcd.com/comics/automation.png)]
[XKCD #1319](https://xkcd.com/1319/) by Randall Munroe.
</center>
## Voir aussi
* [pdf-adblock](https://github.com/anthony-morel/pdf-adblock) on github.
Un script qui repose sur des heuristiques (comme le fait quune publicité aura de grandes chances dêtre une image) pour supprimer automatiquement les pages de publicités dun PDF (par exemple celui dun magazine).