iTextPDF+flying-saucer的html2Pdf生成的PDF去掉边框的解决办法

2023-08-08 331点热度 0人点赞 0条评论

Java下将Html转成PDF的方式,详见:https://blog.terrynow.com/2021/09/26/itextpdf-flying-saucer-complex-html-css-to-pdf/

使用的是iTextPDF和flying saucer,以下是简要的操作说明:

pom.xml:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.2</version>
</dependency>

<!-- HTML转PDF需要-->
<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>5.5.13.2</version>
</dependency>
<!-- 解决中文字体乱码问题-->
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

<!-- 支持css样式渲染 -->
<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf-itext5</artifactId>
    <version>9.1.21</version>
</dependency>

Java代码

/**
 * 使用flying saucer转PDF,支持的css更加丰富一些
 * @param pdfFontBasic
 * @param htmlStr
 */
public static byte[] html2Pdf(String pdfFontBasic, String htmlStr) throws Exception {
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(htmlStr);
    // 解决中文支持问题
    ITextFontResolver fontResolver = renderer.getFontResolver();
    fontResolver.addFont(pdfFontBasic, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    renderer.layout();
    renderer.createPDF(bos);
    return bos.toByteArray();
}

因为要给整个PDF背景加颜色,但是默认会带上边框(margin)导致4个边框是没有颜色的。

解决方案:

CSS加上:

<style>
    body {
        font-family: STSong, "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
        "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
        font-size: 16px;
        background: #ecacc7;
        color: #000;
    }
    * {
        margin: 0;
        padding: 0;
        line-height: 2;
    }


    @page{

        @bottom-left {
            content: element(footer);
            vertical-align: top;
            padding-top: 10px;
        }

        @top-right {
            content: element(header);
            vertical-align: bottom;
            padding-bottom: 10px;
        }

        size: A4 portrait;
        margin: 0;
    }

</style>

当然如果要自定义4个边的margin距离,只要定义4个margin即可,现在设成了0

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论