C# Net Core 使用 itextsharp.lgplv2.core 把Html轉PDF


 

C# Net Core 使用 itextsharp.lgplv2.core 把Html轉PDF

 

只支持英文(中文我不知道怎么弄,懂的朋友幫我看一下)!!!!!【補充:評論區的小伙伴已解決】

 

引入包itextsharp.lgplv2.core

 

代碼

        public static MemoryStream Pdf(string html)
        {
            StringReader sr = new StringReader(html);
            //步驟1
            Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);

            MemoryStream stream = new MemoryStream();
            //步驟2
            PdfWriter.GetInstance(document, stream);
            //步驟3
            document.Open();

            //創建一個樣式表
            StyleSheet styles = new StyleSheet();
            ////設置默認字體的屬性
            //styles.LoadTagStyle(HtmlTags.BODY, "encoding", "Identity-H");
            //styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "Tahoma");
            //styles.LoadTagStyle(HtmlTags.BODY, "size", "16pt");

            //FontFactory.Register(@"C:\Windows\Fonts\tahoma.ttf");

            var unicodeFontProvider = FontFactoryImp.Instance;
            unicodeFontProvider.DefaultEmbedding = BaseFont.EMBEDDED;
            unicodeFontProvider.DefaultEncoding = BaseFont.IDENTITY_H;

            var props = new Hashtable
            {
            //    { "img_provider", new MyImageFactory() },
                { "font_factory", unicodeFontProvider } //始終使用Unicode字體
            };

            //步驟4
            //var objects = HtmlWorker.ParseToList(sr, styles, props);
            var objects = HtmlWorker.ParseToList(sr, styles);
            foreach (IElement element in objects)
            {
                document.Add(element);
            }

            document.Close();
            return stream;
        }

  

 

-------------------后面補充-----------------

后面看到了這個帖子:https://dotnetcoretutorials.com/2019/07/02/creating-a-pdf-in-net-core/

中的 這段話

 

 

我決定使用包【pugpdf】:https://github.com/pug-pelle-p/pugpdf

當然如果能解決itextsharp.lgplv2.core的中文問題,我覺得他是最好的選擇

-------------------后面補充-----------------

 

-------------------后面補充2-----------------

經過評論區的小伙伴的努力,解決了中文的問題,以下是全代碼

        public static MemoryStream Pdf(string html)
        {
            StringReader sr = new StringReader(html);
            //步驟1
            Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);

            MemoryStream stream = new MemoryStream();
            //步驟2
            PdfWriter.GetInstance(document, stream);
            //步驟3
            document.Open();

            //創建一個樣式表
            StyleSheet styles = new StyleSheet();
            ////設置默認字體的屬性
            //styles.LoadTagStyle(HtmlTags.BODY, "encoding", "Identity-H");
            //styles.LoadTagStyle(HtmlTags.BODY, HtmlTags.FONT, "Tahoma");
            //styles.LoadTagStyle(HtmlTags.BODY, "size", "16pt");

            //FontFactory.Register(@"C:\Windows\Fonts\tahoma.ttf");

            var unicodeFontProvider = FontFactoryImp.Instance;
            unicodeFontProvider.DefaultEmbedding = BaseFont.EMBEDDED;
            unicodeFontProvider.DefaultEncoding = BaseFont.IDENTITY_H;

            var props = new Hashtable
            {
            //    { "img_provider", new MyImageFactory() },
                { "font_factory", unicodeFontProvider } //始終使用Unicode字體
            };

            //步驟4
            //var objects = HtmlWorker.ParseToList(sr, styles, props);
            var objects = HtmlWorker.ParseToList(sr, styles);
            foreach (IElement element in objects)
            {
                BaseFont baseFont = BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont);
                Paragraph temp = element as Paragraph;
                if (temp != null)
                {
                    var chuck = temp[0] as Chunk;
                    if (chuck != null)
                    {
                        chuck.Font = font;
                        //document.Add(temp);
                    }
                }
                document.Add(element);
            }

            document.Close();
            return stream;
        }

  

但是我發現復雜的html解析效果不是很好(相對於其他)

於是我嘗試着自己來生成pdf

以下代碼完成了以下功能:

*添加圖片

*添加段落(文本)

*添加塊到某一處(文本)

using iTextSharp.text;
using iTextSharp.text.pdf;

 

        public static byte[] CreatePdfFile()
        {
            using (var stream = new MemoryStream())
            {
                var document = new Document(PageSize.A4, 0f, 0f, 0f, 0f);

                var writer = PdfWriter.GetInstance(document, stream);
                document.Open();

                //設置圖片大小和位置
                byte[] arr = Convert.FromBase64String(DataPdf.backgroundImg);
                Image image = Image.GetInstance(arr);
                image.ScaleToFit(document.PageSize.Width, document.PageSize.Height);
                image.SetAbsolutePosition(0, 0);
                //添加圖片
                document.Add(image);

                //創建字體
                BaseFont baseFont = BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
                Font font = new Font(baseFont);

                //一個段落文本
                Paragraph paragraph = new Paragraph(@"asdas打算的!@#$%^&*()_
asd 

asdasdasd

                    扯哦阿斯加德歐艾斯激動我按實際歐艾斯卷阿勝境的 

熬時間大廈將顛 
", font);
                
                //添加段落
                document.Add(paragraph);

          //添加塊到列
          var ct = new ColumnText(writer.DirectContent);

          ct.SetSimpleColumn(100, 150, 500, 800, 24, Element.ALIGN_LEFT);

          var chunk = new Chunk("啥的阿薩德阿薩德as阿薩德aaaaasdasfdawswd",font);

          ct.AddElement(chunk);
          ct.Go();

                //document.NewPage();
                //document.Add(new Phrase(""));

                //document.NewPage();
                //writer.PageEmpty = false;

                document.Close();
                return stream.ToArray();
            }
        }

  

學習文本(塊,短語,段落)

https://www.mikesdotnetting.com/article/82/itextsharp-adding-text-with-chunks-phrases-and-paragraphs

 

-------------------后面補充2-----------------

 

塊,短語和段落的文本


免責聲明!

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



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