Javascript 如何将变量放入PhantomJS生成的HTML头中进行PDF转换?

Javascript 如何将变量放入PhantomJS生成的HTML头中进行PDF转换?,javascript,html,node.js,pdf,phantomjs,Javascript,Html,Node.js,Pdf,Phantomjs,我这里有一个很大的问题。我想使用express.js、phantomjs和EJS从带有自定义页眉和页脚的HTML模板自动生成PDF文件 在PhantomJS生成的页脚页眉中放入任何“硬编码”HTML字符串都没有任何问题(它们可以工作): 它失败了,给了我这样的信息: 幻象标准输出:语法错误:意外的EOF 如何将带有一些自定义数据的自定义HTML代码放入标题中?因此,phatomjs内容回调有几个方面 ph.callback中的函数有自己的上下文。所以它不能看到自己范围之外的变量。看见 @zgot

我这里有一个很大的问题。我想使用express.js、phantomjs和EJS从带有自定义页眉和页脚的HTML模板自动生成PDF文件

在PhantomJS生成的页脚页眉中放入任何“硬编码”HTML字符串都没有任何问题(它们可以工作):

它失败了,给了我这样的信息:

幻象标准输出:语法错误:意外的EOF


如何将带有一些自定义数据的自定义HTML代码放入标题中?

因此,phatomjs内容回调有几个方面

  • ph.callback
    中的函数有自己的上下文。所以它不能看到自己范围之外的变量。看见 @zgotts在Git问题中提供的例子对我很有用

    var headerHtml = ejs.compile(fs.readFileSync(path.join('server/components/mail/html-templates/pdf-header.html'), 'utf8'));
    var createHeader = function(html) {
            return function (pageNum, numPages) {
                //console.log(html);
                console.log('Header set!');
                return '%HTML%';
            }.toString().replace(/%HTML%/, html);
        };
    
        renderSession.createPage()
            .then(function(_page) {
                page = _page;
                var file = 'file.pdf';
    
                page.property('paperSize', {
                    format: 'Letter',
                    header: {
                        height: "3.75cm",
                        contents: renderSession.callback(createHeader(headerHtml))
                    }
                })
            });
    
  • 我发现的第二个问题是,如果ejs文件中有换行符,它将不起作用。另外请注意,样式不适用,因此如果有样式,则必须添加内嵌样式
  • var pdfHeader = ejs.compile(fs.readFileSync(path.join('server/components/mail/html-templates/pdf-header.html'), 'utf8'));
        pdfHeader = pdfHeader({info: info});
    
        header: {
            height: "3cm",
            contents: ph.callback(function(pageNum, numPages) {
                if (pageNum == numPages) {
                    return "";
                }
                return pdfHeader;
            })
        },
    
    var headerHtml = ejs.compile(fs.readFileSync(path.join('server/components/mail/html-templates/pdf-header.html'), 'utf8'));
    var createHeader = function(html) {
            return function (pageNum, numPages) {
                //console.log(html);
                console.log('Header set!');
                return '%HTML%';
            }.toString().replace(/%HTML%/, html);
        };
    
        renderSession.createPage()
            .then(function(_page) {
                page = _page;
                var file = 'file.pdf';
    
                page.property('paperSize', {
                    format: 'Letter',
                    header: {
                        height: "3.75cm",
                        contents: renderSession.callback(createHeader(headerHtml))
                    }
                })
            });