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);
	        }
	    }
}


Java使用com.lowagie.text.pdf插件编写PDF报表工具类,支持动态报表创建,使用简单,附件中包含了测试类和生成的报表文件。附件中的代码需要修改相关的保存路径后可以直接使用。创建一张报表例子: private JsFileExportResult createRowReport() { String condition = "开始时间:2018-02-02 14:00:30 结束时间:2018-02-06 16:00:30"; PDFGridReport pdfReport = new PDFGridReport("报表创建测试", GridReportTestModel.getModels()); pdfReport.addCondition(condition); pdfReport.header("字段名称1", "item1", 0, 0).width(160); pdfReport.header("字段名称3", "item3", 0, 2).getCell().backgroundColor(Color.ORANGE); pdfReport.header("字段名称4", "item4", 0, 3); pdfReport.header("字段名称5", "item5", 0, 4); pdfReport.header("字段名称2", "item2", 0, 1); pdfReport.header("值", "value", 0, 5).alignH(HAlign.ALIGN_CENTER).getCell().alignH(HAlign.ALIGN_RIGHT); pdfReport.header("时间", "time", 0, 6); pdfReport.header("图片", "image", 0, 7).width(60).alignH(HAlign.ALIGN_CENTER).getCell() .alignH(HAlign.ALIGN_CENTER).alignV(VAlign.ALIGN_MIDDLE); // 横向打印 pdfReport.getPageSetting().setPrintHorizontal(); pdfReport.group("item1").childGroup("item2"); pdfReport.setCellFormat(new PDFCellValueFormat() { @Override public String format(String fieldName, String oriValue) { if ("value".equals(fieldName)) { return String.format("%.2f", Double.parseDouble(oriValue)).toString(); } else { return oriValue; } } }); JsFileExportResult fileResult = pdfReport.createReport(); return fileResult; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值