精华内容
下载资源
问答
  • Java 将HTML转PDF的方法
    千次阅读
    2022-03-23 16:18:03

    需用的Jar包

    https://download.csdn.net/download/GXSeveryday/12380111 
    

    点我下载

    PDFReport.java

    package test;   
    import java.io.File;      
    import java.io.FileOutputStream;    
    
    import com.itextpdf.text.Document;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.PageSize;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;    
        
       
    public class PDFReport {
        private static Font headfont ;// 设置字体大小    
        private static Font keyfont;// 设置字体大小    
        private static Font textfont;// 设置字体大小    
        static{    
            BaseFont bfChinese;    
            try {    
                //bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);    
                bfChinese = BaseFont.createFont("STSong-Light","UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);    
                headfont = new Font(bfChinese, 20, Font.BOLD);// 设置字体大小    
                keyfont = new Font(bfChinese, 12, Font.BOLD);// 设置字体大小    
                textfont = new Font(bfChinese, 12, Font.NORMAL);// 设置字体大小    
            } catch (Exception e) {             
                e.printStackTrace();    
            }     
        }    
            
            
        public Document PDFReport(Document document,File file) {            
             document.setPageSize(PageSize.A4);// 设置页面大小    
             try {    
                PdfWriter.getInstance(document,new FileOutputStream(file));    
                document.open();     
            } catch (Exception e) {    
                e.printStackTrace();    
            }     
            return document; 
                
        }    
        int maxWidth = 520;    
            
            
         public PdfPCell createCell(String value,Font font,int align){    
             PdfPCell cell = new PdfPCell();    
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);            
             cell.setHorizontalAlignment(align);        
             cell.setPhrase(new Phrase(value,font));    
            return cell;    
        }    
            
         public PdfPCell createCell(String value,Font font){    
             PdfPCell cell = new PdfPCell();    
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);    
             cell.setHorizontalAlignment(Element.ALIGN_CENTER);     
             cell.setPhrase(new Phrase(value,font));    
            return cell;    
        }    
        
         public PdfPCell createCell(String value,Font font,int align,int colspan){    
             PdfPCell cell = new PdfPCell();    
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);    
             cell.setHorizontalAlignment(align);        
             cell.setColspan(colspan);    
             cell.setPhrase(new Phrase(value,font));    
            return cell;    
        }    
        public PdfPCell createCell(String value,Font font,int align,int colspan,boolean boderFlag){    
             PdfPCell cell = new PdfPCell();    
             cell.setVerticalAlignment(Element.ALIGN_MIDDLE);    
             cell.setHorizontalAlignment(align);        
             cell.setColspan(colspan);    
             cell.setPhrase(new Phrase(value,font));    
             cell.setPadding(3.0f);    
             if(!boderFlag){    
                 cell.setBorder(0);    
                 cell.setPaddingTop(15.0f);    
                 cell.setPaddingBottom(8.0f);    
             }    
            return cell;    
        }    
         public PdfPTable createTable(int colNumber){    
            PdfPTable table = new PdfPTable(colNumber);    
            try{    
                table.setTotalWidth(maxWidth);    
                table.setLockedWidth(true);    
                table.setHorizontalAlignment(Element.ALIGN_CENTER);         
                table.getDefaultCell().setBorder(1);   
                //table.getDefaultCell().setMinimumHeight(120);//设置最小行高
            }catch(Exception e){    
                e.printStackTrace();    
            }    
            return table;    
        }    
         public PdfPTable createTable(float[] widths){    
                PdfPTable table = new PdfPTable(widths);    
                try{    
                    table.setTotalWidth(maxWidth);    
                    table.setLockedWidth(true);    
                    table.setHorizontalAlignment(Element.ALIGN_CENTER);         
                    table.getDefaultCell().setBorder(1);    
                }catch(Exception e){    
                    e.printStackTrace();    
                }    
                return table;    
            }    
            
         public PdfPTable createBlankTable(){    
             PdfPTable table = new PdfPTable(1);    
             table.getDefaultCell().setBorder(0);    
             table.addCell(createCell("", keyfont));             
             table.setSpacingAfter(20.0f);    
             table.setSpacingBefore(20.0f);    
             return table;    
         }    
             
         public void generatePDF(File file) throws Exception{   
        	Document document = new Document();// 建立一个Document对象
        	document = PDFReport(document,file);
            PdfPTable table = createTable(4);    
            table.addCell(createCell("学生信息列表:", keyfont,Element.ALIGN_CENTER,4,false));    
                    
            table.addCell(createCell("姓名", keyfont, Element.ALIGN_CENTER));    
            table.addCell(createCell("年龄", keyfont, Element.ALIGN_CENTER));    
            table.addCell(createCell("性别", keyfont, Element.ALIGN_CENTER));    
            table.addCell(createCell("住址", keyfont, Element.ALIGN_CENTER));    
                
            for(int i=0;i<5;i++){    
                table.addCell(createCell("姓"+i, keyfont,Element.ALIGN_LEFT,4,true));    
                /*table.addCell(createCell(i+15+"", textfont));    
                table.addCell(createCell((i%2==0)?"男":"女", textfont));    
                table.addCell(createCell("地址"+i, textfont)); */   
            }    
            document.add(table);    
                
            document.close();    
         }    
         public void  generateOfflinePDF(File file) throws Exception{
    
         	Document document = new Document();// 建立一个Document对象
         	document = PDFReport(document,file);
             PdfPTable table = createTable(4);   
             //抬头
             table.addCell(createCell("项目缴款通知书", headfont,Element.ALIGN_CENTER,4,false));    
             //第一行        
             table.addCell(createCell("缴款人姓名:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("测试专用操作", textfont, Element.ALIGN_LEFT));    
             table.addCell(createCell("缴款人证件号码:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("510522", textfont, Element.ALIGN_LEFT));      
             //第2行   
             table.addCell(createCell("凭证时间:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("2016-02-03", textfont, Element.ALIGN_LEFT));    
             table.addCell(createCell("凭证编号:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("112233", textfont, Element.ALIGN_LEFT));  
             
             //第3行     
             table.addCell(createCell("项目名称:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("大周皇朝项目", textfont, Element.ALIGN_LEFT,3,true));  
             //第4行     
             table.addCell(createCell("标的名称:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("标的", textfont, Element.ALIGN_LEFT,3,true));  
             //第5行      
             table.addCell(createCell("应缴金额:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("15元", textfont, Element.ALIGN_LEFT,3,true));  
             //第6行      
             table.addCell(createCell("户名:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("王超", textfont, Element.ALIGN_LEFT,3,true)); 
             //第7行    
             table.addCell(createCell("开户行:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("中国银行", textfont, Element.ALIGN_LEFT,3,true));
             //第8行      
             table.addCell(createCell("账号:", keyfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("622", textfont, Element.ALIGN_LEFT,3,true));
             //第9行  
             table.addCell(createCell("特别提醒:", keyfont, Element.ALIGN_LEFT,4,false));  
             //第10行   
             String tj = "  您的报名信息已与以下账户信息绑定,请选择其中之一进行缴款,不能使用现金缴款。请选择以下注册账户之一进行缴款,若"
             		+ "使用以下账户之外的其他账户进行缴款,或选择两个以上注册账户进行组合缴款的,缴款人将无法取得竞买资格,"
             		+ "说缴款项将作为误进款于项目交易结束后三个工作日内原路径退回。";
             table.addCell(createCell(tj, textfont, Element.ALIGN_LEFT,4,false));  
             //第11行      
             String jzsj = "缴款截止日期:"+"2016-02-01";
             table.addCell(createCell(jzsj, keyfont, Element.ALIGN_LEFT,4,false));  
             //第12行      
             table.addCell(createCell("序号", textfont, Element.ALIGN_CENTER));  
             table.addCell(createCell("银行", textfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("账号", textfont, Element.ALIGN_CENTER,2,true));
             //第13行      
             table.addCell(createCell("1", textfont, Element.ALIGN_CENTER));  
             table.addCell(createCell("中国银行", textfont, Element.ALIGN_CENTER));    
             table.addCell(createCell("510522", textfont, Element.ALIGN_CENTER,2,true));
             //第14行      
             table.addCell(createCell("收款账户确认:", keyfont, Element.ALIGN_LEFT,4,false)); 
             //第15行
             String tx = "  项目经理已告知中国建设银行、中国工商银行、重庆农村商业银行可选择为收款银行。本人选择"+"中国银行"+",特此确定。";
             table.addCell(createCell(tx, textfont, Element.ALIGN_LEFT,4,false)); 
             //第16行      
             table.addCell(createCell("缴款人经办人签字:", keyfont, Element.ALIGN_LEFT,4,false)); 
             
             document.add(table);    
             document.close(); 
         }
         public static void main(String[] args) throws Exception {    
             File file = new File("D:\\text.pdf");    
             file.createNewFile();    
            new PDFReport().generateOfflinePDF(file);          
        }    
    }
    
    
    更多相关内容
  • 将html文件转换成pdf文件,并在指定位置添加印章图片
  • java实现html转pdf,包含后端代码,html测试页面,pom依赖,jar包,如页面过于复杂需调整页面,有些样式itextpdf不支持,请寻找其它样式替换。
  • java的html转pdf

    2018-07-05 15:26:31
    java实现html转pdf,包括解决base64图片以及中文不显示问题
  • HTML转PDF: 1.页面底层实现——Vue:最低兼容ie10  2.实现思路:  1> 使用html2canvas.js网页转换为图片  2> 使用jsPdf.debug.jscanvas生成的图片转换为pdf文件 具体实现:  要这样实现首先要引入两个插件...
  • 主要介绍了JS实现的将html转为pdf功能,结合完整实例形式分析了基于浏览器端插件jsPDF实现的HTML格式数据转换成pdf具体操作技巧,需要的朋友可以参考下
  • vue将HTML转PDF导出(纯干货)

    千次阅读 2021-06-10 10:16:40
    第〇步:效果返参格式image.png导出格式(此时为PDF文件)image.png步骤一npm 安装 html2canvas 和 jspdfnpm install html2canvas jspdf --save步骤二在某文件夹中创建名为htmlToPdf.js的文件image.png在htmlToPdf.js...

    第〇步:效果

    返参格式

    864a067ed7df

    image.png

    导出格式(此时为PDF文件)

    864a067ed7df

    image.png

    步骤一

    npm 安装 html2canvas 和 jspdf

    npm install html2canvas jspdf --save

    步骤二

    在某文件夹中创建名为htmlToPdf.js的文件

    864a067ed7df

    image.png

    在htmlToPdf.js中的代码如下:

    // 导出页面为PDF格式

    import html2Canvas from 'html2canvas'

    import JsPDF from 'jspdf'

    export default{

    install (Vue, options) {

    Vue.prototype.getPdf = function () {

    var title = this.htmlTitle

    html2Canvas(document.querySelector('#pdfDom'), {

    allowTaint: true

    }).then(function (canvas) {

    let contentWidth = canvas.width

    let contentHeight = canvas.height

    let pageHeight = contentWidth / 592.28 * 841.89

    let leftHeight = contentHeight

    let position = 0

    let imgWidth = 595.28

    let imgHeight = 592.28 / contentWidth * contentHeight

    let pageData = canvas.toDataURL('image/jpeg', 1.0)

    let PDF = new JsPDF('', 'pt', 'a4')

    if (leftHeight < pageHeight) {

    PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)

    } else {

    while (leftHeight > 0) {

    PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)

    leftHeight -= pageHeight

    position -= 841.89

    if (leftHeight > 0) {

    PDF.addPage()

    }

    }

    }

    PDF.save(title + '.pdf')

    }

    )

    }

    }

    }

    步骤三

    在main.js中按路径引入并注册

    import htmlToPdf from '@/mixin/htmlToPdf.js'

    // 使用Vue.use()方法就会调用工具方法中的install方法

    Vue.use(htmlToPdf)

    步骤四

    绑定id,且在导出按钮上加入getPdf导出方法。在data中定义导出pdf文件名,及接收html代码变量:pageData

    导出

    export default {

    data() {

    return {

    pageData:null, //接收html格式代码

    htmlTitle: '导出PDF的标题',

    }

    }

    }

    大功告成,祝君成功。

    展开全文
  • html转PDF带水印,终极解决办法,解决之前代码,水印只能打在最后一页的问题。
  • 使用itext快速方便的把html文件转为pdf文件,完美的支持中文
  • go 语言实现 html pdf

    2021-05-26 15:53:08
    go 语言实现 html pdf
  • 主要介绍了Python实现将HTML转PDF的方法,结合实例形式分析了Python基于pdfkit模块实现HTML转换成PDF文件的相关操作技巧与注意事项,需要的朋友可以参考下
  • 安卓下可用的HTML转PDF代码,支持中文和单独的图片
  • 解决HTML转pdf 中文、数字、英文不能换行的问题,修改的源码包 重新计算了右边距
  • 使用 Chrome Headless 模式 HTML PDF

    万次阅读 2018-05-17 21:55:25
    使用 Chrome Headless 模式 HTML PDF 前言 最近遇到了个问题,需要爬取到的某个网页PDF 格式。在这其中尝试过不少方法,例如使用 IText,wkhtmltopdf 之类的方式。但是由于所获取的 HTML 页面的...

    使用 Chrome Headless 模式将 HTML 转 PDF

    前言

    最近遇到了个问题,需要将爬取到的某个网页转成 PDF 格式。在这其中尝试过不少方法,例如使用 IText,wkhtmltopdf 之类的方式。但是由于所获取的 HTML 页面的标签较多,以及有些标签并不完整,或者自闭合标签,样式等问题,从而导致无法成功转换。

    也试过使用 HtmlCleaner 这个开源的 Java 语言的 HTML 文档解析器重新生成一个结构较好的 HTML 文档。从代码上来看,格式确实整洁了许多,不过页面的样子稍微变乱了点,而且仍然没有成功转换。

    其它的解决思路,例如获取那个网页中的数据,用 Freemarker 重新生成一个符合要求的 HTML 文件啊。不过这样子工作量就比较大了。下次遇到其它 HTML 需要转 PDF 时则需要重新弄一次。不方便重用。

    便开始继续换个思路,突然想到,要是能后台直接调用浏览器的打印功能就好了。如此一来,标签等问题就不是什么问题了,浏览器怎么渲染 HTML 页面,打印出来的效果就是如何,也就不用担心样式之类的问题了。

    在搜索资料的过程之中,就遇到了本文的主角 —— Chrome 的 Headless 模式下打印 PDF。


    Chrome Headless 模式

    于我的理解是,无界面(GUI)的运行 Chrome 浏览器。在后台运行,优点在于占用资源少,不用打开图形界面即可,通过命令来操作 Chrome 的功能,例如截图,打印成 PDF 之类的。

    理论上安装了 Chrome 浏览器就可以使用该模式。从资料查询来看,Mac 在 Chrome 59 版本及之后,Linux 于 Chrome 57 版本及之后,而 Windows 在 Chrome 60 版本及之后都可以使用该新特性。

    不过我这里安装的是当前最新版本:Google Chrome 66.0.3359.181


    环境准备及使用

    CentOS7 命令界面中安装 Google Chrome 浏览器

    配置 yum 下载源:vi /etc/yum.repos.d/google-chrome.repo

    在里面添加以下内容:

    [google-chrome]
    name=google-chrome
    baseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64
    enabled=1
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub

    安装 Chrome 浏览器:yum -y install google-chrome-stable --nogpgcheck

    等待安装成功即可。详情了解可看这篇文章:CentOS7 安装Chrome浏览器

    因为 Chrome 不能以 root 用户运行,所以我们还需要修改以下配置文件。先查看以下配置所在位置,通过命令:whereis google-chrome。如图
    google-1.png

    编辑:vi /usr/bin/google-chrome,通过 /exec -a 进行搜索,找到以下代码
    google-2.png

    按 i 键进入编辑模式,在这句话后面追加内容:–no-sandbox –user-data-dir,然后通过命令 :wq 保存退出即可。
    google-3.png

    CentOS7 安装字体,解决中文乱码问题

    在我需要转换为 PDF 的 HTML 之中,使用了黑体和宋体。而在我虚拟机上的的 CentOS7 之中,并没有安装相关的字体,故直接转换的话,会出现乱码问题,所以需要先安装一下字体。具体步骤如下,详情请看此文章(Linux CentOS 7 安装字体库 & 中文字体

    安装字体库:yum -y install fontconfig

    创建中文字库的文件夹,依次运行下面的命令:

    cd /usr/share/fonts
    mkdir chinese

    使用 WinSCP 之类的工具将 Windows 字库(C:\Windows\Fonts)下的黑体和宋体上传到刚才创建好的 chinese 目录下

    修改 chinese 目录的权限:chmod -R 755 /usr/share/fonts/chinese

    安装 ttmkfdir 来搜索目录中的字体信息:yum -y install ttmkfdir

    执行 ttmkfdir 命令,汇总生成 fonts.scale 文件:ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir

    修改字体配置文件:

    vi /etc/fonts/fonts.conf

    在 fonts.conf 中的字体列表(Font list),可以在 vi 编辑中使用命令搜索关键字:/Font directory list。在下面的字体列表其中添加一句 <dir>/usr/share/fonts/chinese</dir>。如图:

    按 ESC 键,输入 :wq 保存并退出

    刷新内容中的字体缓存:fc-cache。到此就完成了

    可以通过命令:fc-list 来查看字体列表

    使用命令将 HTML 转 PDF 格式

    google-chrome --headless --disable-gpu --print-to-pdf /root/test/test.html

    google-4.png

    在哪个路径下运行以上命令,则默认在该路径下生成个 output.pdf 文件。也可以指定路径和文件名(不加引号也行),例如:

    google-chrome --headless --disable-gpu --print-to-pdf='/root/test/test.pdf' /root/test/test.html

    google-5.png


    存在的问题及可以尝试的解决方案

    问题:通过以上命令可以将 HTML 转换为 PDF,不过生成的 PDF 默认是有页眉和页脚的。通过修改 HTML 文件,在其中加入一些 CSS 样式,则生成的 PDF 在最后一页有页脚,其它页面没有。HTML 添加的代码如下:

    <style>
    @page { 
        margin: 0;
        size: auto;
    }
    </style>

    或者

    <style>
    @media print {
        @page { margin: 0; }
        body { margin: 1.6cm; }
    }
    </style>

    思路:Chrome 默认的打印配置是勾选了页眉与页脚的。可以考虑修改默认的配置,不过需要找到配置文件的位置。以图形界面的 Chrome 浏览器为例,在地址栏中输入:chrome://version/ 可以查看到个人资料路径,在该路径下有个 Preferences 文件,上面则记录着一些配置。可以使用文本编辑器打开这个文件,搜索关键词: isHeaderFooterEnabled。该关键词不一定存在,甚至这个配置文件也不一定存在,如果使用默认的配置的话,则没有相关的参数。这时候可以使用 Chrome 打印功能,试着勾选 页眉与页脚,则再次搜索关键词则可以找到。在 Linux 命令行模式下,因为不晓得设置 Chrome 的配置,故也就没有生成相应的文件,从而一直使用的是默认的打印方式,即有页眉与页脚。

    可以尝试的方案:可以使用谷歌官方推出的 Headless Chrome 的封装库 Puppeteer 来进行操作,亦或者使用 Selenium 来操作 Headless Chrome。这些这里就不细究了。


    扩展资料


    后记

    换一种思路,不断地去寻找新的解决方案,不断地试错。

    在实践中成长!

    HochenChong

    2018-5-17

    展开全文
  • android_HTML转PDF

    2019-01-05 14:31:41
    安卓下可用的HTML转PDF代码,支持中文和单独的图片 android_HTML转PDF android_HTML转PDF
  • 主要介绍了Java实现Html转Pdf的方法,实例分析了java基于ITextRenderer类操作页面及系统自带字体生成pdf文件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 它最大的缺点就是分页效果差,由于不支持中文,所以大家都是先把页面用画布canvas成图片,这张图片插到pdf实例中,再生成pdf,这样生成出来的pdf你会发现,里面只有一张图片,所以jspdf分页时就是对这张图片的...
  • xhtmlrenderer 进行HTML转PDF,修改了core-renderer-R8的源码,兼容中英文换行,且保持对英文单词完整性,亲测可用。
  • 该项目实现了使用IText将html文件转为pdf文件功能。 步骤: (1):字体文件按代码中写的路径放到磁盘对应位置。 (2):template.html文件按代码中路径放到磁盘对应位置。 (3):直接运行HtmlToPdfUtilForCss...
  • html转pdf、字符串转pdf

    2018-08-17 14:23:57
    1.使用PD4ML 2.HTML转PDF 3.字符串转PDF 4.中文无乱码 4.排版不乱
  • JAVA实现PDF转HTML

    2020-10-29 16:53:08
    该包包含后端代码,转换控件,测试文件,正式项目应用表现正常,注意不能转换水印、印章这类特殊类型,且行且珍惜。
  • .Net HTML页面转PDF格式

    2019-03-20 10:39:26
    通过url 或者本地文件夹 每个HTML 页面转换成相应PDF格式 小工具 bin下直接打开。 C# 源码,VS直接运行。
  • 基于qt,用c++编写的程序,可以运行,主要功能是可以把html文件转换成pdf文件格式,点击pro,用qtcreator 打开运行即可
  • phantomjs html转pdf 完美版本 可以把 html 非常完美的转成pdf,与浏览器转换出来的一样完美
  • 注意:此代码是利用itext静态html转为pdf,非url转pdf 项目为maven项目,注意pom.xml文件中的jar包 解决了中文不显示及不换行的问题 https://blog.csdn.net/woweipingzui/article/details/82017089
  • Itext 将HTML转PDF,HTML中引用了外部样式,为啥不能解析呀 报错: org.xhtmlrenderer.util.XRRuntimeException: IOException on parsing style seet from a Reader; don't know the URI.
  • htmltopdf--html转pdf工具

    2018-12-21 22:29:23
    htmltopdf--html转pdf工具,非常好用的htmltopdf--html转pdf工具。
  • html转pdf.zip

    2020-02-20 16:15:09
    html转pdf.zip
  • html转pdf css控制

    2018-03-09 21:01:30
    html转pdf中css样式解析,解决解析样式出现异常问题,便于html转换为pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,394
精华内容 46,157
关键字:

怎么将html转pdf