我有一个像0x255044462D312E330D0A312030206F626A0D0
这样的字符串,我试图将其转换为PDF
。
代码:
var inputStr="my hex string";
pdfFile = Encoding.Unicode.GetBytes(inputStr).ToArray();
return new FileContentResult(pdfFile, "application/pdf");
它无法正常工作("无法加载PDF文档"是我得到的消息)。我究竟做错了什么?我还尝试更改response
:
Response.ClearHeaders();
Response.Clear();
Response.AddHeader("Content-Type", "application/pdf");
Response.AddHeader("Content-Length", pdfFile.Length.ToString());
Response.AddHeader("Content-Disposition", "inline; filename=sample.pdf");
Response.BinaryWrite(pdfFile);
Response.Flush();
Response.End();
更新
我不知道字符串最初是如何编码的
更新2
所以我收到" -2"因为有人认为这个问题是重复的(顺便说一句,他摒弃了他的答案)?谢谢
答案 0 :(得分:1)
您需要使用某种API来创建PDF文档。 PDF文件是复杂的文件格式,您创建的文件基本上只是一个文本文件。
我假设错误"无法加载PDF文档"来自任何试图打开PDF文件的软件。它正在获取你指定的mime标题,说它是一个pdf文件,但是当它看起来它没有找到一个pdf文件,只是一个文本文件。
作为一个例子,尝试从" application / pdf"更改mime类型。 to" text / plain"并且您应该会发现它会为您提供一个包含输入文本的文本文件。
尽管已关闭,但主题Creating pdf files at runtime in c#讨论了可用于创建PDF的API。
答案 1 :(得分:1)
假设您的十六进制字符串实际上是有效的pdf文件,您需要将其转换为如下字节数组:
var inputStr = "0x255044462D312E330D0A312030206F626A0D0";
var hex = inputStr.Substring(2);
int NumberChars = hex.Length / 2;
byte[] pdfFile = new byte[NumberChars];
using (var sr = new StringReader(hex))
{
for (int i = 0; i < NumberChars; i++)
pdfFile[i] = Convert.ToByte(new string(new char[2]{(char)sr.Read(), (char)sr.Read()}), 16);
}