在我的应用程序中,我需要通过在客户端本身解析HTML来下载pdf。为了在客户端生成pdf,我使用的是jsPdf。以下是我的代码。
PdfGenerator.java
public static native String createPDF() /*-{
$wnd.createPDF();
}-*/;
entrypoint.html
function createPDF(){
try {
var doc = new jsPDF();
doc.text(20, 20, 'This PDF has a title, subject, author, keywords and a crea');
doc.output('datauri');
var out = doc.output();
var url = 'data:application/pdf;base64,' + Base64.encode(out);
document.location.href = url;
} catch (e) {
return e.message;
}
return "";
};
我已经在我的项目和定义的脚本中添加了所有js。但每当我调用此方法时,它就会输出“sprintf未定义。”。 如果我错过了什么,请告诉我。
答案 0 :(得分:1)
我猜您忘记添加sprintf.js
和base64 js
的脚本。由于jsPdf.js
在内部使用这两个j。
<强> entrypoint.html 强>
<script type="text/javascript" src="base64.js"></script>
<script type="text/javascript" src="sprintf.js"></script>
<script type="text/javascript" src="jspdf.js"></script>
答案 1 :(得分:1)
在jsPDF的最新版本中,你不需要base64或sprintf,只需在'dist'文件夹中找到jspdf.min.js,包括所有插件(downloadify / swfobject除外)。
如果有人在试图找出jsPDF时因为它没有那么好的文档,那么只需更新一张旧票。
答案 2 :(得分:1)
您无需使用window.location
使代码复杂化。
JsPDF具有方法.save()
来处理它。
function createPDF(){
try {
var doc = new jsPDF();
doc.text(20, 20, 'This PDF has a title, subject, author, keywords and a crea');
doc.save('file_name.pdf');
} catch (e) {
return e.message;
}
return "";
};
答案 3 :(得分:0)
根据您支持的浏览器(所有浏览器版本和IE 10+),您甚至不需要包含Base64.encode()
。只需拨打btoa()
即可。