html-pdf npm 库在 windows 和 ubuntu 上给出了不同的输出
html-pdf npm library gives different output on windows & ubuntu
我正在使用 https://www.npmjs.com/package/html-pdf 库,它基于 Phantom JS,内部使用 webkit。我正在粘贴虚拟 HTML 和 JS 代码(将这些文件保存在 1 个文件夹中)并附上输出屏幕截图。
我面临的问题是 在 windows 上生成的 PDF 顶部有一些额外的 space(红色上方为空 space),我无法摆脱.
这是一个讨论类似问题的论坛(已过时),https://groups.google.com/forum/#!topic/phantomjs/YQIyxLWhmr0 .
input.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="pageHeader" style="border-style: solid;border-width: 2px;color:red;">
header <br/> header <br/> header <br/> header
</div>
<div id="pageContent" style="border-style: solid;border-width: 2px;color:green;">
<div>
body <br/> body <br/> body
</div>
</div>
JS
(您需要路径、文件系统、车把、html-pdf npm 包)
var path = require('path');
var fs = require('fs');
var handlebars = require('handlebars');
var pdf = require('html-pdf');
saveHtml();
function saveHtml() {
fs.readFile('input.html', 'utf-8', {
flag: 'w'
}, function(error, source) {
handlebars.registerHelper('custom_title', function(title) {
return title;
})
var template = handlebars.compile(source);
var data = {};
var html = template(data);
var options = {
'format': 'A4',
'base': "file://",
/* You can give more options like height, width, border */
};
pdf.create(html, options).toFile('./output.pdf', function(err, res) {
if (err) {
console.log('err pdf');
return;
} else {
console.log('no err pdf');
return;
}
});
});
}
输出 ubuntu
输出 windows
Windows 中顶部的额外 space(红色上方为空 space)是问题所在。
无效的方法
1.添加
"border":{
"top": "0px" // 或毫米、厘米、英寸
}
到 JS 文件中的选项
https://www.npmjs.com/package/html-pdf#options
在 JS 文件的选项中给出固定的 "height": "10.5in" & "width": "8in"
将 margin-top 和 padding-top 设为 0px/-50px 到 pageHeader div.
- 在 bootstrap.css
中将 @media print 中的 margin-top 和正文填充覆盖为 0px/-20px
- 为页眉提供固定高度
任何帮助将不胜感激。谢谢。
我能够通过删除 ID 获得更一致的结果,这样它将所有内容都视为内容而不是单独的 header 和内容区域。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div style="border-style: solid;border-width: 2px;color:red;">
header
</div>
<div style="border-style: solid;border-width: 2px;color:green;">
<div>
body
</div>
</div>
</body>
</html>
如果您需要 ID 来设置样式,请使用 pageHeader / pageFooter 以外的其他内容来避免与这些 ID 相关的特殊处理。
您是否尝试过使用规范化样式 sheet 来弥补跨平台差异?
您可以手动设置 CSS 属性 到 html 标签。就我而言,我在 Windows 中开发模板并将其部署到 Linux (Heroku) 时遇到了问题。
我把 zoom: 0.7
放在标签 html 中,现在两个视图看起来都一样了。
html{zoom: 0.7;}
我正在使用 https://www.npmjs.com/package/html-pdf 库,它基于 Phantom JS,内部使用 webkit。我正在粘贴虚拟 HTML 和 JS 代码(将这些文件保存在 1 个文件夹中)并附上输出屏幕截图。
我面临的问题是 在 windows 上生成的 PDF 顶部有一些额外的 space(红色上方为空 space),我无法摆脱.
这是一个讨论类似问题的论坛(已过时),https://groups.google.com/forum/#!topic/phantomjs/YQIyxLWhmr0 .
input.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div id="pageHeader" style="border-style: solid;border-width: 2px;color:red;">
header <br/> header <br/> header <br/> header
</div>
<div id="pageContent" style="border-style: solid;border-width: 2px;color:green;">
<div>
body <br/> body <br/> body
</div>
</div>
JS (您需要路径、文件系统、车把、html-pdf npm 包)
var path = require('path');
var fs = require('fs');
var handlebars = require('handlebars');
var pdf = require('html-pdf');
saveHtml();
function saveHtml() {
fs.readFile('input.html', 'utf-8', {
flag: 'w'
}, function(error, source) {
handlebars.registerHelper('custom_title', function(title) {
return title;
})
var template = handlebars.compile(source);
var data = {};
var html = template(data);
var options = {
'format': 'A4',
'base': "file://",
/* You can give more options like height, width, border */
};
pdf.create(html, options).toFile('./output.pdf', function(err, res) {
if (err) {
console.log('err pdf');
return;
} else {
console.log('no err pdf');
return;
}
});
});
}
输出 ubuntu
输出 windows
Windows 中顶部的额外 space(红色上方为空 space)是问题所在。
无效的方法 1.添加 "border":{ "top": "0px" // 或毫米、厘米、英寸 } 到 JS 文件中的选项
https://www.npmjs.com/package/html-pdf#options
在 JS 文件的选项中给出固定的 "height": "10.5in" & "width": "8in"
将 margin-top 和 padding-top 设为 0px/-50px 到 pageHeader div.
- 在 bootstrap.css 中将 @media print 中的 margin-top 和正文填充覆盖为 0px/-20px
- 为页眉提供固定高度
任何帮助将不胜感激。谢谢。
我能够通过删除 ID 获得更一致的结果,这样它将所有内容都视为内容而不是单独的 header 和内容区域。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
<div style="border-style: solid;border-width: 2px;color:red;">
header
</div>
<div style="border-style: solid;border-width: 2px;color:green;">
<div>
body
</div>
</div>
</body>
</html>
如果您需要 ID 来设置样式,请使用 pageHeader / pageFooter 以外的其他内容来避免与这些 ID 相关的特殊处理。
您是否尝试过使用规范化样式 sheet 来弥补跨平台差异?
您可以手动设置 CSS 属性 到 html 标签。就我而言,我在 Windows 中开发模板并将其部署到 Linux (Heroku) 时遇到了问题。
我把 zoom: 0.7
放在标签 html 中,现在两个视图看起来都一样了。
html{zoom: 0.7;}