Impossible de changer la police via une publication avec HTMLtoPDFTool

Bonjour, j’essaie en vain de modifier la police (avec autre chose que sans-serif) résultant de la fonction

HTMLToPDFTool.toPDF(content);

Lorsque je modifie la police dans mon html avec plusieurs polices, le seul changement que j’arrive à produire est sur “sans-serif”, tout les autres changement de police n’ont aucun impact. Les autres règles css ont pourtant l’air de fonctionner normalement.

<style> 
span { font-family: sans-serif; } 
</style>

image

<style> span { font-family: serif; } </style> 
ou 
<style> span { font-family: Times New Roman; } </style> 
ou
<style> span {} </style>

image

Voilà un exemple de mon html:

<style> 
span { font-family: sans-serif; } 
</style>
<h3 style='font-size:15px;'><span style="color:#E2000A;"><strong>{Part}</strong>
  <img width="62" src="data:image/png;base64,{Image}" alt="image" style="float: right; 
  "></span>
  <p>&nbsp;</p>
<hr size=1 width=100% color=#FF2D00></h3>

Bonjour Paul-Alexandre,

Le plus simple est sans doute de rajouter un tag <link> dans le <head> de ton template html, par exemple avec la police “Noto Serif Ethiopic”

<head>
	<meta charset="UTF-8" />
	<link href="https://fonts.googleapis.com/css2?family=Noto+Serif+Ethiopic&display=swap" rel="stylesheet">
	<style type="text/css">
	  body {
	    padding: 15px;
	    font-size: 11px;
		font-family: 'Noto Serif Ethiopic', serif;     
	  }
	</style>
</head>

Si cette méthode ne fonctionne pas, tu peux toujours utiliser la librairie sous-jacente au helper HTMLToPDFTool à savoir openhtmltopdf. Il faudra ajouter par code la ressource qui stocke la police à utiliser.
Il y a un sujet à ce propos sur stackoverflow ici : java - OpenHTMLToPDF: Embed a custom font into PDF created out of HTML - Stack Overflow

Bonjour,

La première méthode ne fonctionne hélas pas. Je vais donc essayer la seconde méthode. J’imagine qu’il n’est pas possible de récupérer le code source du wrapper HTMLToPDFTool?

Voici (simplifiée) la partie “conversion” via la lib OpenHtmlToPDF que fait le wrapper HTMLToPDFTool:

import org.jsoup.Jsoup;
import org.jsoup.helper.W3CDom;
import org.w3c.dom.Document;
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;

(...)

try (ByteArrayOutputStream os = new ByteArrayOutputStream())
{
	Document doc = new W3CDom().fromJsoup(Jsoup.parse(html));
	new PdfRendererBuilder().toStream(os).withUri(baseURL).withW3cDocument(doc, null).run();
	return os.toByteArray();
}

Dans les faits il faut utiliser la méthode useFont dans PdfRendererBuilder et ajouter le fichier .tff (ou autre) de la police souhaitée comme Resource de l’objet qui porte la publication

Ça ressemble donc à quelque chose comme ça :

builder.useFont(getResource("MY_FONT").getDocument(g).getFile(), "my-font");

Et dans le template :

<style type="text/css">
@font-face {
	font-family: 'my-font';
	font-style: normal;
	font-weight: 400;
}
body {
	font-family:'my-font', serif;
}
</style>
1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.