關于在線預覽的實現方案除了之前說的轉圖片、html、pd以及利用前端組件以外方式,還有就是在服務器端引入一些開源或者商用的組件來實現在線預覽的實現方案。通過這次的調研找到了kkfileview、OnlyOffice、office online server、Libre Office Online、Collabora Online等五種組件,接下來我們就來一個一個看著這些組件是如何安裝和使用的吧。
kkfileview是一個開源的文件文檔在線預覽項目解決方案。該項目使用流行的spring boot搭建,易上手和部署以及二次開發,并提供Docker鏡像發行包,方便在容器環境部署。基本支持主流辦公文檔的在線預覽。支持的格式如下:
https://kkfileview.keking.cn/zh-cn/index.html
https://kkfileview.keking.cn/zh-cn/docs/home.html
kkFileView: 使用spring boot打造文件文檔在線預覽項目解決方案,支持doc、docx、ppt、pptx、wps、xls、xlsx、zip、rar、ofd、xmind、bpmn 、eml 、epub、3ds、dwg、psd 、mp4、mp3以及眾多類文本類型文件在線預覽 (gitee.com)
本篇使用docker為例進行部署
# 網絡環境方便訪問docker中央倉庫
docker pull keking/kkfileview:4.1.0
# 網絡環境不方便訪問docker中央倉庫
wget http://kkfileview.keking.cn/kkFileView-4.1.0-docker.tar
docker load -i kkFileView-4.1.0-docker.tar
docker run -d -it -p 8012:8012 keking/kkfileview:4.1.0
瀏覽器訪問容器8012端口 http://127.0.0.1:8012 即可看到項目演示用首頁
預覽效果如下:
通過返回的頁面我們可以看出kkfileview其實是通過轉成圖片+html的方式實現的(txt文件除外),源文件的內容都被轉成了圖片,然后放到html中以保持樣式
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
var url='http://127.0.0.1:8080/file/test.txt'; //要預覽文件的訪問地址
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(url)));
很多系統內不是直接暴露文件下載地址,而是請求通過id、code等參數到通過統一的接口,后端通過id或code等參數定位文件,再通過OutputStream輸出下載,此時下載url是不帶文件后綴名的,預覽時需要拿到文件名,傳一個參數fullfilename=xxx.xxx來指定文件名,示例如下
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>
var originUrl='http://127.0.0.1:8080/filedownload?fileId=1'; //要預覽文件的訪問地址
var previewUrl=originUrl + '&fullfilename=test.txt'
window.open('http://127.0.0.1:8012/onlinePreview?url='+encodeURIComponent(Base64.encode(previewUrl)));
ONLYOFFICE Docs是一款功能強大的一個開源辦公套件,包括文本文檔、電子表格和演示文稿的編輯器。可以兼容微軟 Office 和 Open Document 文檔格式,主要包括:docx、xlsx、pptx、odt、ods、odp、doc、xls、ppt、pdf、txt、rtf、html、epub、csv。它提供以下功能:
1、創建、編輯和查看文本文檔、電子表格和演示文稿;
2、與其他隊友實時協作處理文件;
3、ONLYOFFICE Docs 還支持用于將您的應用程序與在線辦公室集成的WOPI 協議。
https://api.onlyoffice.com/
https://api.onlyoffice.com/
https://github.com/ONLYOFFICE
本篇使用docker為例進行部署
docker pull onlyoffice/documentserver
docker run -i -t -d -p 8013:8013 --restart=always onlyoffice/documentserver
瀏覽器訪問容器8012端口 http://127.0.0.1:8013 即可看到項目演示用首頁
可以添加demo
sudo docker exec 容器id sudo supervisorctl start ds:example
測試demo:
demo預覽效果如下:
Office Online Server 是由微軟出品得 Office 服務器付費產品,它為 Office 文件提供基于瀏覽器的文件查看和編輯服務。 Office Online Server 適用于支持 WOPI(Web 應用程序開放平臺接口協議)的產品和服務。 這些產品(稱為主機)包括 SharePoint Server 和 Exchange Server。 Office Online Server 場可以為多個本地主機提供 Office 服務,并且可以隨著組織需要的增加將服務器場從一臺服務器擴展到多臺服務器。 雖然 Office Online Server 需要不運行其他服務器應用程序的專用服務器,但可以在需要時在虛擬機上安裝 Office Online Server。
Office Online Server只能部署在Windows Server 2012 R2、Windows Server 2016或 Windows Server 2019 或 Windows Server 2022等服務器上。
https://learn.microsoft.com/zh-cn/officeonlineserver/office-online-server-overview?redirectedfrom=MSDN
因為Office Online Server只能部署在Windows Server上,這里就不演示了,具體的部署步驟可以參考上面的官方文檔,或者參考這篇文章《 Office Online Server搭建(全網最詳細)_程序員勸退師-TAO的博客》
預覽效果如下
經過測驗office online server的在線預覽是最強大的,也是本次介紹的在線預覽控件里唯一支持動態內容的(如gif、ppt里的視頻等)。kkfileview和OnlyOffice在碰到動態內容時都會為動態內容生成一張靜態的預覽圖片,所在在線預覽時這些動態內容都會變成靜態的。唯獨office online server可以支持動態內容,甚至可以在線預覽ppt時,播放ppt里的視頻。只能說微軟yyds。
LibreOffice Online 是一個服務器服務,用主 LibreOffice 項目代碼建成,提供對一系列的文檔的查看及協作編輯。它不含任何形式的文件系統。要讓它能完全地正常使用,它需要和底層軟件堆棧中的文件訪問和身份驗證配置集成。LibreOffice Online 是開源自由軟件,但是缺乏官方的支持,所以更推薦基于基于LibreOffice開發的Collabora Online。
https://zh-cn.libreoffice.org/download/libreoffice-online/
help.libreoffice.org/latest/index.html
本篇使用docker為例進行部署
docker pull libreoffice/online:latest
docker run -e TZ="Asia/Shanghai" --restart always --name libreoffice -d -p 8014:8014 -e "username=root" -e "password=123456" -e "extra_params=--o:ssl.enable=false --o:net.post_allow.host[0]=.\{1,99\}" libreoffice/online:master
由于Libre Office Online 默認配置為HTTPS ,因此,無法正常通過HTTP 正常訪問,因此需要修改應用的配置文件:
[root@docker ~]# docker cp libreoffice:/etc/loolwsd/loolwsd.xml /home/loolwsd.xml
[root@docker home]# vim /home/loolwsd.xml
<ssl desc="SSL settings">
<enable type="bool" desc="Controls whether SSL encryption between browser and loolwsd is enabled (do not disable for production deployment). If default is false, must first be compiled with SSL support to enable." default="true">false</enable>
[root@docker ~]# docker cp /home/loolwsd.xml LibreOfficeOnline:/etc/loolwsd/loolwsd.xml
[root@docker ~]# docker restart LibreOfficeOnline
[root@docker home]# curl -k http://127.0.0.1:9980 #測試可以正常訪問
OK
1234
直接訪問:http://127.0.0.1:8014,返回OK,即為安裝成功;
$ curl -F "data=@Conf.txt" http://127.0.0.1:8014/lool/convert-to/pdf > out.pdf
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 17817 100 16145 100 1672 8072 836 0:00:02 0:00:02 --:--:-- 6829
因為Libre Office Online是通過將文件轉換成pdf實現在線預覽,所以還需要再寫一段文件在線轉換的邏輯
<properties>
<libreoffice.version>5.4.2</libreoffice.version>
</properties>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>juh</artifactId>
<version>${libreoffice.version}</version>
</dependency>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>jurt</artifactId>
<version>${libreoffice.version}</version>
</dependency>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>ridl</artifactId>
<version>${libreoffice.version}</version>
</dependency>
<dependency>
<groupId>org.libreoffice</groupId>
<artifactId>unoil</artifactId>
<version>${libreoffice.version}</version>
</dependency>
<dependency>
<groupId>org.jodconverter</groupId>
<artifactId>jodconverter-online</artifactId>
<version>4.2.4</version>
</dependency>
FileAttribute fileAttribute=new FileAttribute();
File inputFile=new File(url);
// 判斷獲取目標文件路徑是否為空
if (!inputFile.exists()){
throw new BaseException("預覽文件不存在");
}
//處理文件路徑
String url2OutFilePath=StringUtils.replaceOnce(url, "upload-dir", "temp-file");
String outFilePathStr=StringUtils.substringBeforeLast(url2OutFilePath,".")+".pdf";
fileAttribute.setUrl(outFilePathStr);
File outputFilePath=new File(outFilePathStr);
// 存在已經轉換的文件則直接返回文件路徑
if (outputFilePath.exists()) {
result.setResult(fileAttribute);
return result;
} else {
//轉換文件
if (!outputFilePath.getParentFile().exists() && !outputFilePath.getParentFile().mkdirs()) {
log.error("創建目錄【{}】失敗,請檢查目錄權限!",url2OutFilePath);
}
final OnlineOfficeManager onlineOfficeManager=OnlineOfficeManager.make(libreofficeServer);
try {
onlineOfficeManager.start();
OnlineConverter.builder().officeManager(onlineOfficeManager).build()
.convert(inputFile).to(outputFilePath).execute();
onlineOfficeManager.stop();
}catch (Exception e){
log.error("文件轉換異常信息:"+e);
throw new BaseException("文件轉換失敗,請下載后查看");
}finally {
if (onlineOfficeManager!=null){
try {
onlineOfficeManager.stop();
} catch (OfficeException e) {
e.printStackTrace();
}
}
}
}
result.setResult(fileAttribute);
return result;
Collabora Online是一個基于LibreOffice辦公套件的在線協作平臺。它可以通過網絡訪問,并允許用戶創建和編輯辦公應用程序文檔(例如文本文檔、電子表格和演示文稿),并與其他用戶實時協作。
它的開源性質使得Collabora Online對于想要擁有自己控制的在線協作解決方案的組織來說,可以簡單、快速地搭建,讓組織臨時組建的團隊和持久的遠程團隊在多個地點的人能夠共同工作,提高工作效率,促進溝通交流。
Collabora Online還具有內置的版本控制和恢復功能,自然語言處理支持、可橫跨多個文檔的模板、可重定向的IE模式、通用的Office格式支持和強大的API。
https://www.collaboraoffice.com/
https://github.com/CollaboraOnline/online
https://github.com/CollaboraOnline/online
本篇使用docker為例進行部署
docker pull collabora/code
docker run -t -d -p 127.0.0.1:8015:8015 -e "domain=<your-dot-escaped-domain> "
-e "username=admin" -e "password=S3cRet" --restart always --cap-add MKNOD collabora/code
注: 為你的nextcloud服務器地址,此處為授權的意思,并注意域名部分中的“.”要加轉義字符“\”,多個域名之間用“|”隔開
Collabora Online需要https安全連接,所以需要申請購買或者試用ssl證書(測試可以到https://www.pianyissl.com 申請試用ssl)
server {
listen 443 ssl;
server_name collabora.test.com;
ssl on;
ssl_certificate /usr/local/nginx/ssl/server.pem;
ssl_certificate_key /usr/local/nginx/ssl/server.key;
location ^~ /loleaflet {
proxy_pass https://localhost:9980;
proxy_set_header Host $http_host;
}
location ^~ /hosting/discovery {
proxy_pass https://localhost:9980;
proxy_set_header Host $http_host;
}
location ^~ /lool {
proxy_pass https://localhost:9980;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $http_host;
}
}
預覽效果如下
本篇文章主要介紹了kkfileview、OnlyOffice、office online server、Libre Office Online、Collabora Online等通過在服務器端安裝組件來實現在線預覽的方式,其中kkfileview、Libre Office Online這兩種組件只支持在線預覽,OnlyOffice、office online server、Collabora Online這三種組件除了支持在線預覽還能支持在線編輯,關于在線編輯準備拿出來后面單獨講一講。
此前我們帶來了ANKER單口USB PD充電器A2015拆解報告,近期ANKER充電器家族又添新成員,增加了最大輸出30W的USB PD充電器型號為A2014。把豐富的產品種類更加精細化,適應人群更廣,中小功率的PD充電器更適合手機移動電源這類產品使用,體積重量的減小使之便攜性增加,新款產品性能做工是否還像以前優秀,拆解值得期待。
一、ANKER單口30W USB PD充電器開箱
藍白色的包裝盒,主體中央有ANKER的LOGO,非常簡潔的一個包裝展示。
包裝盒背面,印有產品的主要信息,ANKER PD30W充電器黑色,下面有主要參數、產品認證、條碼二維碼等信息。
打開包裝盒,內有各種卡片,黑色的充電器用防塵袋包裹,放置在盒體中間。
隨機副件,說明書、保修卡、產品合格證、有毒有害物質清單。
先看一下說明書,用日文標注,主要參數和包裝盒外面一致,輸入輸出信息,產品尺寸:61*58*29 重量:101g。
黑色的ANKER充電器,PC+ABS材質的殼體,中間印有ANKER的LOGO,四周弧形設計手感上略微圓潤。
充電器采用常見的折疊式國標AC插頭,純銅鍍鎳處理,抗氧化性強,經久耐用,無論是室內使用還是外出攜帶,ANKER充電器都是非常方便。
輸出端,本款充電器有一個PD輸出口,支持PD協議,輸出口上面有一個條狀顯示燈,通電時可以直觀的分辨出來。
折疊式AC插頭松緊適中,比我手上自用的略緊一點,單手開合無壓力,聲音輕脆。
產品銘牌信息:
PowerPort Speed PD30
名稱:充電器 型號:A2014
輸入:100-240V 1.2A 5-60Hz
輸出:5V/3A、9V/3A、15V/2A以及20V/1.5A
安克創新科技有限公司多種認證信息等等。
殼體細節,表面微磨砂處理,日常使用有一定的抗指紋作用,相比鏡面的會好很多。
外型展示,本款ANKER PD充電器外型尺寸為61*58*29MM,在30W-45W的范圍內,體積優勢并不明顯,總體來說中規中矩。
ANKER充電器總重105.9g。
通電測試,ANKER充電器的LED燈發出淡藍色的光,識別容易。
用高精度的POWER-Z FL001S測試空載電壓4.98V。
PDO協議偵測,顯示支持5V/3A、9V/3A、15V/2、20V/1.5A,和產品銘牌信息一致。
快充協議測試,顯示只支持USB PD協議。
二、ANKER單口30W USB PD充電器拆解
ANKER充電器殼體采用上下組合,超聲波熱熔基本無損拆解。打開外殼,可以看見PCB背面,醒目的是高低壓隔離塊和黃色的絕緣膠布,元器件用了較多的膠水固定。
充電器正面用了大量的膠水,固定元器件的同時起到導熱作用。左上角是一個變壓器,右上角AC輸入端保護電路與EMI電路,右下角為USB PD輸出部分。
AC插頭用軟線連接PCB板,兩級共模電感。
黃色的安規電容下面有一個250V 2A的方型保險絲。
全橋整流后的一次側濾波電源為一枚Acon中元的400V 56μF電容,整體用保護套隔離。
Y電容。
黃色的方塊變壓器,上面貼有雙面膠應該是和外殼起到穩固作用,變壓器旁是主開關管固定在鋁質散熱片上,輸出線采用多層絕緣線,保證安全。
來自深愛半導體SIF MOS管,后面代號不明。
輸出部分,主開關管旁邊的小板是LED燈條,上面共有三個LED燈珠。中間是固態電容,右邊是PD輸出小板,插焊在主PCB板上。
兩顆25V 470μF的固態電容輸出濾波,提供穩定的輸出。
Type-C小板上有1813字樣,為2018年第13周生產。板端元器件較少,連接器過孔錫焊,抗拔插性能不錯,牢固。
PCB背面一覽。
PCB背面同樣有1813字樣,型號A2014和充電器型號一致。RJ為代工廠深圳市瑞晶實業有限公司標志。
USB PD輸出控制器由Weltrend偉詮提供,型號WT6632F。
偉詮WT6632F是一種高度集成的USB PD控制器,它支持USB PD3.0 規范,支持寬操作電壓范圍從3V到30V,為USB類型的面向下游的端口 (源) 充電應用程序 (如旅行適配器、充電器和電源庫) 設計。WT6632F通過集成 USB PD基帶物理、類型 C 檢測、分流調節器、電壓和電流監測器以及阻塞 MOSFET 的控制電路, 以及一個8位的 MCU 來最小化外部組件,從而允許小的外部體積和低的 BOM 成本。這里使用一顆USB PD3.0芯片來實現USB PD2.0功能,有些大材小用。
絲印632140為昂寶OB2632初級PWM控制器。支持PD電源適配器和寬輸出范圍適配器,支持擴展的突發模式控制以提升效率和降低待機功耗,支持自恢復的逐周期電流限制和過載保護。
昂寶OB2632詳細資料。
絲印為JWE3 H77B的芯片為同步整流IC,來自JOULWATT杰華特JW7715,支持DCM,CCM,準諧振等多種工作模式,支持高側和低側同步整流,低靜態電流節省功耗,適用于適配器和液晶電視。
JOULWATT杰華特JW7715詳細資料。
WSD30L40DN場效應管來自WINSOK微碩,Pmos,導阻11mΩ,電流40A,耐壓30V。
WINSOK微碩WSD30L40DN詳細資料。
CT.Micro光耦CT1018,安全隔離電壓5KV適用于開關電源,計算機外部設備接口,微處理器系統接口。
CT.Micro光耦CT1018詳細資料。
充電頭網拆解總結
ANKER這款30W USB PD充電器采用折疊式插頭,黑色經典配色,體積小巧、外型圓潤、攜帶方便,支持5V/3A、9V/3A、15V/2A、20V/1.5A四組PD輸出模式,可為iPhone X、小米、華為、堅果、任天堂Switch等手機以及iPad Pro、MacBook等設備充電。
從拆解來看,內部采用偉詮WT6632F USB PD3.0方案、微碩的場效應管、深愛半導體的主控開關管、中元的電解電容等器件,用料扎實,在30W PD充電器中是一個不錯的選擇。