Java 发票生成-thymeleaf、spring、itextpdf

Java 发票生成-thymeleaf、spring、itextpdf,java,spring,itext,thymeleaf,Java,Spring,Itext,Thymeleaf,我必须创建将输出发票PDF文件的流程。我们找不到比创建html文件(使用thymeleaf)并使用某种助手(例如itextpdf)将其格式化为PDF文件更好的解决方案。但我鼓励一些问题,因为我不能包括css文件和图像。有没有更好的(免费)解决方案?或者你可以帮我?我将包括我的java代码。谢谢大家! @Service public class InvoiceTemplateHelper { private final TemplateEngine templateEngine; private

我必须创建将输出发票PDF文件的流程。我们找不到比创建html文件(使用thymeleaf)并使用某种助手(例如itextpdf)将其格式化为PDF文件更好的解决方案。但我鼓励一些问题,因为我不能包括css文件和图像。有没有更好的(免费)解决方案?或者你可以帮我?我将包括我的java代码。谢谢大家!

@Service
public class InvoiceTemplateHelper {

private final TemplateEngine templateEngine;
private ServletContext ctx;
private HttpServletRequest request;

@Autowired
public InvoiceTemplateHelper(TemplateEngine templateEngine, ServletContext ctx, HttpServletRequest request) {
    this.templateEngine = templateEngine;
    this.ctx = ctx;
    this.request = request;
}

public String getHTMLInvoice() throws InvoiceCreationException {
    WebContext context = new WebContext(request, null, ctx);
    context.setVariable("invoiceTitle", "INVOICE/010101");

    String body = templateEngine.process("invoice", context);
    convertToPDF(body);
    return body;
}

public void convertToPDF(String body) throws InvoiceCreationException {
    try{
        Document document = new Document(PageSize.A4);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("invoice.pdf"));
        document.open();
        InputStream is = new ByteArrayInputStream(body.getBytes());
        XMLWorkerHelper.getInstance().parseXHtml(writer, document, is);
        document.close();
    } catch (IOException e){
        //TODO MESSAGE FOR EXCEPTION
        throw new InvoiceCreationException();
    } catch ( DocumentException e){
        //TODO MESSAGE FOR EXCEPTION
        throw new InvoiceCreationException();
    }
}
}
和带有示例样式和数据的虚拟html文件

.clearfix:after{
内容:“;
显示:表格;
明确:两者皆有;
}
a{
颜色:#5D6975;
文字装饰:下划线;
}
身体{
位置:相对位置;
宽度:21cm;
身高:29.7厘米;
保证金:0自动;
颜色:#001028;
背景:#FFFFFF;
字体系列:Arial,无衬线;
字体大小:12px;
字体系列:Arial;
}
标题{
填充:10px0;
边缘底部:30px;
}
#标志{
文本对齐:居中;
边缘底部:10px;
}
#标志img{
宽度:90px;
}
h1{
边框顶部:1px实心#5D6975;
边框底部:1px实心#5D6975;
颜色:#5D6975;
字号:2.4em;
线高:1.4em;
字体大小:正常;
文本对齐:居中;
利润率:0.20px0;
背景:url(../images/dimension.png);
}
#计划{
浮动:左;
}
#项目跨度{
颜色:#5D6975;
文本对齐:右对齐;
宽度:52px;
右边距:10px;
显示:内联块;
字号:0.8em;
}
#公司{
浮动:对;
文本对齐:右对齐;
}
#工程策划组,
#公司部{
空白:nowrap;
}
桌子{
宽度:100%;
边界塌陷:塌陷;
边界间距:0;
边缘底部:20px;
}
表tr:n第n个子(2n-1)td{
背景:#f5;
}
表th,
表td{
文本对齐:居中;
}
表th{
填充:5px20px;
颜色:#5D6975;
边框底部:1px实心#C1CED9;
空白:nowrap;
字体大小:正常;
}
表.服务,
表1.desc{
文本对齐:左对齐;
}
表td{
填充:20px;
文本对齐:右对齐;
}
表td.service,
表td.desc{
垂直对齐:顶部;
}
表td.1单位,
表td.qty,
表td.总计{
字体大小:1.2米;
}
表td.grand{
边框顶部:1px实心#5D6975;;
}
#通知,通知{
颜色:#5D6975;
字体大小:1.2米;
}
页脚{
颜色:#5D6975;
宽度:100%;
高度:30px;
位置:绝对位置;
底部:0;
边框顶部:1px实心#C1CED9;
填充:8px0;
文本对齐:居中;
}

出租车发票
发票联

日期2015年8月17日 截止日期2015年9月17日 服务 描述 价格 数量 全部的 设计 基于公司现有的视觉标识创建可识别的设计解决方案 $40.00 26 $1,040.00 发展 基于web的内容管理系统的开发 $40.00 80 $3,200.00 搜索引擎优化 为搜索引擎优化网站(SEO) $40.00 20 $800.00 训练 负责上传web内容的员工的初始培训课程 $40.00 4. $160.00 小计 $5,200.00 税25% $1,300.00 总计 $6,500.00 注意: 30天后,未付余额将收取1.5%的财务费用。 发票是在计算机上创建的,无需签名和盖章即可生效。
看看pdfHtml。这是最新的iText插件。它支持HTML5和CSS 3。
已经有一些例子,因此您应该能够快速开始将html转换为pdf文档。

您使用html并使用iText将其转换为pdf,而不是直接使用iText方法生成pdf,这有什么具体原因吗?首先,使用thymeleaf的html更容易填充数据和样式。但如果我不能在合理的时间内做到这一点。我会尝试使用纯文本。你能提供链接吗