java 使用html編寫pdf

導入jar包

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.11</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf.tool</groupId>
            <artifactId>xmlworker</artifactId>
            <version>5.5.11</version>
        </dependency>

java處理代碼

/**
  *control處理方法
  *
  */
public void htmlWitePdf(HttpServletRequest request, HttpServletResponse response) {
                                ByteArrayOutputStream ba = new ByteArrayOutputStream();
				Document document = new Document();
				document.setPageSize(new Rectangle(850f, 600f));//設置pdf頁面大小
				PdfWriter writer = PdfWriter.getInstance(document, ba);// 指定生成路徑
				String html = "<html>......</html>"; //此處爲要填充進去的html
				ByteArrayInputStream bais = new ByteArrayInputStream(html.getBytes());
				document.open();
				new IWXMLParserHelper().getInstance(document, writer).parse(bais);
				writer.flush();
				document.close();
				response.setContentType("application/pdf");
				String fileName = "文件名.pdf";
				response.setHeader("Content-Disposition",
						"attachment;filename=" + new String(fileName.getBytes("GBK"), "ISO8859_1"));
				response.setContentLength(ba.size());
				ServletOutputStream out = response.getOutputStream();
				ba.writeTo(out);
				out.flush();
				ba.close();
				out.close();      }                           
package **.**;

import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.Pipeline;
import com.itextpdf.tool.xml.XMLWorker;
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.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CSSResolver;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.BaseColor;
/** 設置字體樣式 **/
public class IWXMLParserHelper {

	 public XMLParser getInstance(Document document,PdfWriter pdfWriter){
		 IWXMLParserHelper.IWXMLWorkerFontProvider fontProvider = new IWXMLParserHelper.IWXMLWorkerFontProvider(); 
	        fontProvider.addFontSubstitute("lowagie", "garamond"); 
	       
	        fontProvider.setUseUnicode(true); 
	        //使用我們的字體提供器,並將其設置爲unicode字體樣式 
	        CssAppliers cssAppliers = new CssAppliersImpl(fontProvider); 
	        HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers); 
	        htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory()); 
	        CSSResolver cssResolver = XMLWorkerHelper.getInstance() 
	                .getDefaultCssResolver(true); 
	        Pipeline<?> pipeline = new CssResolverPipeline(cssResolver, 
	                new HtmlPipeline(htmlContext, new PdfWriterPipeline(document,pdfWriter))); 
	        XMLWorker worker = new XMLWorker(pipeline, true); 
	        XMLParser p = new XMLParser(worker);
	        return p;
	    }
	    
	    private class IWXMLWorkerFontProvider extends XMLWorkerFontProvider {
	        public IWXMLWorkerFontProvider() {
	            super(null, null);
	        }

	        @Override
	        public Font getFont(final String fontname, String encoding, float size, final int style) {
	            String fntname = fontname;
	            if (fntname == null) {
	                try {
	                    BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
	                    Font font = new Font(bfChinese, size, style, BaseColor.BLACK);
	                    return font;
	                } catch (Exception e) {
	                    e.printStackTrace();
	                }
	            }
	            return super.getFont(fntname, encoding, size, style);
	        }
	    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章