C# 如何将WebService响应转换为PDF?
导言 我正在尝试将EuropassWebService与我目前正在开发的网站集成 此Web服务允许您通过XML或JSON文件获取PDF或Word CV 它们提供与WS和示例XML通信的信息,但您可以自己做,因为您尊重它们的模式 要确保xml正常,请使用远程上载服务,并在他们的网站上查看xml生成的简历 我使用的是REST服务,更具体地说是XML到PDF CV 我的怀疑 我的问题是,我可以与Web服务进行通信,并且我也得到了一个OK的响应(太好了!),但是当下载PDF时,它都是空白的 我在这里错过了什么?你们能指引我吗 要复制此内容,请复制下面的代码,并将其内容添加到xmlcontent路径中的文件中 代码C# 如何将WebService响应转换为PDF?,c#,asp.net,xml,web-services,C#,Asp.net,Xml,Web Services,导言 我正在尝试将EuropassWebService与我目前正在开发的网站集成 此Web服务允许您通过XML或JSON文件获取PDF或Word CV 它们提供与WS和示例XML通信的信息,但您可以自己做,因为您尊重它们的模式 要确保xml正常,请使用远程上载服务,并在他们的网站上查看xml生成的简历 我使用的是REST服务,更具体地说是XML到PDF CV 我的怀疑 我的问题是,我可以与Web服务进行通信,并且我也得到了一个OK的响应(太好了!),但是当下载PDF时,它都是空白的 我在这里错过
//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();
}
}
}
您可以在服务器上提供文件路径
WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
return File.OpenRead(downloadFilePath);
从webservice调用接收的响应正文包含PDF的原始字节 通过在数据库中运行这些字节,您将它们视为文本,然后尝试使用将这些“文本”转换回字节数组。我怀疑这些步骤正在破坏您的数据 您应该能够将PDF字节直接复制到您自己的:
什么是“响应”对象?在任何地方都看不到它的定义。我认为您在这里错过的是(从站点):“在一个名为europass xml的参数中。”您正在传递一个有效的xml,而不是在预期的容器中。这就是为什么他们使用名为europass xml的textarea将xml直接发布到他们的站点。此对象允许您向客户端发送HTTP响应数据,并包含有关该响应的信息。我正在使用ASP.NET4.5Framework@LocEngineer但是如果出了问题,我怎么能得到肯定的回答呢?干杯你发了一个正确的回复。但是当他们查询容器“europass xml”时,它是空的=>因此您会收到一个空的pdf。Hello@BMaximus,我使用的文件路径是获取xmlcontent,然后在POST请求中发送。你能说得更具体一点吗?Chearshello@LukeH那是一次难以置信的打击!非常感谢!:)
// 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();
}
}