html - ITextsharp Html2Pdf CSS 问题
问题描述
我是 iTextSharp 的新手,目前正在使用 Html2pdf(iTextSharp 扩展)将 HTML 转换为 PDF。我能够生成 pdf,但无法在每一页上为 pdf 添加徽标。
图像来了,但我无法更改图像的宽度。
我用于 pdf 徽标的 CSS 如下:
@page {
@top-left {
content:"test ";
background:url(../images/template/test_logo_pdf.jpg) no-repeat 0px 0px;
border:1px solid red;
background-color: #cccccc;
margin-top:10px;
}
@top-right {
content: flow(header);
}
@bottom-right {
content: "Page " counter(page) " of " counter(pages);
font: 8pt Arial, sans-serif;
}
@bottom-left {
content: string(repname);
font: 8pt Arial, sans-serif;
}
}
解决方案
控制添加到页边距框中的图像的尺寸确实并不容易。我可以建议的一种可能的方法是将图像添加为内容(而不是背景图像)并使用自定义标签工作者,这将根据需要为页边距框子图像指定高度和宽度:
HTML:
@top-left {
content: url(../images/template/test_logo_pdf.jpg);
border:1px solid red;
background-color: #cccccc;
margin-top:10px;
}
这是 Java 代码,但 .NET 版本具有完全相同的 API,只是代码样式不同(方法名称开头的大写字母等):
private static class PageMarginBoxImagesTagWorkerFactory extends DefaultTagWorkerFactory {
@Override
public ITagWorker getCustomTagWorker(IElementNode tag, ProcessorContext context) {
if (tag.name().equals(PageMarginBoxContextNode.PAGE_MARGIN_BOX_TAG)) {
return new PageMarginBoxImagesWorker(tag, context);
}
return super.getCustomTagWorker(tag, context);
}
}
private static class PageMarginBoxImagesWorker extends PageMarginBoxWorker {
public PageMarginBoxImagesWorker(IElementNode element, ProcessorContext context) {
super(element, context);
}
@Override
public boolean processTagChild(ITagWorker childTagWorker, ProcessorContext context) {
if (childTagWorker.getElementResult() instanceof Image) {
// Or set fixed dimensions via setWidth/setHeight
((Image) childTagWorker.getElementResult()).setAutoScale(true);
}
return super.processTagChild(childTagWorker, context);
}
}
并通过在以下位置指定 PageMarginBoxImagesTagWorkerFactory 来使用它ConverterProperties
:
HtmlConverter.convertToPdf(htmlSrc, pdfDocument,
new ConverterProperties()
.setTagWorkerFactory(new PageMarginBoxImagesTagWorkerFactory()));
推荐阅读
- python - 数据表 fread 函数中的 index_col 参数
- r - 不包括重复出现值 R 的 sample() 函数
- r - 具有分组的数据表中多行和多列的中位数
- c# - Visual Studio 2017 - ASP.NET 对 .cshtml 的更改未反映
- php - Laravel 5.8 自定义规则 - 返回 False 很慢
- angular - 如何在不重新编译 Angular 应用程序的情况下刷新 JSON 文件?
- vb.net - 如何为标签页窗口窗体设置标签索引
- azure - 如何删除 Azure Cosmos DB 中的多个文档
- javascript - 谷歌标签管理器不向分析发送电子商务数据(标准电子商务)
- javascript - 向 PWABuilder Cache-first service worker 添加“更新可用,请刷新”提示