Weasyprint как исправить html/css, которые приходят из электронной почты
Weasyprint генерирует pdf-файлы из электронных писем. Иногда письма приходят с некоторыми html/css в них. Я привожу пример с pdf от paypal, в котором все pdf в html/css информации. Или почта Microsoft по умолчанию также использует некоторые html при отправке писем.
Возможно ли добавить некоторые вещи по умолчанию, чтобы исправить html/css правильным образом?
Мой код:
filename = f'{uuid.uuid4()}.pdf'
data = {"body": content}
context = Context(data)
template = Template('{{ body|linebreaks|safe }}')
html_string = template.render(context)
html = HTML(string=html_string)
pdf = html.write_pdf()
Некоторые примеры из электронной почты paypal, которые приходят
<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0,minimum- scale=1.0,maximum-scale=1.0,width=device-width,height=device- height,target-densitydpi=device-dpi,user-scalable=no" />
<title>Confirm your new email address</title>
<style type="text/css">
/**
* PayPal Fonts
*/
@font-face {
font-family: PayPal-Sans;
font-style: normal;
font-weight: 400;
src: local('PayPalSansSmall-Regular'), url('https://www.paypalobjects.com/ui- web/paypal-sans-small/1-0-0/PayPalSansSmall-Regular.eot');
/* IE9 Compat Modes */
src: local('PayPalSansSmall-Regular'), url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/ PayPalSansSmall-Regular.woff2') format('woff2'),
/* Moderner Browsers */ url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/ PayPalSansSmall-Regular.woff') format('woff'),
/* Modern Browsers */ url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/ PayPalSansSmall-Regular.svg#69ac2c9fc1e0803e59e06e93859bed03') format('svg');
/* Legacy iOS */
/* Fallback font for - MS Outlook older versions (2007,13, 16)*/
mso-font-alt: 'Calibri';
}
В вашем примере заголовка есть неработающие записи, поэтому если вы исправите или измените их, они должны работать
С учетом вашего примера и без weasyprint страница может выглядеть как показано выше, но обратите внимание, что исправление вашего кода зависит от исправления заголовков, удалив все пробелы в url.
<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="initial-scale=1.0,minimum- scale=1.0,maximum-scale=1.0,width=device-width,height=device- height,target-densitydpi=device-dpi,user-scalable=no" />
<title>Confirm your new email address</title>
<style type="text/css">
/**
* PayPal Fonts
*/
@font-face {
font-family: PayPal-Sans;
font-style: normal;
font-weight: 400;
src: local('PayPalSansSmall-Regular'), url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/PayPalSansSmall-Regular.eot');
/* IE9 Compat Modes */
src: local('PayPalSansSmall-Regular'), url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/PayPalSansSmall-Regular.woff2') format('woff2'),
/* Moderner Browsers */ url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/ PayPalSansSmall-Regular.woff') format('woff'),
/* Modern Browsers */ url('https://www.paypalobjects.com/ui-web/paypal-sans-small/1-0-0/PayPalSansSmall-Regular.svg#69ac2c9fc1e0803e59e06e93859bed03') format('svg');
/* Legacy iOS */
/* Fallback font for - MS Outlook older versions (2007,13, 16)*/
mso-font-alt: 'Calibri';
}
body {
font-family: PayPal-Sans;
font-style: normal;
font-weight: 400;
}
h3 {
font-family: PayPal-Sans;
font-style: italic;
font-weight: 700;
}
</style>
<body>
<h3>Dear World</h3>
typical bodytext
</body></html>
Файл: C:\Users\WDAGUtilityAccount\Desktop\Confirm your new email address.pdf PDF Producer: Skia/PDF m99 Версия PDF: 1.4 Оптимизация PDF: Tagged PDF Шрифты: ArialMT (TrueType (CID); Identity-H; встроенный) PayPalSansSmall-Regular (TrueType (CID); Identity-H; embedded)

