精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

.NET Core 使用 LibreOffice 實現 Office 預覽(Docker 部署)

開發 架構
目前在做的零代碼產品中的表單附件控件,同樣面臨著 Office 文件預覽的問題,現在技術棧采用了 .NET Core ,并使用容器化部署,自然就拋棄了 OWA 的方案。

前些年做云盤產品的時候,一個很核心的功能就是 Office 文件預覽,當時還沒有使用 .NET Core ,程序部署在 Windows Server 服務器上,文件預覽的方案采用了微軟的 OWA 。

目前在做的零代碼產品中的表單附件控件,同樣面臨著 Office 文件預覽的問題,現在技術棧采用了 .NET Core ,并使用容器化部署,自然就拋棄了 OWA 的方案。

本文簡單介紹下 OWA 的替代方案。

思路

  1. 在表單的附件控件上傳 Office 文件后,存儲到 MongoDB 中,并發消息給文件轉換程序。
  2. 文件轉換程序從 MongoDB 獲取 Office 文件,通過 Libreoffice 轉換為 PDF 文件。
  3. 將 PDF 文件存儲到 MongoDB 中,并將 PDF 文件在 MongoDB 中的 FileID 存儲到平臺和原始文件進行關聯。
  4. 在表單中點擊文件預覽時使用關聯的 PDF 的文件 ID 從 MongoDB 中獲取 PDF 文件進行展示。

準備

1、創建一個 .NET Core 的控制臺程序用來做文件的轉換。

2、下載 Libreoffice 安裝包、Libreoffice 中文語言包、jdk1.8 安裝包 、中文字體包。

圖片

3、搭建一臺 centos 虛擬機,并準備好 docker 環境。

版本

  • .NET Core:3.1
  • CentOS:7.6
  • Docker:
  • Liberoffice:7.3.5
  • RabbitMQ:3.8.2
  • MongoDB:5.0

開始

編寫控制臺程序進行文件轉換

1、創建一個名為 OfficeToPdf 的 .NET Core 控制臺程序,在 Main 方法中對消息隊列進行監聽。

static void Main(string[] args)  
{
try
{
var mqManager = new MQManager(new MQConfig
{
AutomaticRecoveryEnabled = true,
HeartBeat = 60,
NetworkRecoveryInterval = new TimeSpan(60),
Host = EnvironmentHelper.GetEnvValue("MQHostName"),
UserName = EnvironmentHelper.GetEnvValue("MQUserName"),
Password = EnvironmentHelper.GetEnvValue("MQPassword"),
Port = EnvironmentHelper.GetEnvValue("MQPort")
});
if (mqManager.Connected)
{
_logger.Log(LogLevel.Info, "RabbitMQ連接成功。");
_logger.Log(LogLevel.Info, "RabbitMQ消息接收中...");

mqManager.Subscribe<PowerPointConvertMessage>(Convert);
mqManager.Subscribe<WordConvertMessage>(Convert);
mqManager.Subscribe<ExcelConvertMessage>(Convert);
}
else
{
_logger.Warn("RabbitMQ連接初始化失敗,請檢查連接。");
Console.ReadLine();
}
}catch(Exception ex)
{
_logger.Error(ex.Message);
}
}

2、在 Convert 方法中對消息進行處理,首先根據消息的中的文件 ID 獲取文件:

Stream sourceStream = fileOperation.GetFile(officeMessage.FileInfo.FileId);  
if(sourceStream == null)
{
logger.Log(LogLevel.Error, $"文件ID:{officeMessage.FileInfo.FileId},不存在");
}
string filename = officeMessage.FileInfo.FileId;
string extension = System.IO.Path.GetExtension(officeMessage.FileInfo.FileName);
sourcePath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), filename + extension);
destPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), string.Format("{0}.pdf", filename));
logger.Log(LogLevel.Info, $"文件原路徑:{sourcePath}");
logger.Log(LogLevel.Info, $"文件目標路徑:{destPath}");
if (extension != null && (extension.Equals(".xlsx",StringComparison.OrdinalIgnoreCase) ||
extension.Equals(".xls", StringComparison.OrdinalIgnoreCase)))
{
if (!SetExcelScale(sourceStream, sourcePath))
return false;
}
else
{
byte[] sourceBuffer = new Byte[sourceStream.Length];
sourceStream.Read(sourceBuffer, 0, sourceBuffer.Length);
sourceStream.Seek(0, SeekOrigin.Begin);
if (!SaveToFile(sourceBuffer, sourcePath))
return false;
}

3、啟用 LibreOffice 進行文件轉換:

var psi = new ProcessStartInfo(  
"libreoffice7.3",
string.Format("--invisible --convert-to pdf {0}", filename + extension))
{RedirectStandardOutput = true};
// 啟動
var proc = Process.Start(psi);
if (proc == null)
{
logger.Error("請檢查 LibreOffice 是否成功安裝.");
return false;
}
logger.Log(LogLevel.Info, "文件轉換開始......");
using (var sr = proc.StandardOutput)
{
while (!sr.EndOfStream)
{ Console.WriteLine(sr.ReadLine());
} if (!proc.HasExited)
{ proc.Kill();
}}

logger.Log(LogLevel.Info, "文件轉成完成");

4、文件轉換成功后,存儲轉換后的 PDF 文件到 MongoDB,然后和原始文件進行關聯,下面代碼是調用了零代碼平臺中的接口進行處理,這里可以根據自己的業務需求自行修改 :

string host = EnvironmentHelper.GetEnvValue("ApiHost");  
string api = EnvironmentHelper.GetEnvValue("AssociationApi");
if (string.IsNullOrEmpty(api))
{
logger.Warn("請檢查 AssociationApi 環境變量的配置");
return false;
}
if (string.IsNullOrEmpty(host))
{
logger.Warn("請檢查 ApiHost 環境變量的配置");
return false;
}
string result = APIHelper.RunApiGet(host, $"{api}/{fileId}/{destFileId}");

構建 Libreoffice 基礎鏡像

1、在 centos 服務器上 /data 目錄中創建目錄 liberoffice-docker-build ,將上面提到的 Libreoffice 安裝包、Libreoffice 中文語言包、jdk1.8 安裝包 、中文字體包拷貝到該目錄中。

2、在該目錄中創建 Dockerfile 文件,內容如下:

RUN yum update -y && \
yum reinstall -y glibc-common && \
yum install -y telnet net-tools && \
yum clean all && \
rm -rf /tmp/* rm -rf /var/cache/yum/* && \
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#加入windows字體包
ADD chinese.tar.gz /usr/share/fonts/
ADD LibreOffice_7.3.5_Linux_x86-64_rpm.tar.gz /home/
ADD LibreOffice_7.3.5_Linux_x86-64_rpm_langpack_zh-CN.tar.gz /usr/
#執行安裝
RUN cd /home/LibreOffice_7.3.5.2_Linux_x86-64_rpm/RPMS/ \
&& yum localinstall *.rpm -y \
&& cd /usr/LibreOffice_7.3.5.2_Linux_x86-64_rpm_langpack_zh-CN/RPMS/ \
&& yum localinstall *.rpm -y \
#安裝依賴
&& yum install ibus -y \
#加入中文字體支持并賦權限
&& cd /usr/share/fonts/ \
&& chmod -R 755 /usr/share/fonts \
&& yum install mkfontscale -y \
&& mkfontscale \
&& yum install fontconfig -y \
&& mkfontdir \
&& fc-cache -fv \
&& mkdir /usr/local/java/ \
#清理緩存,減少鏡像大小
&& yum clean all
#安裝java環境
ADD jdk-8u341-linux-x64.tar.gz /usr/local/java/
RUN ln -s /usr/local/java/jdk1.8.0_314 /usr/local/java/jdk
#配置環境變量
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
#安裝 dotnet core 3.1 運行環境
RUN rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm \
&& yum install -y aspnetcore-runtime-3.1 \
&& yum clean all
WORKDIR /usr
EXPOSE 80
CMD /bin/bash

3、執行命令 docker build -t libreofficebase:v1.0 . 進行基礎鏡像的構建,構建好的基礎鏡像供文件預覽鏡像構建時使用。

構建文件預覽鏡像

1、在 centos 服務器的 /data 目錄中創建目錄 doc-preview-docker-build 。

2、將轉換程序 OfficeToPdf 進行編譯發布,將發布后的文件拷貝到目錄 doc-preview-docker-build 中。

3、在該目錄中創建 Dockerfile 文件,內容如下:

FROM libreofficebase:v1 #此處的鏡像就是上面構建的 Libreoffice 基礎鏡像
COPY . /app
WORKDIR /app
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "OfficeToPdf.dll"]

4、執行命令 docker build -t office-preview:v1.0 . 進行預覽鏡像的構建。

運行預覽容器

執行下面命令進行容器的創建:

docker run -d --name office-preview office-preview

最后

Office 預覽肯定有很多種方案,上面只是目前找到的一種可行的方法。

責任編輯:姜華 來源: 今日頭條
相關推薦

2016-12-06 10:23:24

.NETCore首例Office

2022-03-30 14:23:48

LibreOfficOffice開源

2022-02-21 12:05:49

LibreOffiLinux工具欄

2024-06-27 10:48:48

2017-09-25 07:58:20

DockerNet Core2.0均衡

2016-11-21 15:13:19

LinuxDocker.NET Core

2024-11-12 07:28:39

2021-11-14 07:34:57

.NETEventCounte性能

2024-05-10 07:31:32

IIS應用程序.NET Core

2024-11-28 08:57:21

分布式鏈路Skywalking

2012-07-17 10:17:13

Office 2013微軟

2023-08-08 10:23:34

2024-06-12 07:48:24

C#WebService.NET

2025-01-10 00:41:38

版本控制API

2025-01-02 15:16:26

Docker容器云計算

2024-05-31 13:07:29

.NET Core定時任務編程

2021-01-31 22:56:50

FromServiceASP

2021-02-28 20:56:37

NCache緩存框架

2021-03-10 09:40:43

LamarASP容器

2021-02-03 13:35:25

ASPweb程序
點贊
收藏

51CTO技術棧公眾號

99久久免费国产精精品| 正在播放国产对白害羞| 免费毛片b在线观看| 91在线视频免费91| 国产又爽又黄的激情精品视频| 免费在线观看h片| 国产一级成人av| 欧美亚洲动漫精品| 国产一级大片免费看| 台湾av在线二三区观看| 黑人巨大精品欧美一区| 97精品欧美一区二区三区| jizz中文字幕| 久久365资源| 欧美精品v国产精品v日韩精品| 欧美国产日韩激情| aaa在线观看| 99视频在线精品| 91精品国产综合久久香蕉最新版| 日韩欧美亚洲国产| 国产韩国精品一区二区三区| 亚洲激情在线观看| 亚洲精品视频三区| av日韩亚洲| 一区二区三区四区高清精品免费观看| 精品日韩电影| a网站在线观看| 久久综合九色综合欧美狠狠| 欧美激情视频一区二区三区不卡| 天天干天天舔天天操| 99re8这里有精品热视频8在线 | 人妻人人澡人人添人人爽| 中国av一区| 欧美精品一区二区久久婷婷| www亚洲成人| 国内小视频在线看| 国产精品女同互慰在线看| 国产原创精品视频| 成人深夜在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 久久精品视频7| 国产精品theporn| 超碰97人人做人人爱少妇| 免费一级特黄3大片视频| 神马香蕉久久| 亚洲国产成人在线播放| 日本中文字幕有码| 麻豆视频久久| 日韩一区二区三区免费观看| 视频在线观看免费高清| 免费观看成人性生生活片| 色综合久久中文字幕| 免费一级特黄毛片| 在线中文字幕-区二区三区四区| 国产精品视频观看| 午夜精品电影在线观看| 福利在线播放| 欧美国产一区视频在线观看| 日本一区二区三区免费看| 五月天婷婷视频| fc2成人免费人成在线观看播放 | 中文字幕一区二区三区日韩精品| 欧美精品v日韩精品v韩国精品v| 四季av一区二区三区| 日本久久一区| 欧美一区二区啪啪| 国产裸体视频网站| 国产ts一区| 日韩国产精品视频| 日韩精品无码一区二区三区久久久| 亚洲图片久久| 在线视频亚洲欧美| 亚洲女人久久久| 欧美一区二区三区另类| 久久久久国产视频| 一级片中文字幕| 日日噜噜夜夜狠狠视频欧美人| 国产精品黄色av| 国产精品久久久久久免费| 国产精品一区二区三区99| 春色成人在线视频| 美国一级片在线免费观看视频 | 婷婷六月国产精品久久不卡| 在线中文字幕一区二区| 狠狠干狠狠操视频| 成人另类视频| 亚洲桃花岛网站| 黄色片子在线观看| 亚洲精品美女91| 国产aaa精品| 国产男男gay网站| 成人动漫精品一区二区| 欧美日韩在线观看一区| 久久久久久久久免费视频| 亚洲电影中文字幕在线观看| 欧在线一二三四区| 久久精品一级| 亚洲欧美激情视频| 疯狂试爱三2浴室激情视频| 亚洲乱码视频| 91精品久久久久久久久久久 | 国产亚洲欧美视频| www.毛片com| 久久精品综合| 成人区精品一区二区| 国产最新视频在线观看| 玉米视频成人免费看| 久久精品免费网站| 国语一区二区三区| 中文字幕日韩欧美| 最新中文字幕一区| 国产成人三级在线观看| 色狠狠久久av五月综合| 波多野结衣久久| 欧美喷水一区二区| 人妻体内射精一区二区| 国产精品分类| 国产日韩欧美在线| 每日更新av在线播放| 亚洲第一狼人社区| av在线免费看片| 国产午夜一区| 欧美在线不卡区| 亚洲精品成人电影| 国产精品青草久久| 看欧美ab黄色大片视频免费| 久久视频在线观看| 欧美丰满少妇xxxxx做受| 91极品身材尤物theporn| 久久亚洲春色中文字幕久久久| 国产xxxx振车| 久久的色偷偷| 久久综合色影院| 亚洲视频久久久| 国产精品欧美久久久久无广告 | 99riav视频一区二区| 精品亚洲一区二区三区在线播放| 九九视频在线免费观看| 精品一区二区三区久久久| 日本一区二区三区视频在线播放 | 欧美日韩免费在线观看| 无码人妻一区二区三区免费n鬼沢| 国产精品99久久| 国产美女主播一区| 中文字幕在线播放| 欧美日韩在线亚洲一区蜜芽| 日本少妇xxxxx| 三级精品在线观看| 三区精品视频观看| 中文在线资源| 一本色道久久综合狠狠躁篇怎么玩| 精品成人免费视频| 91视频观看免费| 久久久久久久激情| 加勒比久久综合| 国产精品高潮呻吟久久av无限| 国产大学生校花援交在线播放| 在线看国产日韩| 国产精品无码无卡无需播放器| 奇米影视7777精品一区二区| 午夜视频久久久| crdy在线观看欧美| 欧美黑人性生活视频| 日韩在线视频第一页| 同产精品九九九| 女人又爽又黄免费女仆| 蜜桃精品视频在线观看| 中文字幕一区二区三区精彩视频 | 久久久一本精品99久久精品| 极品美鲍一区| 国产亚洲欧美日韩美女| 91麻豆国产在线| 一区二区三区中文免费| 免费的av网站| 日韩av午夜在线观看| 中国一区二区三区| 亚洲一区二区三区在线免费| 欧美一区亚洲一区| 尤物视频在线免费观看| 欧美成人免费网站| 国产中文字幕视频| 国产精品成人午夜| 日本人添下边视频免费| 男人的天堂亚洲在线| 日韩精品电影网站| 美女精品久久| 国产不卡一区二区在线播放| 日本综合在线| 亚洲国产精品女人久久久| 99久久久无码国产精品免费蜜柚| 亚洲欧美在线观看| 天天躁日日躁狠狠躁av麻豆男男| 在线电影一区| 亚洲欧美日韩精品在线| 草草视频在线一区二区| 国产成人精品日本亚洲| 日日夜夜天天综合入口| 亚洲欧美国产日韩天堂区| 国产三级午夜理伦三级| 岛国av在线不卡| 成年人午夜剧场| 久久久久久免费网| 国产chinesehd精品露脸| 狂野欧美性猛交xxxx巴西| 中文精品无码中文字幕无码专区 | 精品国产亚洲一区二区在线观看| 91sao在线观看国产| 国产精品久久久久久福利| 日韩激情在线视频| 国产成人三级一区二区在线观看一| 色综合天天综合网天天狠天天| 丰满少妇被猛烈进入一区二区| 26uuu久久综合| 亚洲性图第一页| 毛片基地黄久久久久久天堂| 91传媒久久久| 国产综合婷婷| 日本不卡一区二区三区四区| 欧美日韩中文一区二区| 久久久99国产精品免费| 国产 日韩 欧美 综合 一区| 91影视免费在线观看| 亚洲综合av一区二区三区| 2019中文在线观看| 男女在线视频| 欧美成人手机在线| 黄色av电影在线播放| 一个色综合导航| 清纯唯美亚洲色图| 亚洲精品aⅴ中文字幕乱码| 成 人 黄 色 片 在线播放| 欧美久久一二区| 中文字幕欧美色图| 欧美亚洲自拍偷拍| 欧美特级黄色片| 欧美性xxxx极品高清hd直播| 国产无精乱码一区二区三区| 亚洲精品欧美激情| 国产精品国产精品88| 亚洲欧洲成人精品av97| 午夜国产福利视频| 国产精品护士白丝一区av| 国产综合精品久久久久成人av| 久久久综合视频| 国产男女猛烈无遮挡a片漫画 | √天堂8资源中文在线| 久久久久国产精品www| 欧洲一区二区三区| 欧美激情久久久| 福利小视频在线| 国外视频精品毛片| 亚洲风情在线资源| 欧美壮男野外gaytube| 厕沟全景美女厕沟精品| 日本免费一区二区三区视频观看| 午夜欧美巨大性欧美巨大 | 欧美一级黄视频| 欧美图区在线视频| 国产又粗又猛又爽| 日韩欧美中文一区二区| 亚洲黄色在线免费观看| 亚洲精品videossex少妇| 污视频软件在线观看| 亚洲毛茸茸少妇高潮呻吟| 精品视频二区| 日韩最新在线视频| 欧美大胆的人体xxxx| 久久久久久香蕉网| 三上悠亚国产精品一区二区三区| 国产成人一区二区| 亚州精品国产| 国产精品区一区二区三含羞草| 欧美电影在线观看免费| 色播亚洲视频在线观看| 亚洲电影影音先锋| 欧美黑人经典片免费观看| 日韩精品91亚洲二区在线观看| 97超碰成人在线| 盗摄精品av一区二区三区| 成年人网站免费看| 国产精品拍天天在线| 国产亚洲色婷婷久久99精品| 欧美日韩免费网站| 国产精品久久久久久免费 | 在线亚洲伦理| 天天操天天爽天天射| 国产精品一区二区在线播放| 99久久人妻精品免费二区| 国产精品国产三级国产aⅴ无密码| 福利所第一导航| 欧美午夜精品伦理| 国产男女裸体做爰爽爽| 亚洲美女自拍视频| 超碰个人在线| 日韩美女av在线免费观看| 久久久91麻豆精品国产一区| 免费成人av网站| 欧美人成在线| 久久久精品麻豆| 北条麻妃一区二区三区| 69xxx免费| 五月综合激情日本mⅴ| 亚洲性生活大片| 亚洲激情第一页| 日本中文字幕中出在线| 国产精品va在线播放| 秋霞影视一区二区三区| 一二三在线视频| 免费xxxx性欧美18vr| 国产精品入口麻豆| 国产精品成人免费| 日韩美一区二区| 亚洲成人在线视频播放| 国产剧情在线| 国产欧美一区二区三区视频| 妖精视频一区二区三区| 丰满的少妇愉情hd高清果冻传媒| 老色鬼精品视频在线观看播放| 不卡一区二区在线观看| 香港成人在线视频| 亚洲黄色小说网| 美女视频黄免费的亚洲男人天堂| 成人在线观看免费视频| 久久综合婷婷综合| 99精品久久久| 欧美午夜精品一区二区| 亚洲三级电影全部在线观看高清| 国产日韩在线免费观看| 亚洲欧美制服另类日韩| 免费高潮视频95在线观看网站| 懂色av一区二区三区在线播放| 外国成人激情视频| 色悠悠久久综合网| 久久精品一区八戒影视| 日韩人妻精品中文字幕| 日韩精品免费在线视频观看| 欧洲一区二区三区| 亚洲www永久成人夜色| 香蕉视频官网在线观看日本一区二区| 久久久久久久久久久久91| 国产亚洲一区字幕| 欧美一区二区三区网站| 亚洲欧美日韩直播| 婷婷六月国产精品久久不卡| 日韩久久在线| 日韩av一区二区在线影视| 欧美xxxx精品| 欧美日韩色一区| 日本高清视频在线播放| 成人国产精品免费视频 | aa视频在线播放| 不卡的看片网站| 国产一级精品视频| 亚洲精选在线观看| 播放一区二区| 亚洲国产另类久久久精品极度| 另类中文字幕网| 全网免费在线播放视频入口 | 日韩国产福利| 国产97在线|日韩| 日韩精品免费一区二区在线观看 | 国产成人aa在线观看网站站| 国产精品专区在线| 久久久夜色精品亚洲| 夜夜躁狠狠躁日日躁av| 麻豆乱码国产一区二区三区| 在线综合色站| 日本精品免费在线观看| 欧美国产一区二区在线观看| 国产精品毛片一区二区在线看舒淇| 欧美成人小视频| 欧亚精品一区| 在线免费观看视频黄| 亚洲欧洲韩国日本视频| 人人妻人人澡人人爽人人欧美一区 | 日韩高清一级片| 久久免费手机视频| 精品99999| 欧美激情啪啪| 久久久久久久9| 国产三级一区二区| 99久久精品日本一区二区免费| 国内伊人久久久久久网站视频| 久久不见久久见中文字幕免费 | 国产99久久久久久免费看| 久久九九免费视频| 丝袜美腿综合| 永久免费黄色片| 日韩欧中文字幕| 宅男在线观看免费高清网站| 青娱乐一区二区| 国产精品一区二区在线观看网站| 天天做天天爱夜夜爽| 尤物yw午夜国产精品视频| 一区二区三区在线资源| 日韩欧美黄色大片| 亚洲大型综合色站| 免费**毛片在线| 蜜桃传媒视频麻豆第一区免费观看| 久久精品国内一区二区三区|