Как преобразовать шаблон HTML с изображениями в PDF в ServiceNow?

Мне нужно создать динамический pdf с шаблонами html в servicenow, но моя проблема в том, что эти pdf должны содержать изображения и стили, и я не смог ее решить.

попробуйте использовать API GeneralPDF службы сейчас и преобразовать шаблон в pdf, но только если он содержит текст. когда я помещаю изображения, я получаю следующую ошибку:

Эта ошибка появляется у меня при выполнении моего кода:

ExceptionConverter: java.io.IOException: В документе нет страниц.: org.mozilla.javascript.JavaScriptException: ExceptionConverter: java.io.IOException: В документе нет страниц.:

это включено в сценарий и вызывается из действия пользовательского интерфейса. Мой код для преобразования html в pdf выглядит следующим образом:

create : function (sys_id){ 

   var carta = new GlideRecord('x_solsa_casos_plant_doc');
    carta.addQuery('sys_id','6f1e4ac8db29f300ab7c0f95ca96197a');
    carta.query();
    if(carta.next()){
        var parsedBody = carta.body;
        var gr = new GlideRecord('x_solsa_casos_x_solsa_casos');
        gr.get('sys_id',sys_id);
        var sampleString=parsedBody.toString();
        var reg = new SNC.Regex('/\\$\\{(.*?)\\}/i');
        var match = reg.match(sampleString);
        var count =0;
        var variables = [];
        var values = [];
        var tmpValue;
        while (match != null) 
        {
            variables.push(match.toString().substring(match.toString().indexOf(',')+1));
            match = reg.match();
            values.push(variables[count]);
            gs.log("array values : " + values);
            if(gr.getDisplayValue(values[count])==null || JSUtil.nil(gr.getDisplayValue(values[count])))
            {
                tmpValue='';
            }else{
                tmpValue=gr.getDisplayValue(values[count]);
                gs.log("tmpValue :" +tmpValue);
            }
            parsedBody = parsedBody.replace('${'+variables[count]+'}', tmpValue);
                count++;
                gs.log("parsedBody : " + parsedBody);
        }
        this.createPDF(parsedBody,'x_solsa_casos_x_solsa_casos',sys_id,'carta.pdf');  
    }

},

createPDF : function(html, table, sys_id, filename) {
  var pdfDoc = new GeneralPDF.Document(null, null, null, null, null, null);
  this._document = new GeneralPDF(pdfDoc);
  this._document.startHTMLParser();
  this._document.addHTML(html);
  this._document.stopHTMLParser();
  this.saveAs(table, sys_id, filename);

},

saveAs : function (table, sys_id, filename){
  var att = new GeneralPDF.Attachment();
  att.setTableName(table);
  att.setTableId(sys_id);
  att.setName(filename);
  att.setType('application/pdf');
  att.setBody(this._document.get());
  GeneralPDF.attach(att);

},


person cristian    schedule 24.05.2019    source источник
comment
Вы когда-нибудь слышали об itextpdf? это действительно простой способ конвертировать html-шаблоны в pdf, если вам интересно, вы должны проверить это   -  person Javier Heisecke    schedule 24.05.2019


Ответы (1)


Похоже, что parsedBody пусто или не всегда содержит HTML. Согласно этому ответу, paseXHtml (который ServiceNow, вероятно, использует и должен быть в полной трассировке стека) ожидает теги HTML, а не только текст: https://stackoverflow.com/a/20902124/2157581

person Gordon Mohrin    schedule 27.05.2019