webshot / phantom pdf,仅打印页面的后半部分

时间:2015-06-05 04:56:10

标签: node.js pdf meteor phantomjs

我正在使用webshot npm模块创建我页面的pdf文件

这是我的页面 enter image description here

我在pdf

中将其作为输出

enter image description here

我的设置是

    var options = {
                  renderDelay:10000,
                    "paperSize": {
                        "format": "Letter", 
                        "orientation": "portrait", 
                        "border": "1cm"
                    },
                    shotSize: {
                        width: 'all',
                        height: 'all'
                    },
                    shotOffset: {
                        left: 0
                        , right: 0
                        , top: 0
                        , bottom: 0
                    }
                };

                webshot(url, fileName, options, function(err) {
                  fs.readFile(fileName, function (err,data) {
                    if (err) {
                      return console.log(err);
                    }

                    fs.unlinkSync(fileName);
                    fut.return(data);
                  });
                });

            this.response.writeHead(200, {'Content-Type': 'application/pdf',"Content-Disposition": "attachment; filename=generated.pdf"});
this.response.end(fut.wait());

对于流星家伙来说,这是我的服务器端根

this.route('generatePDF', {
        path: '/api/generatePDF',
        where: 'server',
        action: function() {
            var webshot = Meteor.npmRequire('webshot');
            var fs      = Npm.require('fs');
            Future = Npm.require('fibers/future');
            var fut = new Future();
            var fileName = "generated_"+Random.id()+".pdf";
            var userid = (Meteor.isClient) ? Meteor.userId() : this.userId;
            console.log(userid);
            // var username = Meteor.users.findOne({_id: userid}).username;
            var url = "url";

            var options = {
              renderDelay:10000,
                "paperSize": {
                    "format": "Letter", 
                    "orientation": "portrait", 
                    "border": "1cm"
                },
                shotSize: {
                    width: 'all',
                    height: 'all'
                },
                shotOffset: {
                    left: 0
                    , right: 0
                    , top: 0
                    , bottom: 0
                }
            };

            webshot(url, fileName, options, function(err) {
              fs.readFile(fileName, function (err,data) {
                if (err) {
                  return console.log(err);
                }

                fs.unlinkSync(fileName);
                fut.return(data);
              });
            });

            this.response.writeHead(200, {'Content-Type': 'application/pdf',"Content-Disposition": "attachment; filename=generated.pdf"});
            this.response.end(fut.wait());
        }
    });

我在这里遗漏了什么?任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

您可以尝试将paperSize更改为:

"paperSize": {
                width: '612px',
                height: '792px',
                margin: 'XXpx'
            },

答案 1 :(得分:0)

如果其他人有麻烦 - 我有同样的问题。我无法确切地告诉你原因,但问题是我使用的是bootstrap,我的页面的包装器有“容器”类。删除此类后,整个页面都被渲染 - 没有删除它只是在页面的一半左右渲染。