简介
我正在尝试将 Europass Webservice 与我目前正在开发的网站集成。
此 Web 服务允许您通过 XML 或 JSON 文件获取 PDF 或 Word 简历。
他们提供与他们的 WS 和示例 XML 通信的信息 (here) ,但您可以自己做,因为您尊重他们的模式。
为确保 xml 可以使用远程上传服务,并在他们的网站上查看从您的 XML 生成的简历。
我正在使用 REST 服务,更具体地说是 XML 到 PDF CV
我的疑问
我的问题是我可以与 Web 服务通信并且我也得到了 OK 响应(太棒了!),但是在下载 PDF 时它是空白的。
我在这里错过了什么?你们能指导我吗?
要重现此内容,请复制下面的代码并添加此 xml 的内容到 xmlcontent 路径中的文件。
代码
//POST
string xmlContent = File.ReadAllText("D:\\Documents\\CV.xml");
string URL = "https://europass.cedefop.europa.eu/rest/v1/document/to/pdf-cv";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/xml";
using (Stream webStream = request.GetRequestStream())
using (StreamWriter requestWriter = new StreamWriter(webStream, System.Text.Encoding.UTF8))
{
requestWriter.Write(xmlContent);
}
//RESPONSE
try
{
WebResponse webResponse = request.GetResponse();
using (Stream webStream = webResponse.GetResponseStream())
{
if (webStream != null)
{
using (StreamReader responseReader = new StreamReader(webStream))
{
string response = responseReader.ReadToEnd();
byte[] byteResponse = Encoding.UTF8.GetBytes (response);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=test.pdf"); // Save file
Response.AddHeader("Content-Length", byteResponse.Length.ToString());
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(byteResponse);
Response.End();
}
}
}
最佳答案
您从网络服务调用收到的响应正文包含 PDF 的原始字节。
通过 StreamReader
运行这些字节您将它们视为文本,然后尝试使用 GetBytes
将该“文本”转换回字节数组.我怀疑这些步骤正在破坏您的数据。
您应该能够将 PDF 字节直接复制到您自己的 output stream :
// note: this code is completely untested, i don't even know whether it compiles
using (var webResponse = request.GetResponse())
using (var webStream = webResponse.GetResponseStream())
{
if (webStream != null)
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=\"test.pdf\"");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
webStream.CopyTo(Response.OutputStream);
Response.Flush();
Response.End();
}
}
关于c# - 如何将 Web 服务响应转换为 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29412620/