欧美精产国品一二三区,国产成人一区二区三区A片免费,特级毛片www免费版,成人做爰A片免费看黄冈宾馆,日韩精品人妻中文字幕有码

.NET 使(shi)用 DocNET 庫快速高效的(de)操作(zuo) PDF 文檔

前言

PDF 文檔,作為(wei)日常工(gong)作中(zhong)不可(ke)或(huo)缺的(de)文檔格式,廣泛應用(yong)于各(ge)類場景。今(jin)天我們來講(jiang)(jiang)講(jiang)(jiang)在 .NET 中(zhong)使用(yong) DocNET 庫快速高效的(de)操(cao)作 PDF 文檔。

項(xiang)目介紹

DocNET 是一(yi)個基(ji)于 .NET 開源(yuan)(MIT license)、跨(kua)平(ping)臺(支持Windows、Linux和macOS平(ping)臺)的(de)(de)旨(zhi)在(zai)提供快速 PDF 編(bian)輯和數據(ju)提取的(de)(de)操(cao)作(zuo)庫(ku)。它是基(ji)于 Chromium 所使用(yong)的(de)(de) PDFium C++ 庫(ku)開發的(de)(de) .NET Standard 2.0 封裝庫(ku)。

項目特性(xing)

  • PDF 提(ti)(ti)取(qu)功能:支持(chi) PDF 版本、頁(ye)數、頁(ye)面(mian)寬度、頁(ye)面(mian)高度、頁(ye)面(mian)文本、字符(fu)字體大小等相關PDF信息提(ti)(ti)取(qu)。
  • PDF 編輯功能(neng): 支(zhi)持分割 PDF 文檔(dang)(dang)(dang)、合并 PDF 文檔(dang)(dang)(dang)、解鎖 PDF 文檔(dang)(dang)(dang)。
  • 支持渲染頁面為圖(tu)像、JPEG 圖(tu)片轉換為 PDF 文件等(deng)等(deng)。

項目源(yuan)代碼(ma)

創建DocNETExercises控(kong)制臺應(ying)用

創建一個名為 DocNETExercises 的.NET 9 控制臺應(ying)用:

Docnet.Core NuGet包(bao)安裝

在 NuGet 包管理器中搜索 Docnet.Core 安裝:

獲取 PDF 文(wen)件頁碼和(he)版(ban)本(ben)

        /// <summary>
        /// 獲取 PDF 文件頁碼和版本
        /// </summary>
        public static void GetPDFPageCountAndVersion()
        {
            using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
            var getPageCount = docReader.GetPageCount();
            var getPdfVersion = docReader.GetPdfVersion();
            Console.WriteLine($"PageCount:{getPageCount},PdfVersion:{getPdfVersion}");
        }

獲(huo)取 PDF 文(wen)件的文(wen)本內容

        /// <summary>
        /// 獲取 PDF 文件的文本內容
        /// </summary>
        public static void GetPDFText()
        {
            using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
            using var pageReader = docReader.GetPageReader(0); //注意pageIndex從0開始

            // 獲取指定頁面的文本(自動處理編碼)
            string pageText = pageReader.GetText();

            Console.WriteLine(pageText);
        }

將 JPEG 圖(tu)片轉換(huan)為 PDF 文件

        /// <summary>
        /// 將 JPEG 圖片轉換為 PDF 文件
        /// </summary>
        public static void JPEGImageConvertToPDF()
        {
            var file = new JpegImage
            {
                Bytes = File.ReadAllBytes("Assets/image1.jpeg"),
                Width = 580,
                Height = 387
            };

            var bytes = _docNetInstance.JpegToPdf(new[] { file });

            File.WriteAllBytes("Assets/output_file.pdf", bytes);
        }

將 PDF 文件轉換為圖(tu)片

        /// <summary>
        /// 將 PDF 文件轉換為圖片
        /// </summary>
        public static void PDFConvertToImage()
        {
            using var docReader = _docNetInstance.GetDocReader(FilePath, new PageDimensions(1080, 1920));
            //指定第一頁
            using var pageReader = docReader.GetPageReader(0);

            var rawBytes = pageReader.GetImage();
            var width = pageReader.GetPageWidth();
            var height = pageReader.GetPageHeight();
            var characters = pageReader.GetCharacters();

            using var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb);

            AddBytes(bmp, rawBytes);
            DrawRectangles(bmp, characters);

            using var stream = new MemoryStream();

            bmp.Save(stream, ImageFormat.Png);

            File.WriteAllBytes("Assets/output_image.png", stream.ToArray());
        }

        private static void AddBytes(Bitmap bmp, byte[] rawBytes)
        {
            var rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

            var bmpData = bmp.LockBits(rect, ImageLockMode.WriteOnly, bmp.PixelFormat);
            var pNative = bmpData.Scan0;

            Marshal.Copy(rawBytes, 0, pNative, rawBytes.Length);
            bmp.UnlockBits(bmpData);
        }

        private static void DrawRectangles(Bitmap bmp, IEnumerable<Character> characters)
        {
            var pen = new Pen(Color.Red);

            using var graphics = Graphics.FromImage(bmp);

            foreach (var c in characters)
            {
                var rect = new Rectangle(c.Box.Left, c.Box.Top, c.Box.Right - c.Box.Left, c.Box.Bottom - c.Box.Top);
                graphics.DrawRectangle(pen, rect);
            }
        }

項目源碼地址

更多項目(mu)實用功能(neng)和特性歡(huan)迎前往項目(mu)開源地址查看??,別忘了給項目(mu)一(yi)個Star支持??。

  • GitHub開源地址:
  • 本文示例源碼地址:

優秀項目和框架精(jing)選

該項目已收錄到C#/.NET/.NET Core優秀項目和框架精選中,關注優秀項目和框架精選能讓你及時了解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和質量。坑已挖,歡迎大家踴躍提交PR推薦或自薦(讓優秀的項目和框架不被埋沒??)。

  • GitHub開源地址:
  • Gitee開源地址:

DotNetGuide技術社區

  • DotNetGuide技術社區是一個面向.NET開發者的開源技術社區,旨在為開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和咨詢、項目框架推薦、求職和招聘資訊、以及解決問題的平臺。
  • 在DotNetGuide技術社區中,開發者們可以分享自己的技術文章、項目經驗、學習心得、遇到的疑難技術問題以及解決方案,并且還有機會結識志同道合的開發者。
  • 我們致力于構建一個積極向上、和諧友善的.NET技術交流平臺。無論您是初學者還是有豐富經驗的開發者,我們都希望能為您提供更多的價值和成長機會。

posted @ 2025-07-21 08:00  追逐時光者  閱讀(2151)  評論(6)    收藏  舉報