最近在寫一個移動端API介面,其中有一個需求:介面返回附件url地址讓手機端調用實現文件線上預覽。大體實現思路:把doc、xls等文本格式文件轉換為pdf,轉換後的pdf文件存放在伺服器上面,方便第二次調用(目前代碼只實現doc和xls文件轉換,如大家有什麼更好的方案,歡迎大家留言)。 廢話不多說, ...
最近在寫一個移動端API介面,其中有一個需求:介面返回附件url地址讓手機端調用實現文件線上預覽。大體實現思路:把doc、xls等文本格式文件轉換為pdf,轉換後的pdf文件存放在伺服器上面,方便第二次調用(目前代碼只實現doc和xls文件轉換,如大家有什麼更好的方案,歡迎大家留言)。
廢話不多說,代碼如下:
/// <summary>
/// 附件查看介面
/// </summary>
/// <param name="At_ID">附件主鍵</param>
/// <returns>json</returns>
private string GetFilePreviewMethod(string At_ID)
{
var model = new SendFilePreviewModel();
try
{
var SqlStr = new StringBuilder(@"SELECT * FROM DataTable WHERE At_ID=@At_ID");
SqlParam[] pars = { new SqlParam("@At_ID", At_ID) };
DataTable dt = BaseSql.S().GetDataTable(SqlStr, pars);
if (dt != null && dt.Rows.Count > 0)
{
//源文件相對路徑
var SourePathStr = new StringBuilder();
SourePathStr.Append(dt.Rows[0]["F_Url"].ToString());
SourePathStr.Append(dt.Rows[0]["F_RealName"].ToString());
SourePathStr.Append(dt.Rows[0]["F_Type"].ToString());
//PDF文件相對路徑
var SavePathStr = new StringBuilder();
SavePathStr.Append(dt.Rows[0]["F_Url"].ToString());
SavePathStr.Append("/PDF/");
SavePathStr.Append(dt.Rows[0]["F_RealName"].ToString());
SavePathStr.Append(".pdf");
if (!File.Exists(HttpContext.Current.Server.MapPath(SourePathStr.ToString())))
{
model.status = "01"; model.msg = "文件不存在";
}
else
{
string path = ""; string error = "";
bool Result =new HelperMethod().OfficeToPdfMethod(dt.Rows[0]["F_Type"].ToString(), SourePathStr.ToString(), SavePathStr.ToString(), ref error, ref path);
if (Result)
{
model.status = "00"; model.msg = "獲取成功";
model.url = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + path;
}
else
{
model.status = "01";model.msg = error;
}
}
}
else { model.status = "01";model.msg = "找不到文件"; }
}
catch (Exception ex)
{
model.status = "01"; model.msg = ex.Message;
TxtLog.WriteLog(ex);
}
return JsonConvert.SerializeObject(model);
}
// <summary>
/// 文件轉換為PDF格式方法
/// </summary>
/// <param name="FileType">文件類型</param>
/// <param name="SoursePath">源文件相對路徑</param>
/// <param name="SavePath">PDF文件相對路徑</param>
/// <param name="error">提示信息</param>
/// <param name="path">返回url相對路徑</param>
/// <returns></returns>
public bool OfficeToPdfMethod(string FileType, string SoursePath, string SavePath, ref string error, ref string path)
{
bool Result = true;
if (!File.Exists(Server.MapPath(SavePath)))
{
try
{
var SaveFolder = Server.MapPath(SavePath.Substring(1, SavePath.LastIndexOf('/')));
if (!Directory.Exists(SaveFolder)) { Directory.CreateDirectory(SaveFolder); }
switch (FileType.ToLower())
{
case ".doc":
case ".docx":
Document doc;
doc = new Document(Server.MapPath(SoursePath));
doc.Save(Server.MapPath(SavePath));
path = SavePath;
break;
case ".xls":
case ".xlsx":
Workbook xls;
xls = new Workbook(Server.MapPath(SoursePath));
xls.Save(Server.MapPath(SavePath));
path = SavePath;
break;
default:
path = SoursePath;
break;
}
}
catch (Exception ex) { error = ex.Message; Result = false; }
}
else
{
path = path = SavePath;
}
return Result;
}