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