C#实现将WORD转化为PDF有啥方案?除去COM组件和那些商业组件?

关注者
3
被浏览
4,647

1 个回答

html文件怎么转成PDF文件?有的招聘网上的简历导成DOC文件,不能直接使用,这样造成很大的困扰,那么它还有一个格式,那就是html格式。将文件导出成html格式,然后再转成PDF文件,这样便可以直接使用了。平常在项目中也是很多这样的需求,需要把内容转成pdf文件。

下面我们来看下使用 iTextSharp实现HTML转PDF的方法。

临时加更干货分享

大家能看到这里,已是对我们的支持了。 分享一组9月录制的C#零基础教程。 我们喜欢做这样的分享,它足够的基础,对新手友好。如果需要的话,就来免费领取吧!

快来领取吧

资料免费自取:

由于内容过多不便呈现, 需要视频教程和配套源码的小伙伴,点击下方卡片!

也可点击下方卡片: 点击后自动复制威芯号,并跳转到威芯。搜索威芯号添加,内容已做打包, 备注知乎

即可免费领取,注意查收!

代码实现

1、nuget 安装iTextSharp。

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

2、将Html文档转换为pdf。

/// <summary>
 /// <summary>
        /// 将Html文档转换为pdf
        /// </summary>
        /// <param name="htmlText"></param>
        /// <returns></returns>
        public byte[] ConvertHtmlTextToPDF(string htmlText)
            if (string.IsNullOrEmpty(htmlText))
                return null;
            //避免当htmlText无任何html tag标签的纯文字时,转PDF时会挂掉,所以一律加上<p>标签
            htmlText = "<p>" + htmlText + "</p>";
            using (var outputStream = new MemoryStream())
                byte[] data = Encoding.UTF8.GetBytes(htmlText);
                var msInput = new MemoryStream(data);
                var doc = new Document();//pdf文档,默认A4格式。
                var writer = PdfWriter.GetInstance(doc, outputStream);
                doc.Open();
                //使用XMLWorkerHelper把Html parse到PDF
                iTextSharp.tool.xml.XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, msInput, null, Encoding.UTF8, new UnicodeFontFactory());
                //指定默认缩放比例为100%
                var pdfDest = new PdfDestination(PdfDestination.XYZ, 0, doc.PageSize.Height, 1f);
                //将默认设置写入pdf
                var action = PdfAction.GotoLocalPage(1, pdfDest, writer);
                writer.SetOpenAction(action);
                doc.Close();
                msInput.Close();
                outputStream.Close();
                return outputStream.ToArray();
        }

3、Unicode 字体支持。

/// <summary>
 /// <summary>
        /// Unicode 字体支持
        /// </summary>
        public class UnicodeFontFactory : FontFactoryImp
            public override Font GetFont(string fontname, string encoding, bool embedded, float size, int style, BaseColor color, bool cached)
                //使用微软雅黑字体解决中文乱码的问题,因为雅黑字体为字体集合所以需要使用,0来指定具体的字体。
                //var chineseFontPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "msyh.ttc,0");
                //BaseFont baseFont = BaseFont.CreateFont(@"c:\Windows\Fonts\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                BaseFont baseFont = BaseFont.CreateFont(@"c:\Windows\Fonts\SIMHEI.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
                //var baseFont = BaseFont.CreateFont(chineseFontPath, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
                return new Font(baseFont, size, style, color);
        }

4、调用生成。

   string content = temp.Content;
 string content = temp.Content;
            foreach (var dict in dicts)
                content = content.Replace("{{" + dict.Key + "}}", dict.Value);
            var path = _esignInfo.Value.ContractPath;
            //if (entity.ContractType == ContractType.First)