整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

C#使用iTextSharp操作PDF文件

C#使用iTextSharp操作PDF文件

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

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

代码实现

1、nuget 安装iTextSharp。

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

2、将Html文档转换为pdf。

  •  /// <summary> /// 将Html文档转换为pdf /// </summary> /// <param name="htmlText"></param> /// <returns></returns> public byte[] ConvertHtmlTextToPDF(string htmlText) { if (string.IsOrEmpty(htmlText)) return ; //避免当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, , 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> /// 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; foreach (var dict in dicts) { content=content.Replace("{{" + dict.Key + "}}", dict.Value); } var path=_esignInfo.Value.ContractPath; //if (entity.ContractType==ContractType.First) //{ // path +="/" + appId + "/Agreements"; //} entity.OriginalFileUrl=_pdfHelper.WritePdfFile(content, contractNo, path, "PDF"); bool isSucc=!String.IsOrEmpty(entity.OriginalFileUrl);

ngleSharp 是一个用于处理 HTML 和 XML 的 .NET 库。它提供了一个强大的 DOM API,支持解析、修改和操作 HTML。下面是一个使用 AngleSharp 来解析 HTML 网页元素的基本示例:

首先,你需要安装 AngleSharp。你可以通过 NuGet 包管理器来安装它。在 Visual Studio 中,打开“工具”菜单,选择“NuGet 包管理器”,然后选择“管理解决方案的 NuGet 包”。搜索 AngleSharp 并安装它。

然后,创建一个 C# 控制台应用程序,并使用以下代码来解析 HTML 元素:

csharpusing System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
using AngleSharp; // 引入AngleSharp命名空间

class Program
{
    static async Task Main(string[] args)
    {
        string url="http://example.com"; // 替换为你要抓取的网页URL
        string outputFile="output.txt"; // 输出文件名
        await DownloadWebPage(url, outputFile);
    }

    static async Task DownloadWebPage(string url, string outputFile)
    {
        HttpClient client=new HttpClient();
        HttpResponseMessage response=await client.GetAsync(url);
        response.EnsureSuccessStatusCode();
        string html=await response.Content.ReadAsStringAsync();
        
        // 创建AngleSharp的Document对象并加载HTML内容
        var document=await AngleSharp.Parser.Default.ParseAsync(html);
        
        // 获取要提取的元素,例如标题、段落等。这里我们获取所有的<p>标签元素。
        var paragraphs=document.QuerySelectorAll("p"); // 使用CSS选择器来选择元素
        if (paragraphs !=null)
        {
            foreach (var para in paragraphs)
            {
                // 输出每个段落的内容到控制台或写入文件
                Console.WriteLine(para.InnerHtml); // 输出到控制台
                // File.WriteAllText(outputFile, para.InnerHtml); // 写入文件(如果需要)
            }
        }
    }
}

在这个示例中,我们首先使用 HttpClient 从指定的 URL 下载 HTML 内容。然后,我们使用 AngleSharp 的 Parser 类来解析 HTML,并将结果存储在一个 Document 对象中。通过 QuerySelectorAll 方法,我们可以选择我们要提取的元素。在这个例子中,我们选择了所有的 <p> 标签元素,并输出了它们的内部 HTML 到控制台。如果你想将内容写入文件,可以使用 File.WriteAllText 方法。

net体系

.net core

.net 类库

asp.net mvc

asp.net webapi

asp.net core

EF

跨平台和运行时解决方案(解决方案)

Katana:微软基于OWIN规范实现的非IIS寄宿ASP.NET和MVC等。

MONO.NET:跨平台的.NET运行环境,让.NET跨平台运行成为可能。

Unity3D:微软大力支持的机遇C#和JavaScript的跨平台游戏开发框架。

Cassini、IIS Express和Cassinidev:开源的ASP.NET执行环境。

IKVM.NET:基于.NET的JAVA虚拟机,让JAVA运行在.NET之上。

Enterprise Library:微软针对企业级应用开发的最佳实践组件。

架构思想框架

PetShop:微软ASP.NET宠物商店。 分层思想的代表

ABP ASP.NET Boilerplate Project (ASP.NET样板项目) 。 领域驱动思想代表

eShopOnContainers:微服务架构和Docker容器的一个简单的.Net Core的应用。微服务思想代表

依赖注入IOC容器框架(解耦)

Unity:微软patterns&practicest团队开发的IOC依赖注入框架,支持AOP横切关注点。

Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。

Autofac:最流行的依赖注入和IOC框架,轻量且高性能,对项目代码几乎无任何侵入性。

Ninject:基于.NET轻量级开源的依赖注入IOC框架

数据访问和ORM框架(数据访问层,持久化层)

EF(ADO.NET Entity Framework):微软基于ADO.NET开发的ORM框架。

Dapper:轻量级高性能基于EMIT生成的ORM框架。

EmitMapper:性能较高的ORM框架,运行时通过EMIT动态生成IL代码,并非采用反射机制。

FluentData:开源的基于Fluent API的链式查询ORM轻量级框架。

SqlMapper.cs:用于小项目的通用的C#数据库访问类。

SqlHelper.cs:用于小项目的通用的C#数据库访问类。

EnterpriseLibray:微软企业库,特点是快速开发,融合了微软工程师多年的经验。

Nhibernate:面向.NET环境的轻量级的ORM框架。

数据间格式转换

Newtonsoft.Json:目前.NET开发中最流行的JSON序列化库,为新版的WebApi库提供基础。

AutoMapper:流行的对象映射框架,可减少大量硬编码,很小巧灵活,性能表现也可接受。

实体类和DataTable的转换 :反射,表达式树,emit三种中,三选一。

Redis和数据连接驱动框架

ServiceStack.Redis:

StackExchange.Redis:

csredis:

MySQL Connector:完全托管的 MySQL ADO.NET 数据库提供程序、连接器

中间件与消息队列

RabbitMQ.NET:AMQP 客户端的 C# 实现

NServiceBus:.NET 平台下最流行的服务总线

全文搜索和爬虫框架

Lucene.net:流行高性能的全文索引库,可用于为各类信息提供强大的搜索功能。

Elasticsearch.Net:操作ES

日志记录框架

Log4Net.dll:轻量级的免费开源.NET日志记录框架。

NLog:是一个简单灵活的日志记录类库,性能比Log4Net高,使用和维护难度低。

任务计划调度

Quartz.NET:开源的作业调度和自动任务框架。

办公系列框架(文档操作)

NPIO.dll:该项目是 .NET 版本的 POI 项目,原始的 Java 版本位于http://poi.apache.org/ 。

DocX:不需要安装word软件,通过C#操作word文件。

Open XML SDK:Open XML SDK 是一个开源库,用于处理 Open XML 文档

ITextSharp:iText 是一个PDF库,用于创建、修改、检查和维护 (PDF)格式的文档

语法解析和模板引擎(Template Engine)

RazorEngine:基于微软 Razor 解析器引擎的开源模板引擎。官网

Nustache:无逻辑模板的开源库。官网

DotLiquid:Ruby Liquid 模板语言的 C# 移植版本

MarkdownSharp:C# 实现的开源 Markdown 处理器,在 Stack Overflow 中使用

JavaScript.NET和ClearScript(微软出品):基于.NET开发的JavaScript引擎

ExCSS:C# 的 CSS3 解析器开发库

HtmlAgilityPack:一个灵活的 HTML 解析器,可以对 DOM 进行读写,支持 XPATH 和 XSLT

通讯框架(网络)

SignalR:ASP.NET 库,开发者可以通过它在 web 应用程序中非常简单地实现实时功能

Helios:一套高性能的Socket通信中间件

压缩框架

SharpZipLib:一个 Zip、GZip、Tar 和 BZip2 的类库,完全由 C# 编写,面向 .NET 平台

安全性框架

OAuth:超轻量级 OAuth 1.0a 签名生成库,C# 编写

ASP.NET Identity:用于 ASP.NET 应用程序的新身份系统。

IdentityServer:可扩展的 OAuth2 和 OpenID 连接提供程序框架

HashLib:HashLib 包含了几乎所有你见过的哈希算法,它几乎支持所有东西并且非常容易使用

图像处理框架

Paint.NET:基于.NET小巧灵活强大的图形处理开源项目。

NGraphics:NGraphics 是一个 .NET 跨平台矢量图形渲染库

DynamicImage:高性能开源图片处理库,用于 ASP.NET

人工智能与数学框架

Math.NET:强大的数学运算、微积分、解方程和科学运算。

Accord.NET:机器学习框架,包含了音频和图像处理的库(计算机视觉、计算机听觉、信号处理和统计)

移动互联网和云计算

PushSharp:通过.NET向各种移动平台推送消息。

mono for android:用.NET语言开发安卓应用:

MonoTouch:用.NET语言开发IOS应用。

PhoneGap和AppCan:跨平台基于HTML5的移动开发平台。

Cordova:PhoneGap贡献给Apache后的开源项目,是驱动PhoneGap的核心引擎。

桌面程序框架

DevExpress:一个全球知名的桌面应用程序UI控件库。

Prism:微软开发的针对WPF和Silverlight的MVVM框架,通过功能模块化的思想,来讲复杂的业务功能和UI耦合性进行分离。

WPFToolkit 和 Fluent Ribbon Control Suite:开发类似于Office风格的Ribbon菜单。

测试(Testing)

Faker.Net:方便生成大批量测试数据的框架。

包管理

NuGet:.NET 包管理器。官网

MyGet:为 NuGet、NPM、Bower 和 VSIX 提供程序包仓库宿主,同样提供 CI 服务。

Paket:.NET 的一个包依赖管理器,支持 NuGet 包和 GitHub 仓库。

编译器和IDE框架

ILSpy:ILSpy 是一个开源的 .NET 程序集查看器和反编译器

Visual Studio Code:非常棒的编辑器,来自微软,基于 GitHub Atom

MSBuild也是一个MIT License的开源软件,可以在Github上看到它的 仓库 。

Visual Studio 插件

Resharper:Visual Studio 开发人员生产力工具

打包发布和自动构建持续集成和升级框架

Wix Toolset:强大的工具集,用于创建你自己的 Windows 安装程序

Squirrel:Squirrel 即是一套工具也是一个类库,可以无安全管理 Windows 桌面程序的安装和更新

MSBuild:微软构建引擎(MSBuild)是 .NET 和 Visual Studio 的构建平台

Psake:基于 .NET 的自动化构建工具,使用 PowerShell 编写

成品应用系统框架

Orchard:国外一个MVC开源的博客,内容管理CMS系统。

技术选型或技术预研

选型考虑三要素:功能性,性能,稳定性

功能性:满足现在和可预期的未来

性能:考虑现在和未来,明白上限

稳定性

  • 1.主流,团队中询问大家用过的多不
  • 2.坑少,资料多,千锤百炼
  • 3.不要让本已满负荷的小小团队,再去趟雷,你和你的技术团队有那个实力吗第一个吃螃蟹。

如果有多个优秀待选?

团队人员:

有很多优秀的可选,看团队的熟练度

个人素质:

广度决定能知道

深度决定知道好

不用并不代表不关注

选不好,会造成进退两难,人马疲惫

关于以后

不要让以后,忽略了当下。

太多的以后可能让你走不出当下。

真的有以后吗。

想做好,少不了以后。