我的项目要求我添加“另存为PDF”功能。我正在寻找一个纯粹的JavaScript解决方案,它只在客户端执行此操作,然而,被告知它不可实现,至少目前是这样。
jsPDF目前仍是限量版,不支持图等。所以现在我正在寻找一个稳定的开放式免费解决方案来设置服务器Web服务,从客户端接收数据并发回生成的PDF文件或用户保存到磁盘的链接。
来自客户端的数据由客户端用户确定,这意味着不是整个页面。用户可以选择将地图,表格或所有地图保存为PDF文件。
有什么建议吗?
PS:在Windows环境中
答案 0 :(得分:2)
您可以查看ReportLab Toolkit - 它包含一个用于创建PDF的开源Python库。 (您没有指定您想要的服务器端语言,但Python得到了广泛的支持。)
如果您需要可以使用Javascript编码的内容,则一个选项可能是PhantomJS。此工具允许您从命令行运行无头Webkit浏览器,除此之外,它还可以将网页呈现并保存为PDF。 Slippy使用此方法,因此您可以从该项目获取示例代码。在PhantomJS中编写PDF文件的脚本可能比在Python中快得多,但它可能要慢得多(它必须启动Webkit实例)并且服务器安装可能会很复杂。
答案 1 :(得分:1)
我在javascript中创建了这个函数,它将iframe发送到服务器:
function download(url, datas){
if(url && datas){
var inputs = '', value,
iframe = '<iframe name="iframeDownload" id="iframeDownload" width=0 height=0></iframe>';
$(iframe).appendTo('body');
datas.forEach(function(data){
name = encodeURI(data.get('name'));
value = encodeURI(data.get('value'));
inputs+='<input name="'+name+'" value="'+value+'"/>';
});
$('<form action="'+url+'" method="post" target="iframeDownload">'+inputs+'</form>').appendTo('body').submit().remove(); // .appendTo and remove() are needed for firefox
$(iframe).remove();
};
};
我正在编码输入名称和值以便能够发送数据。 在我的服务器上,我正在使用php,所以要解码它,你需要:rawurldecode。如果将输入的名称定义为“fileName”和“file”,则可以写下:
$fileName = rawurldecode($_POST['fileName']);
$file = rawurldecode($_POST['file']);
之后,要强制下载,您需要发送更正标头。我正在使用这个功能:
function download($filename, $file) {
header('Content-disposition: attachment; filename="'.$filename.'"');
header('Content-Type: application/force-download');
header('Content-Length: '. filesize($file));
readfile($file);
}
如果您不需要从javascript发送文件,因为它是在服务器端创建的,只需将文件的路径添加到下载功能。
如果您使用的是PHP,则可以使用fpdf生成pdf。