java使用flying-saucer-pdf-itext5进行

2019-10-26  本文已影响0人  cheniot

如果只是html通过url或字符串来转换成pdf的话,只需要上面一个jar足矣。有时候项目比较庞大引入的jar比较多的时候,可能会跟别的jar起冲突,我就遇到过flying-saucer-pdf-itext5的9.1.0及以上的版本出现jar冲突而9.1.0以下的版本不会冲突的情况,如果冲突了就得指定特定的路径,比如:

    System.setProperty("javax.xml.transform.TransformerFactory", 
    "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");

    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", 
    "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
package itext.html2pdf;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.BaseFont;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;

public class PDFUtil {

/**
* 通过html的字符串转pdf
* @param out
* @param html
* @throws IOException
* @throws DocumentException
*/
public static void createPdfByHtml(OutputStream out, String html) throws IOException, DocumentException {
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(html);
    // 解决中文支持问题
    ITextFontResolver fontResolver = renderer.getFontResolver();
    fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    renderer.layout();
    renderer.createPDF(out);
  }

/**
* 通过html的文件路径转pdf
* @param out
* @param htmlFilePath
* @throws IOException
* @throws DocumentException
*/
public static void createPdfByUrl(OutputStream out,String htmlFilePath) throws IOException, DocumentException{
    ITextRenderer renderer = new ITextRenderer();
    String url = new File(htmlFilePath).toURI().toURL().toString();
    renderer.setDocument(url);
    // 解决中文支持问题
    ITextFontResolver fontResolver = renderer.getFontResolver();
    fontResolver.addFont("c:/Windows/Fonts/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
    //解决图片的相对路径问题
    //renderer.getSharedContext().setBaseURL("http://localhost:8080");//file:/e:/
    renderer.layout();
    renderer.createPDF(out);
  }
}
上一篇下一篇

猜你喜欢

热点阅读