将base64下载为pdf JavaScript时出现问题
我正在写一个谷歌应用程序脚本Web应用程序,我面临一个问题 从服务器端返回页面的base64编码html代码:将base64下载为pdf JavaScript时出现问题,javascript,pdf,google-apps-script,Javascript,Pdf,Google Apps Script,我正在写一个谷歌应用程序脚本Web应用程序,我面临一个问题 从服务器端返回页面的base64编码html代码: function getRAW() { var formText = 'https://www.google.com/'; var response = UrlFetchApp.fetch(formText); var pdf1 = response.getAs('application/pdf'); //var myNewFile = DriveApp.create
function getRAW() {
var formText = 'https://www.google.com/';
var response = UrlFetchApp.fetch(formText);
var pdf1 = response.getAs('application/pdf');
//var myNewFile = DriveApp.createFile(pdf1);
var blob = response.getBlob()
var bytes = blob.getBytes();
var encoded = Utilities.base64Encode(bytes);
return encoded
}
这很有效。
现在,从客户端,我想下载base64(是一个html原始内容)作为pdf文件(或.html,如果可能的话),但如果我尝试这样做,我会得到一个空白的pdf页面
function downloadRAW() {
var encoded = window.value;
var element = document.createElement('a');
element.setAttribute('href', 'data:application/pdf;base64,' + encoded);
element.setAttribute('download', 'prova');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
注意,如果我试图获得文本/纯文本;base64,
工作正常(返回一个.txt文件);但这不是我想要的
我怎样才能实现它?我相信你的目标和你目前的情况如下
function downloadRAW() {
var formText = 'https://www.google.com/';
var html = UrlFetchApp.fetch(formText).getContentText();
var doc = DocumentApp.create("temp");
doc.getBody().editAsText().setText(html);
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
var blob = file.getBlob();
var bytes = blob.getBytes();
var encoded = Utilities.base64Encode(bytes);
file.setTrashed(true);
return encoded
}
element.setAttribute('href', 'data:text/html;base64,' + encoded);
- 您希望将HTML数据转换为PDF数据作为原始HTML代码。
- 我想从
,我认为pdf数据具有原始html代码下载base64(是一个html原始内容)作为pdf文件
- 我想从
- 您希望让用户以PDF文件的形式下载HTML数据
var encoded=window.value是来自Google Apps脚本的
函数的getRAW()
的值encoded
- 在本例中,为了将原始HTML代码(文本数据)转换为PDF数据,我建议使用Google文档。使用Google文档时,文本数据可以转换为PDF数据
function downloadRAW() {
var formText = 'https://www.google.com/';
var html = UrlFetchApp.fetch(formText).getContentText();
var doc = DocumentApp.create("temp");
doc.getBody().editAsText().setText(html);
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
var blob = file.getBlob();
var bytes = blob.getBytes();
var encoded = Utilities.base64Encode(bytes);
file.setTrashed(true);
return encoded
}
element.setAttribute('href', 'data:text/html;base64,' + encoded);
修改脚本:
在这种情况下,请在Google Apps脚本端修改getRAW()
,如下所示
function downloadRAW() {
var formText = 'https://www.google.com/';
var html = UrlFetchApp.fetch(formText).getContentText();
var doc = DocumentApp.create("temp");
doc.getBody().editAsText().setText(html);
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
var blob = file.getBlob();
var bytes = blob.getBytes();
var encoded = Utilities.base64Encode(bytes);
file.setTrashed(true);
return encoded
}
element.setAttribute('href', 'data:text/html;base64,' + encoded);
- 在这个修改中,首先,检索到的HTML数据被放入作为临时文档创建的Google文档中,然后,Google文档被转换为PDF数据并转换为base64数据,然后返回数据。并且,移除临时文档
- 从
,如果您想将其导出为文本文件,下面的修改如何(或.html,如果可能)
- 谷歌应用程序脚本端:
function downloadRAW() { var formText = 'https://www.google.com/'; var blob = UrlFetchApp.fetch(formText).getBlob().setContentType("text/html"); var bytes = blob.getBytes(); var encoded = Utilities.base64Encode(bytes); return encoded }
- Javascript方面:
function downloadRAW() { var formText = 'https://www.google.com/'; var blob = UrlFetchApp.fetch(formText).getBlob().setContentType("text/html"); var bytes = blob.getBytes(); var encoded = Utilities.base64Encode(bytes); return encoded }
- 在这种情况下,请修改
element.setAttribute('href','data:application/pdf;base64',+encoded)代码>如下所示
function downloadRAW() { var formText = 'https://www.google.com/'; var html = UrlFetchApp.fetch(formText).getContentText(); var doc = DocumentApp.create("temp"); doc.getBody().editAsText().setText(html); doc.saveAndClose(); var file = DriveApp.getFileById(doc.getId()); var blob = file.getBlob(); var bytes = blob.getBytes(); var encoded = Utilities.base64Encode(bytes); file.setTrashed(true); return encoded }
element.setAttribute('href', 'data:text/html;base64,' + encoded);
- 在这种情况下,请修改
- 谷歌应用程序脚本端:
- 从你的问题中,我无法理解如何将Google Apps脚本端的
值赋予encoded
var encoded=window.value。因此,如果您想查看这个示例脚本。我想这条线可能有用
- 当HTML块转换为
时,无法检索原始HTML代码。得到了渲染结果。请小心这个application/json
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
function downloadRAWPDF() {
// window.value is a global variable that contains base64 encoded content (passed from server)
var encoded = window.value;
var decoded = atob(encoded);
var doc = new jsPDF();
// Resize text to fit in an A4 page
var splitTitle = doc.splitTextToSize(decoded, 270);
var pageHeight = doc.internal.pageSize.height;
doc.setFontType("normal");
doc.setFontSize("11");
var y = 7;
for (var i = 0; i < splitTitle.length; i++) {
if (y > 280) {
y = 10;
doc.addPage();
}
doc.text(15, y, splitTitle[i]);
y = y + 7;
}
doc.save('myPDF.pdf');
}
要将文件转换为html文件,@Tanaike建议的方法非常完美:
data:text/html;base64,+编码的
PDF是二进制文件,而不是base64encoded@freefaller所以我想我不能这么做。。。如果我将pdf1(代码的第一部分)返回给客户端,有没有办法使其可下载?(这是application/pdf中的一个blob)对不起,我对应用程序脚本一无所知,但是当我处理二进制文件(来自服务器端的.Net应用程序)时,我将头值设置为包含“附件”。可能值得检查,特别是下载属性谢谢你的帮助,我找到了一些使用库实现我想要的解决方案,我将在这里发布解决方案。您提出的解决方案很好,使用谷歌文档保存并转换为PDF的方式非常聪明!我在JavaScript客户端代码中使用了window.value作为全局变量,目前正在搜索一些workaround@Fabio谢谢你的回复。很抱歉,我的回答对你的情况没有帮助。这是因为我的技术差。我再次道歉。但是,我认为我的方法可能对其他用户有用。所以,在这种情况下,我想留下我的答案。别担心,你的方法很好,很聪明,你的回答很详细,有人可以利用它,所以留下你的答案。再次感谢您的帮助!