ConvertAPI上传doc流转PDF返回乱码且页数异常如何解决?
修复方案
核心原因排查&对应解决
- 流位置异常
虽然用字节数组初始化MemoryStream默认指针位于起始位置,仍建议手动重置指针位置,避免因前置操作导致指针偏移,传入空/无效二进制内容到转换接口:var stream = new MemoryStream(documents[0].content); // 新增这行 stream.Position = 0; - 转换格式不匹配
确认你存储的文档实际格式:如果是OOXML格式的docx文件,仅改后缀为doc不会改变实际文件结构,此时需要把转换方法的源格式参数从"doc"改为"docx",格式不匹配会导致转换引擎解析错误,出现乱码、页数异常的问题。 - 中文编码适配
文档包含中文内容时,需要显式指定转换的语言参数,让转换引擎使用对应编码解析文档内容:var convertToPdf = await convertApi.ConvertAsync("doc", "pdf", new ConvertApiFileParam(stream, "test.doc"), // 新增中文语言参数 new ConvertApiParam("language", "zh-CN") ); - 输出流处理校验
拿到返回的outputStream后,不要用文本编码(比如UTF8)读取PDF内容,PDF是二进制格式,需要直接读取全量字节数组返回给前端或者写入文件,同时设置对应响应头:// 示例:输出到响应 Response.ContentType = "application/pdf"; Response.Headers.Add("Content-Disposition", "attachment; filename=converted.pdf"); await outputStream.CopyToAsync(Response.Body);
修复后完整示例代码
var convertApi = new ConvertApi("<my key>"); var stream = new MemoryStream(documents[0].content); // 重置流指针 stream.Position = 0; var convertToPdf = await convertApi.ConvertAsync("doc", "pdf", new ConvertApiFileParam(stream, "test.doc"), // 适配中文编码 new ConvertApiParam("language", "zh-CN") ); var outputStream = await convertToPdf.Files[0].FileStreamAsync(); // 重置输出流指针再读取 outputStream.Position = 0;
内容的提问来源于stack exchange,提问作者Karthik Ganesan
相关产品推荐
相关产品推荐

