引言
我试图将Europass Webservice与我目前正在开发的网站整合。
此WebService允许您通过XML或JSON文件获取PDF或Word CV。
他们提供与WS和示例XML (here)进行通信的信息,但您可以自己做,因为您尊重他们的架构。
要确保xml正常,请使用远程上传服务,并在其网站上查看XML中生成的简历。
我使用REST服务,更具体地说是XML到PDF CV
MY DOUBT
我的问题是我可以通过Web服务进行通信,并且我也得到了一个好的响应(太棒了!),但是在下载PDF时它全部是空白的。
我在这里想念的是什么?你能指导我吗?
要重现此操作,请复制下面的代码,并将此xml的内容添加到xmlcontent路径中的文件中。
CODE
//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();
}
}
}
答案 0 :(得分:3)
您从webservice调用中收到的响应正文包含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();
}
}
答案 1 :(得分:0)
您在服务器上提供文件路径
WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
return File.OpenRead(downloadFilePath);