asp实现在线查看(预览)pdf,ppt,word,excel⽂件
using Aspose.Cells;
using Aspose.Slides.Pptx;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web.Http;
namespace DocOnlineView.UI.Controllers.MVCAPI
{
public class HomeController : ApiController
{
[HttpGet]
public DataTable CourseViewOnLine(string fileName)
{
DataTable dtlist = new DataTable();
dtlist.Columns.Add(“TempDocHtml”, typeof(string));
string fileDire = "/Files";
string sourceDoc = Path.Combine(fileDire, fileName);
string saveDoc = "";
string docExtendName = System.IO.Path.GetExtension(sourceDoc).ToLower();
bool result = false;
if (docExtendName == ".pdf")
{
//pdf模板⽂件
string tempFile = Path.Combine(fileDire, "temppdf.html");
saveDoc = Path.Combine(fileDire, "viewFiles/onlinepdf.html");
result = PdfToHtml(
sourceDoc,
System.Web.HttpContext.Current.Server.MapPath(tempFile),
System.Web.HttpContext.Current.Server.MapPath(saveDoc));
}
else
{
saveDoc = Path.Combine(fileDire, "viewFiles/onlineview.html");
result = OfficeDocumentToHtml(
System.Web.HttpContext.Current.Server.MapPath(sourceDoc),
System.Web.HttpContext.Current.Server.MapPath(saveDoc));
}
if (result)
{
dtlist.Rows.Add(saveDoc);
}
return dtlist;
}
private bool OfficeDocumentToHtml(string sourceDoc, string saveDoc)
{
bool result = false;
//获取⽂件扩展名
string docExtendName = System.IO.Path.GetExtension(sourceDoc).ToLower();        switch (docExtendName)
{
case ".doc":
case ".docx":
Aspose.Words.Document doc = new Aspose.Words.Document(sourceDoc);                doc.Save(saveDoc, Aspose.Words.SaveFormat.Html);
result = true;
break;
case ".xls":
case ".xlsx":
Workbook workbook = new Workbook(sourceDoc);
workbook.Save(saveDoc, SaveFormat.Html);
result = true;
break;
case ".ppt":
case ".pptx":
//templateFile = templateFile.Replace("/", "\\");
//string templateFile = sourceDoc;
//templateFile = templateFile.Replace("/", "\\");
PresentationEx pres = new PresentationEx(sourceDoc);
pres.Save(saveDoc, Aspose.Slides.Export.SaveFormat.Html);
result = true;
getsavefilenamebreak;
default:
break;
}
return result;
}
private bool PdfToHtml(string fileName, string tempFile, string saveDoc)
{
//---------------------读html模板页⾯到stringbuilder对象⾥----
StringBuilder htmltext = new StringBuilder();
using (StreamReader sr = new StreamReader(tempFile)) //模板页路径
{
String line;
while ((line = sr.ReadLine()) != null)
{
htmltext.Append(line);
}
sr.Close();
}
fileName = fileName.Replace("\\", "/");
//----------替换htm⾥的标记为你想加的内容
htmltext.Replace("$PDFFILEPATH", fileName);
//----------⽣成htm⽂件------------------――
using (StreamWriter sw = new StreamWriter(saveDoc, false,
System.Text.Encoding.GetEncoding("utf-8"))) //保存地址
{
sw.WriteLine(htmltext);
sw.Flush();
sw.Close();
}
return true;
}
}
}
⽂件:(访问密码:551685)
以下内容⽆关:
-------------------------------------------分割线---------------------------------------------
需求背景,给不规则图形添加边框
在我们⽇常开发中,时长会遇到⼀些⾮矩形、⾮圆形的图案。类似下⾯这些:
image
使⽤纯 CSS,搭配⼀些技巧,是可以制作出上⾯的图形的,当然这只是需求的第⼀步。
紧接着,可能会有要给上述图形添加边框的诉求,这个时候,CSS 就很难办到了。
尝试使⽤ drop-shadow 添加边框
第⼀种⽅法,我们可以尝试使⽤ drop-shadow,给不规则的图形,添加⼀个外阴影。
我们以⼀个箭头图形为例使⽤ CSS 简单实现它的其中⼀种⽅式如下:
.arrow-button { position: relative; width: 180px; height: 64px; background: #f49714;
&::after {
content: “”;
position: absolute;
width: 32px;
height: 64px;
top: 0;
right: -32px;
background:
linear-gradient(-45deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%),
linear-gradient(-135deg, transparent 0, transparent 22px, #f49714 22px, #f49714 100%);
background-size: 32px 32px;
background-repeat: no-repeat;
background-position: 0 bottom, 0 top;
}
}
image
我们通过给 .arrow-button 添加⼀个 drop-shadow,可以实现给不规则图形添加⼀个阴影,效果如下:
.arrow-button {
filter: drop-shadow(0px 0px 2px #000);
}
image
drop-shadow ⽅案的局限性
使⽤ drop-shadow ⽅案的局限性在于,drop-shadow 只能对不规则图形⽣成阴影,⽆法⽣成不带模糊的边框效果。
上述图形添加 drop-shadow 的效果如下,与我们想要的实体不带模糊的边框还是差了⼀点:
image
使⽤ SVG feMorphology 滤镜添加边框
我们还可以换个思路,复制⼀个原图形,再将其稍微放⼤⼀点点改变为边框的颜⾊,然后两个图形叠加在⼀起,就能够⽣成⼀个带边框的不规则图形了。
CSS 中也有能够放⼤元素的能⼒ transform: scale(),但是本⾝实现⼀个原图形的代码可能已经⾮常复杂了,再叠加⼀个可能会显得不太优雅,我们得另辟蹊径,寻其他类似的实现⽅案。
这⾥,我们尝试使⽤ SVG的 feMorphology 滤镜来实现给不规则图形添加边框。
如果你对 SVG 滤镜还不算太了解,可以简单看看我的这篇⽂章⼊门:有意思!强⼤的 SVG 滤镜
简单介绍下 feMorphology 滤镜
feMorphology 滤镜
feMorphology 为形态滤镜,它的输⼊源通常是图形的 alpha 通道,⽤来它的两个操作可以使源图形腐蚀(变薄)或扩张(加粗)。
使⽤属性 operator 确定是要腐蚀效果还是扩张效果。使⽤属性 radius 表⽰效果的程度,可以理解为笔触的⼤⼩。
operator:erode 腐蚀模式,dilate 为扩张模式,默认为 erode
radius:笔触的⼤⼩,接受⼀个数字,表⽰该模式下的效果程度,默认为 0
我们将这个滤镜简单的应⽤到⽂字上看看效果:
Normal Text
Normal Text
Normal Text
p { font-size: 64px; } .dilate { filter: url(#dilate); } .erode { filter: url(#erode); } 效果如下:最左边的是正
常⽂字,中间的是扩张的模式,右边的是腐蚀模式,看看效果,⾮常好理解:
image
借⽤ feMorphology 的扩张能⼒给不规则图形添加边框
利⽤ feMorphology 的扩张能⼒,我们可以提前准备好⼀个 SVG feMorphology 滤镜,其作⽤就是上述所说的:
复制⼀个原图形,再将其稍微放⼤⼀点点改变为边框的颜⾊,然后两个图形叠加在⼀起,就能够⽣成⼀个带边框的不规则图形了。
并且 SVG 滤镜可以⾮常简单的通过 CSS Filter 的 url 模式引⼊到各个不同的图形当中去,复⽤性⾮常的⾼。
该滤镜的简单代码如下:
简单浅析⼀下这段 SVG 滤镜代码:
将原图的不透明部分作为输⼊,采⽤了 dilate 扩张模式且程度为 radius=“1”,⽣成了⼀个⽐原图⼤ 1px 的⿊⾊图块
使⽤ feMerge 将⿊⾊图块和原图叠加在⼀起
我们还是给上述的 .arrow-button 添加⼀个 CSS filter filter: url(#outline),引⼊我们创建的 SVG 滤镜:
.arrow-button {
filter: url(#outline);
}
url 是 CSS 滤镜属性的关键字之⼀,url 模式是 CSS 滤镜提供的能⼒之⼀,允许我们引⼊特定的 SVG 过滤器,这极⼤的增强 CSS 中滤镜的能⼒。
看看效果:
image
Wow,这下成功了,通过 feMorphology 滤镜,我们成功的实现了给不规则的图形添加了边框效果,我能可以通过控制滤镜中的
radius=“1” 来控制边框的⼤⼩。
再将上述滤镜运⽤在各种不规则图形下看看效果:
image
效果还算可以,就是颜⾊是⿊⾊的。如果我们希望边框的颜⾊是其他颜⾊,有没有办法呢?
辅以 feFlood 和 feComposite 改变边框颜⾊
通过 feFlood 和 feComposite 两个 SVG 滤镜,可以给⽣成的图块上不同的颜⾊,代码如下:
通过 feFlood 中的 flood-color="green",即可控制⽣成的边框(图块)的颜⾊,这⾥设置为了绿⾊。应⽤到各个图形上的效果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。