将十六进制字符串转换为pdf

时间:2014-05-27 12:52:29

标签: c# pdf-generation

我有一个像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"因为有人认为这个问题是重复的(顺便说一句,他摒弃了他的答案)?谢谢

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);
}