Javascript 转换PDF而不保存文件
我想知道在进行pdf转换时是否有办法避免保存物理文件。我运行PhantomJS作为pdf转换的服务器,希望避免存储物理文件的后勤工作 在API中,我看到了Javascript 转换PDF而不保存文件,javascript,phantomjs,Javascript,Phantomjs,我想知道在进行pdf转换时是否有办法避免保存物理文件。我运行PhantomJS作为pdf转换的服务器,希望避免存储物理文件的后勤工作 在API中,我看到了render(filename)方法,该方法需要一个文件名,并将转换结果写入文件系统 我想我要找的是类似于renderBase64(format)的东西,它返回一个base 64编码的缓冲区。遗憾的是,这种方法不支持仅pdf格式的图像 在转换PDF时,是否有避免文件保存的方法 我希望该服务的使用者(其他浏览器)处理文件保存你是对的:保存pdf的
render(filename)
方法,该方法需要一个文件名,并将转换结果写入文件系统
我想我要找的是类似于renderBase64(format)
的东西,它返回一个base 64编码的缓冲区。遗憾的是,这种方法不支持仅pdf格式的图像
在转换PDF时,是否有避免文件保存的方法
我希望该服务的使用者(其他浏览器)处理文件保存你是对的:保存pdf的唯一方法需要文件名。我不认为有计划在下一个版本中改变这一点 为了避免存储物理文件的后勤工作,您只需要一个工作目录。将pdf保存到临时文件,并在发送后删除 一个非常基本的脚本可以是
var page = require('webpage').create(),
system = require('system');
var fs = require('fs');
var Guid = function () {
function S4() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
}
// then to call it, plus stitch in '4' in the third group
return (S4() + S4() + "-" + S4() + "-4" + S4().substr(0, 3) + "-" + S4() + "-" + S4() + S4() + S4()).toLowerCase();
}
var keyStr = "ABCDEFGHIJKLMNOP" +
"QRSTUVWXYZabcdef" +
"ghijklmnopqrstuv" +
"wxyz0123456789+/" +
"=";
function encode64(input) {
input = escape(input);
var output = "";
var chr1, chr2, chr3 = "";
var enc1, enc2, enc3, enc4 = "";
var i = 0;
do {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
keyStr.charAt(enc1) +
keyStr.charAt(enc2) +
keyStr.charAt(enc3) +
keyStr.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
}
if (system.args.length != 2) {
console.log('Usage: printer.js URL');
phantom.exit(1);
} else {
var address = system.args[1];
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
} else {
//create temporary file (current dir)
var tmpfileName = Guid() + '.pdf';
//render page
page.render(tmpfileName);
//read tmp file + convert to base64
var content = encode64(fs.read(tmpfileName));
//send (or log)
console.log(content);
//delete
fs.remove(tmpfileName);
phantom.exit();
}
});
}
var page=require('webpage')。create(),
系统=要求(“系统”);
var fs=需要('fs');
var Guid=函数(){
函数S4(){
返回((1+Math.random())*0x10000)| 0.toString(16)子字符串(1);
}
//然后叫它,再加上第三组中“4”中的stitch
返回(S4()+S4()+“-”+S4()+“-4”+S4()。substr(0,3)+“-”+S4()+“-”+S4()+S4()+S4())。toLowerCase();
}
var keyStr=“ABCDEFGHIJKLMNOP”+
“QRSTUVXYZABCDEF”+
“ghijklmnopqrstuv”+
“wxyz0123456789+/”+
"=";
函数encode64(输入){
输入=退出(输入);
var输出=”;
变量chr1,chr2,chr3=“”;
变量enc1、enc2、enc3、enc4=“”;
var i=0;
做{
chr1=input.charCodeAt(i++);
chr2=input.charCodeAt(i++);
chr3=input.charCodeAt(i++);
enc1=chr1>>2;
enc2=((chr1&3)>4);
enc3=((chr2&15)>6);
enc4=chr3&63;
if(isNaN(chr2)){
enc3=enc4=64;
}否则如果(isNaN(chr3)){
enc4=64;
}
输出=输出+
钥匙字符(附件1)+
钥匙字符(附件2)+
钥匙字符(附件3)+
钥匙字符(附件4);
chr1=chr2=chr3=“”;
enc1=enc2=enc3=enc4=“”;
}而(i
我在这里使用一个Guid函数(生成随机文件名)和一个JSBase64编码器 谢谢。我想情况就是这样