Ya_Zi_C 2021-03-18 17:43 采纳率: 100%
浏览 695
已采纳

ITextRenderer 生成PDF文件 背景有白边

使用ITextRenderer将HTML转为PDF格式文件 (JFinal框架)

Java 代码如下

public static void main7(String[] ages) throws Exception {
        html2pdf("E:\\IDEA\\he\\src\\main\\webapp\\pdf\\test.html", "E:\\IDEA\\tianlan\\target\\c.pdf");
    }
    public static void html2pdf(String inputFile, String outFile) throws Exception {
        String url;
        OutputStream os = null;
        try {
            url = new File(inputFile).toURI().toURL().toString();
            os = new FileOutputStream(outFile);
            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocument(url);

            ITextFontResolver fontResolver = renderer.getFontResolver();       
            fontResolver.addFont("E:/IDEA/tianlan/src/main/webapp/pdf/font/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            fontResolver.addFont("E:/IDEA/he/src/main/webapp/pdf/font/fontawesome-webfont.ttf", com.itextpdf.text.pdf.BaseFont.IDENTITY_H, com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED);
            //生成pdf界面布局
            renderer.layout();
            //开始创建PDF并往目标文件导出pdf数据
            renderer.createPDF(os);
            //完成创建,自动关闭Document资源
            renderer.finishPDF();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            throw new Exception("生成pdf失败");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            throw new Exception("生成pdf失败");
        } catch (com.lowagie.text.DocumentException e) {
            e.printStackTrace();
            throw new Exception("生成pdf失败");
        } catch (IOException e) {
            e.printStackTrace();
            throw new Exception("生成pdf失败");
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new Exception("生成pdf失败");
                }
            }
        }
    }

test.html 代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>test</title>
</head>
<body style="background-color: red">
</body>
</html>

c.pdf截图

生成的PDF会有一个白色的边,感觉有边距。

我以为   renderer.createPDF(os);  会将边距默认为 0 ,但是还是会有白边

尝试使用以下代码,可以去掉边距,但是很多HTML样式没有办法使用,要形成的PDF格式要求比较多,所以放弃了

Document document = new Document();
document.setMargins(0,0,0,0);
PdfWriter writer = PdfWriter.getInstance(document, out);
document.open();

new ByteArrayInputStream(content.getBytes());
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(content.getBytes()), null, StandardCharsets.UTF_8, fontImp);
(这段代码不是完整的)

请问:这个边距是怎么产生的,有没有办法在使用上述代码   ITextRenderer  的基础上去掉白边。有其他更好的建议也可以

谢谢

  • 写回答

3条回答 默认 最新

  • Kyle_Ping 2021-03-18 18:04
    关注

    通过修改html样式可以去掉边距,在html中定义样式,使用"@page"可以实现。

    @page:left{
       margin: 0cm;
    } 
    @page:right{
       margin: 0cm;
    }
    1. @page:用于修改打印时样式,不会改变页面在浏览器上面的样式,只会影响打印时的样式
    2. @page:left:页面左边样式
    3. @page:right:页面右边样式
    4. 将margin设置为0即可消除边距。
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>test</title>
        <style>
            @page {
    
            }
            @page:left{
                margin: 0cm;
            } 
            @page:right{
                margin: 0cm;
            }
        </style>
    </head>
    <body style="background-color: red">
    </body>
    </html>

    这是我生成的pdf:

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程