使用OfficeJ

时间:2016-05-24 13:56:20

标签: c# pdf asp.net-web-api office-js

使用OfficeJ我想将Word文档另存为PDF并将该文件发布到Api。

Office.context.document.getFileAsync可让您以3种格式选择整个文档:

  • 压缩:将Office Open XML(OOXML)格式的整个文档(.pptx或.docx)作为字节数组返回
  • pdf :以PDF格式返回整个文档作为字节数组
  • text :仅将文档文本作为字符串返回。 (仅限Word)

我将PDF字节数组发布到WebApi操作,如下所示:

public async Task<IHttpActionResult> Upload([FromBody]byte[] bytes)
{
    File.WriteAllBytes(@"C:\temp\testpdf.pdf", bytes);
    return Ok();
}

在检查时,字节数组是由Office Js的getFileAsync创建的相同数组。

问题是用File.WriteAllBytes写的文件是否已损坏。如果我用记事本打开它,它是一串字节 - 37,80,68,70,45,49,46,53,13,10,37... and so on

知道为什么WriteAllBytes方法不会从OfficeJS pdf字节流创建PDF文件吗?

更新25/5/16

正如hawkeye @StefanHegny指出的那样,字节数组似乎是Ascii字符。将每个字节转换为char并将其写入PDF就会创建一个空白PDF,但在使用NotePad进行检查时,内容就像PDF文档一样,但与保存相同.docx时的内容完全不同。 a .pdf。

var content = "";
foreach (var b in model.Bytes)
{
    content += (char) b;
}

File.WriteAllText(@"C:\temp\testpdf.pdf", content);

另请注意,这非常慢 - 我的开发机器上的500kb PDF字节数组大约需要5分钟。

1 个答案:

答案 0 :(得分:1)

我有同样的pdf空问题,这是因为我正在转换为字符串并将字符串写入文件(编码问题),我解决了通过向c#代码发送逗号分隔的字节代码而不是转换为字符串,解析字节并使用File.WriteAllBytes()

C#代码:

     string[] strings = HttpUtility.HtmlDecode(pdf).Split(',');

     byte[] bytes = strings.Select(s => byte.Parse(s)).ToArray();

     System.IO.File.WriteAllBytes("filename.pdf", bytes);