我的要求是创建动态网页的pdf文件。

时间:2015-07-16 04:42:42

标签: blob

我的要求是创建动态网页的pdf文件。 Web内容总是根据用户输入而改变。因此,解决方案是在客户端拍摄网页快照并将其转换为pdf。我有一个客户端脚本来拍摄快照 这是脚本

(function (exports) {
            function urlsToAbsolute(nodeList) {
                if (!nodeList.length) {
                    return [];
                }
                var attrName = 'href';
                if (nodeList[0].__proto__ === HTMLImageElement.prototype
                || nodeList[0].__proto__ === HTMLScriptElement.prototype) {
                    attrName = 'src';
                }
                nodeList = [].map.call(nodeList, function (el, i) {
                    var attr = el.getAttribute(attrName);
                    if (!attr) {
                        return;
                    }
                    var absURL = /^(https?|data):/i.test(attr);
                    if (absURL) {
                        return el;
                    } else {
                        return el;
                    }
                });
                return nodeList;
            }

            function screenshotPage() {
                urlsToAbsolute(document.images);
                urlsToAbsolute(document.querySelectorAll("link[rel='stylesheet']"));
                var screenshot = document.documentElement.cloneNode(true);
                var b = document.createElement('base');
                b.href = document.location.protocol + '//' + location.host;
                var head = screenshot.querySelector('head');
                head.insertBefore(b, head.firstChild);
                screenshot.style.pointerEvents = 'none';
                screenshot.style.overflow = 'hidden';
                screenshot.style.webkitUserSelect = 'none';
                screenshot.style.mozUserSelect = 'none';
                screenshot.style.msUserSelect = 'none';
                screenshot.style.oUserSelect = 'none';
                screenshot.style.userSelect = 'none';
                screenshot.dataset.scrollX = window.scrollX;
                screenshot.dataset.scrollY = window.scrollY;
                var script = document.createElement('script');
                script.textContent = '(' + addOnPageLoad_.toString() + ')();';
                screenshot.querySelector('body').appendChild(script);
                var blob = new Blob([screenshot.outerHTML], {
                    type: 'text/html'
                });
                return blob;
            }

            function addOnPageLoad_() {
                window.addEventListener('DOMContentLoaded', function (e) {
                    var scrollX = document.documentElement.dataset.scrollX || 0;
                    var scrollY = document.documentElement.dataset.scrollY || 0;
                    window.scrollTo(scrollX, scrollY);
                });
            }

            function generate() {
                window.URL = window.URL || window.webkitURL;
                window.open(window.URL.createObjectURL(screenshotPage()));

            }
            exports.screenshotPage = screenshotPage;
            exports.generate = generate;
        })(window);

它返回一个blob对象。已经尝试在StackOverFlow或网络上提供的主要客户端脚本 请给我任何将blob对象转换为pdf文件的解决方案。

0 个答案:

没有答案