jsPDF可以'I don’我不能做任何造型
jsPDF can't get any styling to work
我是使用jsPDF的新手,但在我的一生中,我无法获得任何css来应用于此!我尝试过内联、内部和外部,但都无济于事!我在另一篇SO帖子中读到,由于技术上是将内容打印到文件中,我需要一个打印样式表,但这也不起作用。
我有一个非常基本的页面,我只是想让任何CSS都能使用:JS:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="jspdf.js"></script>
<script type="text/javascript" src="./libs/FileSaver.js/FileSaver.js"></script>
<script type="text/javascript" src="./libs/Blob.js/BlobBuilder.js"></script>
<script type="text/javascript" src="jspdf.plugin.standard_fonts_metrics.js"></script>
<script type="text/javascript" src="jspdf.plugin.split_text_to_size.js"></script>
<script type="text/javascript" src="jspdf.plugin.from_html.js"></script>
<script>
$(document).ready(function(){
$('#dl').click(function(){
var specialElementHandlers = {
'#editor': function(element, renderer){
return true;
}
};
var doc = new jsPDF('landscape');
doc.fromHTML($('body').get(0), 15, 15, {'width': 170, 'elementHandlers': specialElementHandlers});
doc.output('save');
});
});
</script>
HTML:
<body>
<div id="dl">Download Maybe?</div>
<div id="testcase">
<h1>
We support special element handlers. Register them with jQuery-style
</h1>
</div>
</body>
最后是外部样式表:
h1{
color: red;
}
div{
color: red;
}
我确信所有内容都被正确地包括在内,并且没有错误,已经检查了所有内容。是否有一些额外的函数需要我调用才能使css也正常工作?请告诉我!非常感谢!如果您有其他建议,我们也将不胜感激!
编辑:这是确切的网页:
<html>
<head>
<link rel="stylesheet" href="print.css" type="text/css" media="print"/>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="jspdf.js"></script>
<script type="text/javascript" src="./libs/FileSaver.js/FileSaver.js"></script>
<script type="text/javascript" src="./libs/Blob.js/BlobBuilder.js"></script>
<script type="text/javascript" src="jspdf.plugin.standard_fonts_metrics.js"></script>
<script type="text/javascript" src="jspdf.plugin.split_text_to_size.js"></script>
<script type="text/javascript" src="jspdf.plugin.from_html.js"></script>
<script>
$(document).ready(function(){
$('#dl').click(function(){
var specialElementHandlers = {
'#editor': function(element, renderer){
return true;
}
};
var doc = new jsPDF('landscape');
doc.fromHTML($('body').get(0), 15, 15, {'width': 170, 'elementHandlers': specialElementHandlers});
doc.output('save');
});
});
</script>
</head>
<body>
<div id="dl">Download Maybe?</div>
<div id="testcase">
<h1>
We support special element handlers. Register them with jQuery-style
</h1>
</div>
</body>
</html>
我认为问题在于使用
media="print"
而不是media="screen"
。尝试制作两个单独的文件,一个用于打印,一个用作屏幕:
<link rel="stylesheet" href="print.css" type="text/css" media="print"/>
<link rel="stylesheet" href="screen.css" type="text/css" media="screen"/>
屏幕一将包含在浏览器中看到的页面样式。打印文件将包含打印页面时的样式,或者在这种情况下将其保存为PDF
编辑
我查看了jsPDF网站,但我认为它们不支持CSS。你可以这样做来创建一个具有不同文本颜色的文档:
doc.setFontSize(22);
doc.setTextColor(255, 0, 0);
doc.text(20, 20, 'This is a title');
doc.setFontSize(16);
doc.setTextColor(0, 255, 0);
doc.text(20, 30, 'This is some normal sized text underneath.');
将此代码放在脚本的var doc = new jsPDF('landscape');
下。
您可以尝试这个选项,它使用jsPDF、html2canvas和html2pdf库
来自其自述:
包括以下文件:
<script src="jspdf.min.js"></script>
<script src="html2canvas.min.js"></script>
<script src="html2pdf.js"></script>
然后你可以通过运行生成你的pdf
html2pdf($('body').get(0), {
margin: 1,
filename: 'myfile.pdf',
image: { type: 'jpeg', quality: 0.98 },
html2canvas: { dpi: 192, letterRendering: true },
jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }
});
您可以使用jsPDF捕获屏幕截图,但也需要html2canvas。使用html2canvas将html转换为画布并获取图像内容。使用jsPDF创建一个空的pdf,并将html图像内容添加到pdf中并保存:
html2canvas(*html*, {
onrendered: function(canvas) {
const contentDataURL = canvas.toDataURL('image/png')
let pdf = new jsPDF()
pdf.addImage(contentDataURL, 'JPEG', 20, 20)
pdf.save('form.pdf')
}
})
这将保留所有CSS,但质量会受到一些影响(模糊)。
@samuraiseoul我们可以使用domtoimage 进行复杂的HTML渲染
private async generatePDF(elemToPrint: HTMLElement): Promise<void> {
this.printSection = document.createElement('div');
this.printSection.id = 'printSection';
document.body.appendChild(this.printSection);
const dataUrl = await domtoimage.toPng(elemToPrint, {width: elemToPrint.clientWidth, height: elemToPrint.clientHeight});
const img = document.createElement('img');
img.src = dataUrl;
img.alt = 'The Image';
this.printSection.appendChild(img);
setTimeout(() => window.print(), 500); //Just give some time to render stuff while playing with @media print css stuff
}
这是CSS
@media screen {
#printSection {
display: none;
}
}
@media print {
#printSection , #printSection *{
display: block; // We need the * because only if we display all the items inside the printSection to display as block. then only our mighty firefox will render the second page. :) Hey, that's a bug from FF.
}
}
- select2 使用 AJAX 加载数据不能选择任何选项
- 漂亮的照片在Dreamweaver上完美运行;但不能在任何浏览器上在线工作
- IOS自动化:有没有办法;刷新'元素树(或者Instruments'认为可以访问和不能访问的任何内容)
- jsPDF可以'I don’我不能做任何造型
- AjaxContent不能在任何浏览器中加载
- 在我限制输入字母后,不能退格或键入任何内容
- 简单的jquery幻灯片切换;不能在任何浏览器中工作
- Javascript可以在Safari上运行,但不能在任何其他浏览器上运行
- 有没有办法对一些javascript进行沙盒处理,这样它就不能以任何方式将数据发送到服务器
- 为什么我的画布不能使用 Fabric.js 显示任何内容
- 骨干.js我们能不能没有任何标签名称
- 为什么我不能从单独的.js文件中调用任何函数
- 为什么我不能在谷歌浏览器中运行我的任何JavaScript
- 任何在'它'不会'我不能和Protractor一起工作
- forEach在IE10上不能在Server 2008上工作,但在其他任何地方都可以在IE10中工作
- 关于为什么我不能在jsforce-auth函数中使用heroku环境变量的任何线索
- 我可以使用按钮来调用函数,但不能从搜索设置的if语句中调用,但可以调用任何其他函数
- History.go(-1)不能在chrome上工作.任何选择
- 不能添加JS文件,或任何其他,到钛项目文件夹
- 我怎么能选择一个表标题有相同的类名,而不是任何其他唯一的属性在web驱动程序