是否可以使用JavaScript或jquery将HTML页面保存为PDF?
是否可以使用JavaScript或jquery将HTML页面保存为PDF 详细内容: 我生成了一个HTML页面,其中包含一个表。它有一个按钮“另存为PDF”。如果用户单击该按钮,则该HTML页面必须转换为PDF文件 可以使用JavaScript或jquery吗?简言之:不可以。 第一个问题是对文件系统的访问,在大多数浏览器中,由于安全原因,文件系统默认设置为no。现代浏览器有时支持数据库形式的最小存储,或者您可以要求用户启用文件访问 如果您可以访问文件系统,那么将其保存为HTML并不是那么难(请参阅JS文档中的file对象),但PDF并不是那么容易。PDF是一种非常高级的文件格式,不适合Javascript。它要求您以Javascript不直接支持的数据类型(如单词和四边形)编写信息。您还需要预定义必须保存到文件中的字典查找系统。我相信有人可以让它工作,但所涉及的努力和时间会更好地学习C++或Delphi。是否可以使用JavaScript或jquery将HTML页面保存为PDF?,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,是否可以使用JavaScript或jquery将HTML页面保存为PDF 详细内容: 我生成了一个HTML页面,其中包含一个表。它有一个按钮“另存为PDF”。如果用户单击该按钮,则该HTML页面必须转换为PDF文件 可以使用JavaScript或jquery吗?简言之:不可以。 第一个问题是对文件系统的访问,在大多数浏览器中,由于安全原因,文件系统默认设置为no。现代浏览器有时支持数据库形式的最小存储,或者您可以要求用户启用文件访问 如果您可以访问文件系统,那么将其保存为HTML并不是那么难(请
但是,如果用户允许您进行非限制访问,HTML导出应该是可能的我会这样做,这不是防弹设计,您需要修改它
- 用户单击另存为PDF按钮
- 使用ajax向服务器发送一个调用
- 服务器使用HTML生成的PDF URL进行响应,我非常成功地使用了ApacheFop
- 处理ajax响应的js会执行location.href来指向js发送的URL,一旦加载该URL,它就会使用content disposition头作为附件发送文件,强制用户下载该文件
因此,答案是编写您自己的PDF编写器,或者让现有的PDF编写器(在服务器上)为您编写PDF编写器。您可以使用Phantomjs。下载并使用以下示例测试html->pdf转换功能 示例代码:
phantomjs.exe examples/rasterize.js http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/xhtml/index.html sample.pdf
是的,使用javascript非常容易。希望这段代码对你有用 你会需要这个
你好,这是H3标签
标线
生成PDF
var doc=new jsPDF();
变量specialElementHandlers={
“#编辑器”:函数(元素、渲染器){
返回true;
}
};
$('#cmd')。单击(函数(){
doc.fromHTML($('#content').html(),15,15{
“宽度”:170,
“elementHandlers”:specialElementHandlers
});
doc.save('sample-file.pdf');
});
//此代码已收集但很有用,请单击下面的JSFIDLE链接。
使用JavaScript将HTML转换为PDf还有另一种非常明显的方法:使用在线API。如果您不需要在用户脱机时进行转换,这将很好地工作 是一个具有良好API并提供免费帐户的选项。我相信您可以找到许多备选方案(例如) 对于PdfMage API,您将有如下内容:
$.ajax({
url: "https://pdfmage.org/pdf-api/v1/process",
type: "POST",
crossDomain: true,
data: { Html:"<html><body>Hi there!</body></html>" },
dataType: "json",
headers: {
"X-Api-Key": "your-key-here" // not very secure, but a valid option for non-public domains/intranet
},
success: function (response) {
window.location = response.Data.DownloadUrl;
},
error: function (xhr, status) {
alert("error");
}
});
$.ajax({
url:“https://pdfmage.org/pdf-api/v1/process",
类型:“POST”,
跨域:是的,
数据:{Html:“你好!”},
数据类型:“json”,
标题:{
“X-Api-Key”:“此处的密钥”//不太安全,但对于非公共域/内部网是有效的选项
},
成功:功能(响应){
window.location=response.Data.DownloadUrl;
},
错误:函数(xhr,状态){
警报(“错误”);
}
});
这可能是一个迟到的答案,但这是最好的选择:
纯javascript实现。
允许您仅按ID指定单个元素并对其进行转换。是。例如,您可以通过使用解决方案 它有一个Javascript API,可以用不同的方式抓取和操作屏幕截图。为了在应用程序中使用它,您首先需要获得一个和免费的Javascript SDK 让我们来看一个简单的例子:
//first include the grabzit.min.js library in the web page
<script src="grabzit.min.js"></script>
//include the code below to add the screenshot to the body tag
<script>
//use secret key to sign in. replace the url.
GrabzIt("Sign in to view your Application Key").ConvertURL("http://www.google.com").Create();
</script>
//首先在网页中包含grabzit.min.js库
//包括下面的代码以将屏幕截图添加到body标签
//使用密钥登录。替换url。
GrabzIt(“登录以查看您的应用程序密钥”).ConvertURL(“http://www.google.com)创建();
然后只需稍等片刻,图像将自动显示在页面底部,而无需重新加载页面
这是最简单的一个。有关图像处理、将屏幕截图附加到元素等的更多示例,请查看。
$('#cmd2')。单击(函数(){
变量选项={
//“宽度”:800,
};
var pdf=新的jsPDF('p','pt','a4');
pdf.addHTML($(“#content2”),-1220,选项,函数(){
保存('accept_card.pdf');
});
});代码>
考场入场券
名称
桑塔努帕特拉
D.O.B.
//first include the grabzit.min.js library in the web page
<script src="grabzit.min.js"></script>
//include the code below to add the screenshot to the body tag
<script>
//use secret key to sign in. replace the url.
GrabzIt("Sign in to view your Application Key").ConvertURL("http://www.google.com").Create();
</script>
$('#downloadPDF').click(function () {
domtoimage.toPng(document.getElementById('content2'))
.then(function (blob) {
var pdf = new jsPDF('l', 'pt', [$('#content2').width(), $('#content2').height()]);
pdf.addImage(blob, 'PNG', 0, 0, $('#content2').width(), $('#content2').height());
pdf.save("test.pdf");
});
});