下載 ArcGIS Javascript 引用的字體 pbf 文件,並離線部署


在使用 ArcGIS JavaScript 進行開發的時候,雖然已經把 引用的  js 和 css 文件進行了離線部署,

但是有個問題,在調用的字體文件時,也就是調用 pbf 文件時,調用的仍然是在線的,而且速度很慢,

整個頁面加載的時間和加載 pbf 文件的時間差不多了,實在無法忍受,准備下載離線部署,網上搜了幾個

發現要么不支持中文,要么就是要分特別高。只能自己動手寫個程序下載了。

代碼很簡單,是 C# 的。

 

using System;
using System.IO;
using System.Net;

namespace pbfDownload
{
    class Program
    {
        static void Main(string[] args)
        {
            var regularUrl = "https://static.arcgis.com/fonts/arial-unicode-ms-regular/";
            var boldUrl = "https://static.arcgis.com/fonts/arial-unicode-ms-bold/";

            var regularFolder = @"D:\Fonts\regularFolder\"; //目錄要先手動建好,這里主要是下載,就不循環路徑自動建文件夾了。
            var boldFolder = @"D:\Fonts\boldFolder\";

            var NetURL = new string[2] { boldUrl, regularUrl };

            var downFolder = new string[2] {boldFolder,regularFolder};

            for (int u = 0; u < 2; u++)
            {
                var downurl = NetURL[u];

                var downFold = downFolder[u];

                for (int i = 0; i < 257; i++)
                {
                    double si = i * 256;
                    double ei = (i + 1) * 256 - 1;

                    var fileName = si.ToString() + "-" + ei.ToString() + ".pbf";

                    var fileUrl = downurl + fileName;

                    var fileDown = downFold + fileName;

                    HttpDownloadFile(fileUrl, fileDown);
                }

            }

        }

        /// <summary>
        /// Http下載文件
        /// </summary>
        public static void HttpDownloadFile(string url, string path)
        {
            try
            {
                // 設置參數
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                //發送請求並獲取相應回應數據
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才開始向目標網頁發送Post請求
                Stream responseStream = response.GetResponseStream();
                //創建本地文件寫入流
                Stream stream = new FileStream(path, FileMode.Create);
                byte[] bArr = new byte[1024];
                int size = responseStream.Read(bArr, 0, (int)bArr.Length);
                while (size > 0)
                {
                    stream.Write(bArr, 0, size);
                    size = responseStream.Read(bArr, 0, (int)bArr.Length);
                }
                request.Abort();
                response.Close();
                responseStream.Close();
                stream.Close();
                Console.WriteLine("File:" + path);
            }
            catch(Exception ex)
            {
                Console.WriteLine("File:" + path);
                Console.WriteLine("Error:"+ ex.Message);
            }
            
            //return path;
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM