1. 程式人生 > >java html轉pdf手動分頁

java html轉pdf手動分頁

方法1:用com.lowagie

引用jar包:

compile group:'org.xhtmlrenderer',name:'core-renderer',version:'R8'

compile group:'com.lowagie',name:'itext',version:'2.0.8' 

(只能2.0.8版本,其他版本沒有getCharBBox(char)方法,只有getCharBBox(int)方法)

程式碼:

import com.lowagie.text.DocumentException;

import org.w3c.dom.Document;

import org.xhtmlrenderer.pdf.ITextRenderer;

import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.ParserConfigurationException;

import java.io.ByteArrayInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public classTest {

public static voidmain(String[] args)

throwsParserConfigurationException,IOException, SAXException, DocumentException {

        StringBuffer htmlString =new StringBuffer();

        htmlString.append("<html>");

        htmlString.append("<head><style>@page{}.pageNext{page-break-after:always;}</style></head>"

);

        htmlString.append("<body>");

        htmlString.append("<div>Hello</div>");

        htmlString.append("<divclass='pageNext'></div>");

        htmlString.append("<div>World</div>");

        htmlString.append("</body></html>");

        DocumentBuilder builder =DocumentBuilderFactory.newInstance().newDocumentBuilder();

        Document doc = builder.parse(newByteArrayInputStream(htmlString.toString().getBytes()));

        ITextRenderer renderer =new ITextRenderer();

        renderer.setDocument(doc,null);

        renderer.layout();

        OutputStream out =new FileOutputStream("D://test.pdf");

        renderer.createPDF(out);

        out.close();

    }

}

方法2:用com.itextpdf

引用jar包:

compile('com.itextpdf:itextpdf:5.4.2')

compile('com.itextpdf.tool:xmlworker:5.4.1'

程式碼:import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.html.CssAppliers;
import com.itextpdf.tool.xml.html.CssAppliersImpl;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

public class Test {

   
public static void main(String[] args)throws IOException,DocumentException {
        StringBuffer htmlString =
new StringBuffer();
        htmlString.append(
"<html>");
        htmlString.append(
"<body>");
        htmlString.append(
"<div>Hello</div>");
        htmlString.append(
"<div style='page-break-before:always'>World</div>");
        htmlString.append(
"</body></html>");

        Document document =
new Document();
        PdfWriter writer = PdfWriter.getInstance(document,
newFileOutputStream("D://test.pdf"));
        document.open();
        InputStream htmlInput =
new ByteArrayInputStream(htmlString.toString().getBytes("UTF-8"));
       
// 使用自定義的字型提供器,並將其設定為unicode字型樣式FontsProvider fontProvider = new FontsProvider();
        fontProvider.addFontSubstitute(
"lowagie","garamond");
        fontProvider.setUseUnicode(
true);
        CssAppliers cssAppliers =
new CssAppliersImpl(fontProvider);
        HtmlPipelineContext htmlContext =
newHtmlPipelineContext(cssAppliers);
        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
        XMLWorkerHelper.getInstance().getDefaultCssResolver(
true);

       
//解析html檔案XMLWorkerHelper.getInstance().parseXHtml(writer,document, htmlInput,null, Charset.forName("UTF-8"), fontProvider);

       
//關閉流document.close();
        writer.close();
    }

   
/**
     *
內部類,用於解決中文顯示亂碼問題
     */
   
private static class FontsProviderextendsXMLWorkerFontProvider {

       
/**
         *
建構函式
         */
       
public FontsProvider(){
           
super(null,null);
        }

       
/**
         *
過載,獲取自定義的字型
         *
         * @param
fontName字型名稱
         * @param
encoding編碼資訊
         * @param
size字型大小
         * @param
style字型風格
         * @return Font
自定義的字型
         */
       
@Override
       
public FontgetFont(finalString fontName, String encoding, float size,finalint style) {
            String fntname = fontName;
           
if (fntname==null) {
                fntname =
"宋體";
            }
           
if (size ==0) {
                size =
4;
            }
           
return super.getFont(fntname,encoding, size, style);
        }
    }
}


相關推薦

java htmlpdf手動

方法1:用com.lowagie 引用jar包: compile group:'org.xhtmlrenderer',name:'core-renderer',version:'R8' compile group:'com.lowagie',name:'itext',

java htmlpdf 中文亂碼

網上關於 html生產pdf的java程式碼許多,我就不說了。主要是記錄一下亂碼問題的關鍵 1、html檔案必須是utf-8編碼格式的檔案。 2、程式碼中的獲取方式也是utf-8的格式。 3、其他的按照別人的教程編寫

Java htmlPDF

在公司接到一個任務,需要有HTML和PDF兩套模板,進行功能實現。 於是我就到網上搜索資料,看看是否能夠html轉PDF。 果然搜到了很多案例,當然很多一樣的啦。 這裡我將處理demo時遇到的問題和解決方案都大概說下吧! 下面我下貼出demo: public static

JS實現HTMLpdf(支援高清放大及)詳解

在這裡我主要講述實現思路及方法,原理大家可以自行百度,寫此文章主要是網上的很多實現方案都不能很好的支援高清放大及分頁。首先:引入三個js外掛,請自行上網百度下載,注意html2canvas.js版本太高會出現Promise未定義,本人猜測ES6高版本中可能用到ES6語法,請注

PDF技術(四)-Java實現HtmlPDF檔案

html轉換為pdf的關鍵技術是如何處理網頁中複雜的css樣式、以及中文亂碼處理。 各實現對比表 於Windows平臺進行測試:   基於IText 基於FlyingSaucer 基於WKHtmlToPdf

iText —— JAVAhtmlpdf

1、index.html檔案內容如下 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.

Java實現HtmlPDF

專案上的客戶提出一個需求,把政務流程中的表單資料匯出成pdf或者圖片格式,用來作電子檔案材料。表單基於公司的電子政務構建平臺實現,在資料庫儲存的都是html格式,因此打算直接把表單html轉成pdf或者圖片。由於表單是已經寫好了html頁面,那我要做的就是能完美解析htm

Java操作wkhtmltopdf實現HtmlPDF

做java開發的都知道,java生成pdf大部分都是用itext,itext的確是java開源元件的第一選擇。不過itext也有侷限,就是要自己寫模版,系統中的表單數量有好幾百個,為每個表單做一個匯出

wkhtmltopdf htmlPDF 支援java 直接呼叫命令進行轉換

wkhtmltopdf [OPTIONS]... <input file> [More input files] <output file> 常規選項  --allow <path>  允許載入從指定的資料夾中的檔案或檔案(可重複)--b

JAVA】使用 iText XMLWorker實現HTMLPDF

使用 iText XML Worker實現HTML轉PDF package com.yfli.iText; import java.io.FileInputStream; import java.i

java實現htmlpdf,支援中文,css以及中文換行

專案需使用到html轉pdf功能,在網上搜了很多,綜合了不少大神的方法,現在這裡做一個標記,以免自己以後忘記了。 java程式碼 import java.io.File; import java.io.FileOutputStream; import j

java list手動

package Test; import java.util.ArrayList; import java.util.List; /** * * @author csz * @date 2018-02-05 */ public class ListPageUtil { /**

lodop列印html頁面手動

可以在html中使用<tr> <td style="page-break-after:always;"> &nbsp; </td> </tr>在需要分頁的地方加入此語句可實現分頁;ps  :js中

iText把jsp/htmlpdf,並支援新增

公司的相關業務需要匯出pdf,找遍了各大網站論壇,然後自己又總結融合了不少其他程式碼,吃過不少虧,特把全部原始碼扔上去供大家做個參考,鄙人研發兩年還屬於小菜階段.程式碼不嚴謹的地方還望指正; 為了給pdf直接加上頁首頁尾,直接重寫了ITextRenderer 下面直接上原始

java開發htmlpdf 解決方案

    之前在工作中遇到過一個需求,是將使用者填寫的申報,由固定模板的來生成pdf,後來想到先把內容生成html,然後再把html格式的內容轉換成pdf。    之前在網上找了很多,有很多內容都是轉載的,後來折騰了好幾天才試出一個真實能用的,所以在這裡記錄一下。方便以後查閱,

lodop在html手動

lodop引用lodop列印外掛時,如果需要在html中手動分頁<tr> <td style="page-break-after:always;"> &nbsp; </td> </tr>在需要分頁的地方加入此ps:j

java通過htmlpdf

HTML轉PDF工具(wkhtmltopdf)介紹,支援widows和linux wkhtmltopdf下載地址:連結:http://pan.baidu.com/s/1jIkk9Wa 密碼:ljn6 cmd用法: java用法: package

Java實現手動

1、使用apache工具進行手動分頁 import java.util.ArrayList; import java.util.List; import org.apache.commons.col

java完成HTMLPDF wkhtmltopdf

為什麼使用wkhtmltopdf HTML轉PDF的實現方式有很多,但是轉換出來的PDF的質量又好有壞。之前試過IText和一些其

根據類型動態生成數據 html錨點使用 待完成

attack tle 請求 get ndarray pla anim pan 生成 { "sucess":"true", "list": [ { "id":1, "type":"common", "name":"moudule1"