gpt4 book ai didi

node.js - 通过 Nodejs Express Server 检索时生成的 SSRS PDF 返回空白

转载 作者:搜寻专家 更新时间:2023-10-31 23:47:55 25 4
gpt4 key购买 nike

老读者,第一次海报。

我正在尝试从 SSRS 生成一个 PDF 文件并将其提供给最终用户,中间有一个 NodeJS 服务器 (Express) 作为服务层。我们不想向用户公开任何与 SSRS 相关的内容,因此我让 Node 服务器将链接放在一起并向服务器发出获取请求。

问题是,我可以通过 SSRS 的响应正文获取 PDF 并将其传递到 HTML 页面,但尽管页数和文件大小正确,但文件完全空白。即使我将数据写入文件作为测试也会发生这种情况。

在网络浏览器中使用 POSTMAN 或 curl 时,或从 Chrome 执行直接 GET 请求时,它会成功加载文件作为附件且没有正文。然而,当我通过 Node 执行相同的获取请求时,我得到一个 header ,声称有一个附件以及一个包含 PDF 代码的正文,我只能想象它在到达我的 Node 服务器时被转换为 utf-8 编码。因为报告是通过 SSRS 生成的,所以我不能使用 express 的 response.download() 或类似的功能,因为在生成 PDF 之前我没有确切的路径。

让事情变得更复杂,我不得不依赖于限制在 http-ntlm library 中的请求首先从我们的 SSRS 服务器获得响应,因此据我所知,管道和类似方法对我来说不可用。我选择它主要是因为它允许我通过 http 而不是 https 访问 SSRS(我们的 SSRS 配置不提供对 https 的响应)。

Node 服务器函数:

exports.getReportPDF = function (req, resp)
{
//-Gets the link info from the client side
var myLink = req.body;
var fileLink = myLink.Data;

httpntlm.post({
url: fileLink,
username: 'username',
password: 'password',
workstation: 'workstation',
domain: 'domain'
}, function (err, res){ //-Returns once the stream is complete
if(err) return err;

var resBase64 = new Buffer(res.body).toString('base64');
resp.setHeader('Content-Type', 'application/octet-stream');
resp.setHeader('Content-Transfer-Encoding', 'base64');

fs.writeFile("somethingToCheckAgainst.pdf", resBase64, function(writeErr) {
if(writeErr) {
console.log(writeErr);
} else {
console.log("The file was saved!");
}
});
console.log(resp.get('Content-Disposition'));
resp.send(resBase64);
});

}

客户端功能 block :

xmlhttp.onreadystatechange = function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var results = xmlhttp.responseText;

window.open("data:application/pdf;base64, " + results);
}
}

这是一个快速而肮脏的原型(prototype),所以我不关心速度和困惑的代码,但更喜欢干净简单。如何让在新窗口中打开的 PDF 或在服务器上创建的 PDF 正确显示(不是完全空白)?这是 Node 与来自 SSRS 的数据交互的问题,还是由我处理数据的方式引起的?

最佳答案

我有一段时间遇到同样的问题。努力成为一个好公民,并在经过几天的故障排除后发布为我解决此问题的方法,因为答案似乎没有出现在互联网上的其他任何地方。

在 httpntlm.post 中,添加另一个选项 - “binary : true”。如果您不这样做,response.body 会自动转换为 UTF-8 字符串,这会损坏 PDF 并使其显示为空白。

关于node.js - 通过 Nodejs Express Server 检索时生成的 SSRS PDF 返回空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com