build.gradle
compile group: 'com.itextpdf', name: 'itextpdf', version: '5.5.13'
compile group: 'com.itextpdf.tool', name: 'xmlworker', version: '5.5.13'
compile group: 'org.jsoup', name: 'jsoup', version: '1.11.2'
compile group: 'com.itextpdf', name: 'itext-asian', version: '5.2.0'
Controller
import com.itextpdf.text.Document
import com.itextpdf.text.pdf.PdfWriter
import com.itextpdf.tool.xml.XMLWorkerHelper
import org.jsoup.Jsoup
import org.jsoup.nodes.Document.OutputSettings
def htmlToPdf () {
try{
def html = '<p>html</p>'
def fileName = ''
response.setHeader 'Content-type', 'application/pdf'
response.setHeader "Content-disposition", "inline; filename=${fileName}"
Document document = new Document()
PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream())
document.open()
def contentDoc = Jsoup.parseBodyFragment(html)
def outputSettings = new OutputSettings()
outputSettings.syntax(OutputSettings.Syntax.xml)
contentDoc.outputSettings(outputSettings)
String parsedHtml = contentDoc.outerHtml()
XMLWorkerHelper.getInstance().parseXHtml(writer, document, new ByteArrayInputStream(parsedHtml.getBytes()))
document.close()
response.outputStream.flush()
} catch (Exception e) {
e.printStackTrace()
}
}