使用OfficeJ我想将Word文档另存为PDF并将该文件发布到Api。
Office.context.document.getFileAsync可让您以3种格式选择整个文档:
我将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文件吗?
正如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分钟。
答案 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);