<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        .NET中開源文檔操作組件DocX的介紹與使用

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:36:21
        文檔

        .NET中開源文檔操作組件DocX的介紹與使用

        .NET中開源文檔操作組件DocX的介紹與使用:前言 相信大家應該都有所體會,在目前的軟件項目中,都會較多的使用到對文檔的操作,用于記錄和統(tǒng)計相關業(yè)務信息。由于系統(tǒng)自身提供了對文檔的相關操作,所以在一定程度上極大的簡化了軟件使用者的工作量。 在.NET項目中如果用戶提出了相關文檔操作的需求,開
        推薦度:
        導讀.NET中開源文檔操作組件DocX的介紹與使用:前言 相信大家應該都有所體會,在目前的軟件項目中,都會較多的使用到對文檔的操作,用于記錄和統(tǒng)計相關業(yè)務信息。由于系統(tǒng)自身提供了對文檔的相關操作,所以在一定程度上極大的簡化了軟件使用者的工作量。 在.NET項目中如果用戶提出了相關文檔操作的需求,開

        前言

        相信大家應該都有所體會,在目前的軟件項目中,都會較多的使用到對文檔的操作,用于記錄和統(tǒng)計相關業(yè)務信息。由于系統(tǒng)自身提供了對文檔的相關操作,所以在一定程度上極大的簡化了軟件使用者的工作量。

        在.NET項目中如果用戶提出了相關文檔操作的需求,開發(fā)者較多的會使用到微軟自行提供的插件,在一定程度上簡化了開發(fā)人員的工作量,但是同時也給用戶帶來了一些困擾,例如需要安裝龐大的office,在用戶體驗性就會降低很多,并且在國內,很多人都還是使用wps,這就導致一部分只安裝了wps的使用者很是為難,在對Excel的操作方面,有一個NPOI組件。那么可能會有人問有沒有什么辦法讓這些困擾得到解決,答案是肯定的,那就是今天需要介紹的“DocX”組件,接下來我們就來了解一下這個組件的功能和用法。

        一.DocX組件概述:

        DocX是一個.NET庫,允許開發(fā)人員以簡單直觀的方式處理Word 2007/2010/2013文件。 DocX是快速,輕量級,最好的是它不需要安裝Microsoft Word或Office。DocX組件不僅可以完成對文檔的一般要求,例如創(chuàng)建文檔,創(chuàng)建表格和文本,并且還可以創(chuàng)建圖形報表。DocX使創(chuàng)建和操作文檔成為一個簡單的任務。

        它不使用COM庫,也不需要安裝Microsoft Office。在使用DocX組件時,你需要安裝為了使用DocX是.NET框架4.0和Visual Studio 2010或更高版本。

           DocX的主要特點:

             (1).在文檔中插入,刪除或替換文本。所有標準文本格式都可用。 字體{系列,大小,顏色},粗體,斜體,下劃線,刪除線,腳本{子,超級},突出顯示。

             (2).段落屬性顯示。方向LeftToRightRightToLeft;縮進;比對。  

             (3).DocX也支持:圖片,超鏈接,表,頁眉和頁腳,自定義屬性。

          有關DocX組件的相關信息就介紹到這里,如果需要更加深入的了解相關信息,可以進入:https://docx.codeplex.com/。

        二.DocX相關類和方法解析:

        本文將結合DocX的源碼進行解析,使用.NET Reflector對DLL文件進行反編譯,以此查看源代碼。將DLL文件加入.NET Reflector中,點擊打開文件。 

        1.DocX.Create() :創(chuàng)建文檔。

        public static DocX Create(Stream stream)
        {
         MemoryStream stream2 = new MemoryStream();
         PostCreation(ref Package.Open(stream2, FileMode.Create, FileAccess.ReadWrite));
         DocX cx = Load(stream2);
         cx.stream = stream;
         return cx;
        }

        2.Paragraph.Append:向段落添加信息。

        public Paragraph Append(string text)
        {
         List<XElement> content = HelperFunctions.FormatInput(text, null);
         base.Xml.Add(content);
         this.runs = base.Xml.Elements(XName.Get("r", DocX.w.NamespaceName)).Reverse<XElement>().Take<XElement>(content.Count<XElement>()).ToList<XElement>();
         return this;
        }
        
        public Paragraph Bold()
        {
         this.ApplyTextFormattingProperty(XName.Get("b", DocX.w.NamespaceName), string.Empty, null);
         return this;
        }

        3.Table.InsertTableAfterSelf:將數(shù)據(jù)插入表格。

        public override Table InsertTableAfterSelf(int rowCount, int coloumnCount)
        {
         return base.InsertTableAfterSelf(rowCount, coloumnCount);
        }
        
        public virtual Table InsertTableAfterSelf(int rowCount, int coloumnCount)
        {
         XElement content = HelperFunctions.CreateTable(rowCount, coloumnCount);
         base.Xml.AddAfterSelf(content);
         return new Table(base.Document, base.Xml.ElementsAfterSelf().First<XElement>());
        }

        4.CustomProperty:自定義屬性。

        public class CustomProperty
        {
         // Fields
         private string name;
         private string type;
         private object value;
        
         // Methods
         public CustomProperty(string name, bool value);
         public CustomProperty(string name, DateTime value);
         public CustomProperty(string name, double value);
         public CustomProperty(string name, int value);
         public CustomProperty(string name, string value);
         private CustomProperty(string name, string type, object value);
         internal CustomProperty(string name, string type, string value);
        
         // Properties
         public string Name { get; }
         internal string Type { get; }
         public object Value { get; }
        }

        5.BarChart:創(chuàng)建棒形圖。

        public class BarChart : Chart
        {
         // Methods
         public BarChart();
         protected override XElement CreateChartXml();
        
         // Properties
         public BarDirection BarDirection { get; set; }
         public BarGrouping BarGrouping { get; set; }
         public int GapWidth { get; set; }
        }
        
        public abstract class Chart
        {
         // Methods
         public Chart();
         public void AddLegend();
         public void AddLegend(ChartLegendPosition position, bool overlay);
         public void AddSeries(Series series);
         protected abstract XElement CreateChartXml();
         public void RemoveLegend();
        
         // Properties
         public CategoryAxis CategoryAxis { get; private set; }
         protected XElement ChartRootXml { get; private set; }
         protected XElement ChartXml { get; private set; }
         public DisplayBlanksAs DisplayBlanksAs { get; set; }
         public virtual bool IsAxisExist { get; }
         public ChartLegend Legend { get; private set; }
         public virtual short MaxSeriesCount { get; }
         public List<Series> Series { get; }
         public ValueAxis ValueAxis { get; private set; }
         public bool View3D { get; set; }
         public XDocument Xml { get; private set; }
        }

        6.Chart的AddLegend(),AddSeries(),RemoveLegend()方法解析:

        public void AddLegend(ChartLegendPosition position, bool overlay)
        {
         if (this.Legend != null)
         {
         this.RemoveLegend();
         }
         this.Legend = new ChartLegend(position, overlay);
         this.ChartRootXml.Add(this.Legend.Xml);
        }
        
        
        public void AddSeries(Series series)
        {
         if (this.ChartXml.Elements(XName.Get("ser", DocX.c.NamespaceName)).Count<XElement>() == this.MaxSeriesCount)
         {
         throw new InvalidOperationException("Maximum series for this chart is" + this.MaxSeriesCount.ToString() + "and have exceeded!");
         }
         this.ChartXml.Add(series.Xml);
        }
        
        public void RemoveLegend()
        {
         this.Legend.Xml.Remove();
         this.Legend = null;
        }

        以上是對DocX組件的一些方法的一些簡單解析,如果需要知道更多的方法實現(xiàn)代碼,可自行進行下載查看。

        三.DocX功能實現(xiàn)實例:

        1.創(chuàng)建圖表:

         /// <summary>
         /// 創(chuàng)建棒形圖
         /// </summary>
         /// <param name="path">文檔路徑</param>
         /// <param name="dicValue">綁定數(shù)據(jù)</param>
         /// <param name="categoryName">類別名稱</param>
         /// <param name="valueName">值名稱</param>
         /// <param name="title">圖標標題</param>
         public static bool BarChart(string path,Dictionary<string, ICollection> dicValue,string categoryName,string valueName,string title)
         {
         if (string.IsNullOrEmpty(path))
         {
         throw new ArgumentNullException(path);
         }
         if (dicValue == null)
         {
         throw new ArgumentNullException("dicValue");
         }
         if (string.IsNullOrEmpty(categoryName))
         {
         throw new ArgumentNullException(categoryName);
         }
         if (string.IsNullOrEmpty(valueName))
         {
         throw new ArgumentNullException(valueName);
         }
         if (string.IsNullOrEmpty(title))
         {
         throw new ArgumentNullException(title);
         }
         try
         {
         using (var document = DocX.Create(path))
         {
         //BarChart圖形屬性設置,BarDirection圖形方向枚舉,BarGrouping圖形分組枚舉
         var c = new BarChart
         {
         BarDirection = BarDirection.Column,
         BarGrouping = BarGrouping.Standard,
         GapWidth = 400
         };
         //設置圖表圖例位置
         c.AddLegend(ChartLegendPosition.Bottom, false);
         //寫入圖標數(shù)據(jù)
         foreach (var chartData in dicValue)
         {
         var series = new Series(chartData.Key);
         series.Bind(chartData.Value, categoryName, valueName);
         c.AddSeries(series);
         } 
         // 設置文檔標題
         document.InsertParagraph(title).FontSize(20);
         document.InsertChart(c);
         document.Save();
         return true;
         }
        
         }
         catch (Exception ex)
         {
         throw new Exception(ex.Message);
         }
         }

        2.創(chuàng)建一個具有超鏈接、圖像和表的文檔。

         /// <summary>
         /// 創(chuàng)建一個具有超鏈接、圖像和表的文檔。
         /// </summary>
         /// <param name="path">文檔保存路徑</param>
         /// <param name="imagePath">加載的圖片路徑</param>
         /// <param name="url">url地址</param>
         public static void HyperlinksImagesTables(string path,string imagePath,string url)
         {
         if (string.IsNullOrEmpty(path))
         {
         throw new ArgumentNullException(path);
         }
         if (string.IsNullOrEmpty(imagePath))
         {
         throw new ArgumentNullException(imagePath);
         }
         if (string.IsNullOrEmpty(url))
         {
         throw new ArgumentNullException(url);
         }
         try
         {
         using (var document = DocX.Create(path))
         {
         var link = document.AddHyperlink("link", new Uri(url));
         var table = document.AddTable(2, 2);
         table.Design = TableDesign.ColorfulGridAccent2;
         table.Alignment = Alignment.center;
         table.Rows[0].Cells[0].Paragraphs[0].Append("1");
         table.Rows[0].Cells[1].Paragraphs[0].Append("2");
         table.Rows[1].Cells[0].Paragraphs[0].Append("3");
         table.Rows[1].Cells[1].Paragraphs[0].Append("4");
         var newRow = table.InsertRow(table.Rows[1]);
         newRow.ReplaceText("4", "5");
         var image = document.AddImage(imagePath);
         var picture = image.CreatePicture();
         picture.Rotation = 10;
         picture.SetPictureShape(BasicShapes.cube);
         var title = document.InsertParagraph().Append("Test").FontSize(20).Font(new FontFamily("Comic Sans MS"));
         title.Alignment = Alignment.center;
         var p1 = document.InsertParagraph();
         p1.AppendLine("This line contains a ").Append("bold").Bold().Append(" word.");
         p1.AppendLine("Here is a cool ").AppendHyperlink(link).Append(".");
         p1.AppendLine();
         p1.AppendLine("Check out this picture ").AppendPicture(picture).Append(" its funky don't you think?");
         p1.AppendLine();
         p1.AppendLine("Can you check this Table of figures for me?");
         p1.AppendLine();
         p1.InsertTableAfterSelf(table);
         var p2 = document.InsertParagraph();
         p2.AppendLine("Is it correct?");
         document.Save();
         }
         }
         catch (Exception ex)
         {
         throw new Exception(ex.Message);
         }
         
         }

        3.將指定內容寫入文檔:

         /// <summary>
         /// 將指定內容寫入文檔
         /// </summary>
         /// <param name="path">加載文件路徑</param>
         /// <param name="content">寫入文件內容</param>
         /// <param name="savePath">保存文件路徑</param>
         public static void ProgrammaticallyManipulateImbeddedImage(string path, string content, string savePath)
         {
         if (string.IsNullOrEmpty(path))
         {
         throw new ArgumentNullException(path);
         }
         if (string.IsNullOrEmpty(content))
         {
         throw new ArgumentNullException(content);
         }
         if (string.IsNullOrEmpty(savePath))
         {
         throw new ArgumentNullException(savePath);
         }
         try
         {
         using (var document = DocX.Load(path))
         {
         // 確保此文檔至少有一個圖像。
         if (document.Images.Any())
         {
         var img = document.Images[0];
         // 將內容寫入圖片.
         var b = new Bitmap(img.GetStream(FileMode.Open, FileAccess.ReadWrite));
         //獲取此位圖的圖形對象,圖形對象提供繪圖功能。
         var g = Graphics.FromImage(b);
         // 畫字符串內容
         g.DrawString
         (
         content,
         new Font("Tahoma", 20),
         Brushes.Blue,
         new PointF(0, 0)
         );
         // 使用創(chuàng)建\寫入流將該位圖保存到文檔中。
         b.Save(img.GetStream(FileMode.Create, FileAccess.Write), ImageFormat.Png);
         }
         else
         {
         document.SaveAs(savePath);
         } 
         }
        
         }
         catch (Exception ex)
         {
         throw new Exception(ex.Message);
         }
         }

        總結

        聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        .NET中開源文檔操作組件DocX的介紹與使用

        .NET中開源文檔操作組件DocX的介紹與使用:前言 相信大家應該都有所體會,在目前的軟件項目中,都會較多的使用到對文檔的操作,用于記錄和統(tǒng)計相關業(yè)務信息。由于系統(tǒng)自身提供了對文檔的相關操作,所以在一定程度上極大的簡化了軟件使用者的工作量。 在.NET項目中如果用戶提出了相關文檔操作的需求,開
        推薦度:
        標簽: 文檔 開源 簡介
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品无码久久久久APP| 美女黄网站人色视频免费| 久久久久亚洲av无码专区蜜芽| 亚洲精品美女久久久久99| 亚洲av激情无码专区在线播放 | 国产乱子伦精品免费女| 日批日出水久久亚洲精品tv| 青青草原亚洲视频| 亚洲高清无在码在线电影不卡| 77777亚洲午夜久久多喷| 亚洲AV无码成人精品区日韩| xxxx日本在线播放免费不卡| 亚洲精品在线免费观看| 日本一区免费电影| 亚洲AV人无码综合在线观看| 久久精品免费大片国产大片| 无人在线观看免费高清视频| 精品亚洲成α人无码成α在线观看 | 午夜视频在线在免费| 久久亚洲av无码精品浪潮| 鲁啊鲁在线视频免费播放| www.亚洲精品.com| 污污视频网站免费观看| 最近中文字幕电影大全免费版| 国产91久久久久久久免费| 久久精品国产亚洲AV| 亚洲免费网站在线观看| 亚洲精品视频久久久| 亚洲youjizz| 日本免费高清视频| 亚洲精品国产福利一二区| 无码AV动漫精品一区二区免费| h片在线免费观看| 亚洲av无码一区二区三区观看| 免费精品国产自产拍在线观看图片| 怡红院亚洲怡红院首页| 中文字幕在线视频免费观看| 国产一区二区免费在线| a级毛片免费网站| 国产极品美女高潮抽搐免费网站| 亚洲色成人网一二三区|