我正在开发一个angular网站,它必须创建一个pdf,我使用的是PdfMake-wrapper (https://github.com/Lugriz/pdfmake-wrapper)。
这是我的函数:
async pdf() {
PdfMakeWrapper.setFonts(pdfFonts);
const pdf = new PdfMakeWrapper();
pdf.pageSize('A4');
pdf.pageMargins([40, 60, 40, 60]);
pdf.pageOrientation('portrait');
pdf.header(this.bando.name);
pdf.add('Descrizione Bando');
pdf.add(this.bando.desc);
pdf.create().download();
}问题是"this.bando.desc“是html文本(它包含表、div ecc..)我想把我的pdf格式化为html格式。我该怎么做呢?
发布于 2020-03-12 23:54:06
我建议不要直接创建PDF,因为它需要许多与HTML不同的格式。最好创建一个HTML文档,然后将其转换为PDF。我在我最近的一个项目(打印mtg卡片组)中使用了它,它工作得非常好:
import pdfkit
from jinja2 import Template, Environment, FileSystemLoader
class Html(object):
def __init__(self):
self.template: Optional[Template] = None
def load_template(self):
template_loader = FileSystemLoader(searchpath="./")
template_env = Environment(loader=template_loader)
self.template = template_env.get_template("template.html")
def write_html(self, deck_name: str, data: list):
with io.open("index.html", mode="w", encoding="utf-8") as fh:
if self.template:
fh.write(self.template.render(deck_name=deck_name, rows=data))
class Pdf(object):
def __init__(self, deck_name: str):
self.deck_name = deck_name
self.options = {
'margin-left': '5mm',
'margin-right': '5mm',
'margin-top': '5mm',
'margin-bottom': '5mm',
}
def create(self):
# create pdf
pdfkit.from_file('index.html', f'{self.deck_name}.pdf', options=self.options)
html = Html()
html.load_template()
html.write_html(deck_name=deck_name, data=rows)
pdf = Pdf(deck_name=deck_name)
pdf.create()我猜如果没有任何更改,代码将无法运行,因为我只是试图将其精简为基本功能,但您可以了解它是如何工作的。
它使用Jinja2作为模板引擎,便于格式化,然后使用pdfkit模块将html导出为wkhtmltopdf格式的pdf,该格式可以从https://wkhtmltopdf.org/下载
https://stackoverflow.com/questions/58657256
复制相似问题