亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C#利用itext實現PDF頁面處理與切分

 更新時間:2022年04月26日 13:54:46   作者:XSpringSun  
這篇文章主要介紹了如何在C#中使用itext做一個pdf的頁面大小一致性處理,然后再根據數據切分出需要的pdf,感興趣的小伙伴可以了解一下

一、itext

我要使用itext做一個pdf的頁面大小一致性處理,然后再根據數據切分出需要的pdf.

iText的官網有關于它的介紹, 然后在官網可以查找api文檔。

其中我要使用的是itext7+,主要在iText.Kernel.Pdf 命名空間下。

二、處理PDF頁面大小一致

由于原始PDF 是掃描圖片合成來的,有些頁面掃描的圖片規(guī)格不一致,導致pdf閱讀性很差。

對于這個pdf我進行處理,首先是在nuget 里面搜索 itext 進行安裝,使用itext7。

處理PDF大小方法:

        public void RestPageSize(string sourcePdfPath, string outputPdfPath)
        {
            PdfReader pdfReader = null;
            PdfDocument pdfDocument = null;
            PdfWriter pdfWriter = null;
            PdfDocument outPDfDoc = null;
            try
            {
                pdfReader = new PdfReader(sourcePdfPath);
                pdfDocument = new PdfDocument(pdfReader);
                var outDir = System.IO.Path.GetDirectoryName(outputPdfPath);
                if (!Directory.Exists(outDir))
                {
                    Directory.CreateDirectory(outDir);
                }

                pdfWriter = new PdfWriter(outputPdfPath);
                outPDfDoc = new PdfDocument(pdfWriter);

                outPDfDoc.SetDefaultPageSize(PageSize.A3);


                for (int i = 1; i < pdfDocument.GetNumberOfPages() + 1; i++)
                {
                    var page = pdfDocument.GetPage(i);
                    var formXObject = page.CopyAsFormXObject(outPDfDoc);
                    var xPercent = PageSize.A3.GetWidth() / page.GetPageSize().GetWidth();
                    var yPercent = PageSize.A3.GetHeight() / page.GetPageSize().GetHeight();
                    PdfCanvas pdfCanvas = new PdfCanvas(outPDfDoc.AddNewPage());
                    pdfCanvas.AddXObjectWithTransformationMatrix(formXObject, xPercent, 0, 0, yPercent, 0, 0);
                }

                pdfWriter.Flush();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
            finally
            {
                if (pdfReader != null)
                {
                    pdfReader.Close();
                }
                if (pdfDocument != null)
                {
                    pdfDocument.Close();
                }
                if (outPDfDoc != null)
                {
                    outPDfDoc.Close();
                }
                if (pdfWriter != null)
                {
                    pdfWriter.Close();
                    pdfWriter.Dispose();
                }
            }

思路:遍歷原來的PDF頁碼,將原來的PDF頁碼對象拷貝PdfFormXObject到要生成的PDF文檔中,首先要copy頁面對象才能使用,不然直接獲取的page對象是原來文檔的,我們無法操作。

var formXObject = page.CopyAsFormXObject(outPDfDoc);

然后對頁面進行縮放計算,我們新的PDF默認設置成A3大小,通過計算原始頁面和新頁面寬高比例進行縮放。

計算完成后,在新文檔中使用PdfCanvas 對象新添加一頁,然后將PdfFormXObject 寫入到新添加的頁中。

處理后的PDF:

三、切分PDF

切分PDF 就比較簡單了,直接從原始文件中拷貝頁面到新PDF文檔中就行了。

切分PDF 方法:

        public void ExtractPages(string sourcePdfPath, string outputPdfPath, int startPage, int endPage)
        {
            PdfReader pdfReader = null;
            PdfDocument pdfDocument = null;
            PdfWriter pdfWriter = null;
            PdfDocument outPDfDoc = null;
            try
            {
                pdfReader = new PdfReader(sourcePdfPath);
                pdfDocument = new PdfDocument(pdfReader);
                var outDir = Path.GetDirectoryName(outputPdfPath);
                if (!Directory.Exists(outDir))
                {
                    Directory.CreateDirectory(outDir);
                }
                
                pdfWriter = new PdfWriter(outputPdfPath);
                outPDfDoc = new PdfDocument(pdfWriter);

                pdfDocument.CopyPagesTo(startPage, endPage, outPDfDoc);
                pdfWriter.Flush();

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);

            }
            finally
            {
                if (pdfReader != null)
                {
                    pdfReader.Close();
                }
                if (pdfDocument != null)
                {
                    pdfDocument.Close();
                }
                if (outPDfDoc != null)
                {
                    outPDfDoc.Close();
                }

                if (pdfWriter != null)
                {
                    pdfWriter.Close();
                    pdfWriter.Dispose();
                }
            }

        }

注意:對寫入流要進行pdfWriter.Flush()將緩沖區(qū)數據寫入PDF后再關。

以上就是C#利用itext實現PDF頁面處理與切分的詳細內容,更多關于C# PDF頁面處理 切分的資料請關注腳本之家其它相關文章!

相關文章

  • Unity?UGUI?按鈕綁定事件的?4?種方式匯總

    Unity?UGUI?按鈕綁定事件的?4?種方式匯總

    UGUI?可視化創(chuàng)建以及關聯(lián)事件很方便,?動態(tài)創(chuàng)建可以利用創(chuàng)建好的?Prefab?進行實例化,?只是在關聯(lián)事件上有些復雜,這篇文章主要介紹了Unity?UGUI?按鈕綁定事件的?4?種方式,需要的朋友可以參考下
    2022-01-01
  • VS?Code里使用Debugger?for?Unity插件調試的方法(2023最新版)

    VS?Code里使用Debugger?for?Unity插件調試的方法(2023最新版)

    Debugger for Unity是一個非正式支持的,官方推薦的,應用最廣的,Visual Studio Code上的Unity調試插件,這篇文章主要介紹了VS?Code里使用Debugger?for?Unity插件進行調試(2023最新版),需要的朋友可以參考下
    2023-02-02
  • 用C#編寫ActiveX控件(三)

    用C#編寫ActiveX控件(三)

    用C#編寫ActiveX控件(三)...
    2007-03-03
  • C#中File和FileStream的簡單介紹和用法

    C#中File和FileStream的簡單介紹和用法

    這篇文章主要給大家介紹了關于C#中File和FileStream用法的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • C#中調用Windows API的技術要點說明

    C#中調用Windows API的技術要點說明

    本篇文章主要是對C#中調用Windows API的技術要點進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • C#為配置文件加密的實現方法

    C#為配置文件加密的實現方法

    這篇文章主要介紹了C#為配置文件加密的實現方法,可實現對配置文件中的敏感信息進行加密,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • json格式數據分析工具PageElement類分享(仿Session寫法)

    json格式數據分析工具PageElement類分享(仿Session寫法)

    json格式數據分析工具PageElement類分享,可像Session一樣自由獲取Json元素的Key與Value。并可方便與ADO進行交互
    2013-12-12
  • C#雙緩沖技術實例詳解

    C#雙緩沖技術實例詳解

    這篇文章主要介紹了C#雙緩沖技術,結合實例形式較為詳細的分析了C#雙緩沖的功能,實現技巧與相關注意事項,需要的朋友可以參考下
    2016-02-02
  • C#泛型的使用及示例詳解

    C#泛型的使用及示例詳解

    這篇文章主要介紹了C#泛型的使用及示例,本文通過例子個大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • C#實現的AES加密解密完整實例

    C#實現的AES加密解密完整實例

    這篇文章主要介紹了C#實現的AES加密解密,結合完整實例形式分析了C#實現的AES算法進行加密與解密的相關技巧,需要的朋友可以參考下
    2016-07-07

最新評論