根據PDF模板生成PDF文件(基於iTextSharp)


    根據PDF模板生成PDF文件,這里主要借助iTextSharp工具來完成。場景是這樣的,假如要做一個電子協議,用過通過在線填寫表單數據,然后系統根據用戶填寫的數據,生成電子檔的協議。原理很簡單,但是每個技術人員解決問題的思路不太一樣。也有朋友直接通過Canvas來實現,過程是把內容排版好,然后生成圖片,然后根據圖片生成PDF文件,這種方式有個問題,如果要是要求兼容移動端的話,在移動設備上排版出來的效果肯定不太一樣,導致最終生成的電子協議和期望的相差太大。下面我們就利用PDF中的表單元素,來完成PDF內容的替換。

過程是這樣的!

我這邊收到一份word版的文檔,首先,我們將其另存為PDF文件。

其次,在https://www.pdfescape.com/open/這個網站,將PDF文件上傳上去,進行在線編輯。 

也可以通過PDF軟件工具,進行編輯。這里,我把需要填寫部分的內容,全畫上表單元素,設置元素的name,后面根據name 屬性對其進行賦值。具體操作,將text放置指定處,然后鼠標右鍵,看到如下界面:

這里Name屬性就是后面我們要用到的。目前它支持的元素有:

下面,我們新建一個控制台程序,通過nuget獲取itextSharp。

控制台代碼如下:

 /// <summary>
        /// 
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            string tempFilePath = "D:\\a.tmp.pdf";
            iTextSharp.text.pdf.PdfDocument document = new iTextSharp.text.pdf.PdfDocument();

            iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(@"D:\d.pdf");
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(tempFilePath, FileMode.OpenOrCreate));
            AcroFields pdfFormFields = pdfStamper.AcroFields;
            pdfStamper.FormFlattening = true;

            //BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
            BaseFont simheiBase = BaseFont.CreateFont(@"C:\Windows\Fonts\simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

            //添加圖片
            //Image image = Image.GetInstance("");
            //pdfStamper.Writer.Add(image);

            pdfFormFields.AddSubstitutionFont(simheiBase);
            pdfStamper.AcroFields.SetField("Names", "李朝強");
            pdfStamper.AcroFields.SetField("chk", "yes", true);
            pdfStamper.Close();
            pdfReader.Close();


            ////解析文本
            //PdfReaderContentParser parser = new PdfReaderContentParser(pdfReader);

            //PdfWriter pdfWriter;

            //ITextExtractionStrategy strategy;
            //strategy = parser.ProcessContent<SimpleTextExtractionStrategy>(1, new SimpleTextExtractionStrategy());
            //string ss = strategy.GetResultantText();

            //byte[] buffer = pdfReader.GetPageContent(1);

            //string strBody = System.Text.Encoding.Default.GetString(buffer);
        }

上面代碼,根據D盤的d.pdf模板,來生成最終的PDF文件。這里通過給AcroFields中的字段賦值,來達到替換內容的目的。

上面還有一種復選框(checkbox)的內容,pdf也支持,這里直接給其賦值yes或no,來控制是否選中。

最后一步就是將生成的PDF進行展示了。這里借助於pdf.js(微信也支持)。看看效果吧!

看看手機微信效果吧!

 


免責聲明!

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



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