【实用教程】.NET C# PDF 生成技术:哪种方法适合您的项目?

概述:本文介绍了 TX Text Control 真正的 WYSIWYG(所见即所得)模板系统所带来的独特优势,与传统的 PDF 生成系统(如 HTML 到 PDF 转换器或需要自定义编程的 PDF 库)相比,模板是可视化设计的,类似于 Microsoft Word。

TX Text Control 是一款功能类似于 MS Word 的文字处理控件,包括文档创建、编辑、打印、邮件合并、格式转换、拆分合并、导入导出、批量生成等功能。广泛应用于企业文档管理,网站内容发布,电子病历中病案模板创建、病历书写、修改历史、连续打印、病案归档等功能的实现。

在文档处理应用程序中比较文档的策略有很多。最常见的方法之一是逐字比较文档的文本。这是一种简单有效的文档比较方法,但它确实有一些局限性。

TX Text Control 最新下载

当您在应用程序开发中接到创建 PDF 文档的任务时,您会进行研究并找到许多不同的工具来帮助您完成这项工作。当然,您可以尝试自己创建 PDF,方法是研究最新的 PDF 2.0 规范(ISO 32000:2:2020)的约 1000 页,其中包含有关 PDF 文件格式、渲染、加密和其他功能的所有技术细节。但让我们面对现实:这是一项巨大的时间投入,有整个公司都在处理此事(例如我们 - Text Control)。

第一步是确定要创建哪种类型的 PDF 文档,最重要的是要确定要创建多少个。当涉及到 PDF 创建过程所需的灵活性时,这一决定至关重要。决策过程中还应考虑许多其他方面。

  • 您是否需要从头开始创建 PDF 或者您是否拥有可以重复使用的现有文档?
  • 您需要创建多少种不同类型的文档(以及将来需要创建多少种不同类型的文档!)?
  • 组织中的哪个角色应该能够对文档或模板进行更改,例如更改徽标?

仅这三个问题就可以开启一个完整的思考过程,即文档生成过程应该如何模块化和易于维护。

HTML 到 PDF 的转换

开发人员的一个非常普遍的想法是使用工具将 HTML 转换为 PDF。理由听起来很正确,因为作为开发人员,我们知道如何编写 HTML,并且对 HTML 和 CSS 样式充满信心。因此,此过程的基本思想是开发人员使用 CSS 创建 HTML,转换器根据该输入创建 PDF。流行的库包括 wkhtmltopdf、Puppeteer 和 Headless Chrome。

优点:

  • 熟悉的标记:轻松创建 HTML 和 CSS。
  • 动态内容:轻松创建动态内容。
  • 快速结果:快速实施。

缺点:

  • 不一致的渲染:由于渲染引擎对 HTML/CSS 的解释方式不同,HTML 到 PDF 转换器可能难以实现一致的布局和样式。
  • 复杂布局: HTML 不是为打印精度而设计的,因此很难实现精确定位、对齐或特定于页面的布局(例如固定的页眉和页脚)。
  • 性能:复杂或大型的 HTML 文档会减慢 PDF 创建过程。

对于简单文档或需要从网页创建 PDF 时,HTML 到 PDF 的转换是一个不错的选择。但是对于发票、报告或合同等复杂文档,HTML 到 PDF 转换器有其局限性。

程序化 PDF 生成

了解了 HTML 方法的局限性之后,使用一种能够更精确地定位元素的方法似乎是显而易见的。

程序化 PDF 创建是使用编程接口创建 PDF 文档的过程。这种方法更加灵活,允许您创建具有精确布局和样式的复杂文档。在您的代码中,您基本上将某些元素定位在页面上的 x 和 y 坐标上。

优点:

  • 精细控制:页面上元素的精确定位。
  • 定制:完全控制文档的布局和样式。
  • 一致性:由于布局是编码的,因此平台之间出现不一致的风险较小。

缺点:

  • 劳动密集型:开发人员必须手动定义和定位每个元素,这对于复杂的文档来说可能是一个耗时的过程。
  • 需要编程技能:非技术用户无法创建或自定义模板,因此任何更改都需要开发人员的干预。
  • 手动分页:开发人员必须明确处理分页符和溢出内容,这增加了编码过程的复杂性。

对于需要精确布局和样式的复杂文档,程序化 PDF 生成是一个不错的选择。但是,它可能非常耗时,并且需要编程技能来创建和维护模板。

以下代码片段使用 QuestPDF,这是一个用于创建 PDF 文档的开源 .NET 库。该代码基本上将文本添加到标题中,您已经可以看到这提供了一种灵活的方式,但所有元素都必须以编程方式定位,并且静态文本也嵌入到代码中。

void ComposeHeader(IContainer container)
{var titleStyle = TextStyle.Default.FontSize(20).SemiBold().FontColor(Colors.Blue.Medium);container.Row(row =>{row.RelativeItem().Column(column =>{column.Item().Text($"Invoice #{Model.InvoiceNumber}").Style(titleStyle);column.Item().Text(text =>{text.Span("Issue date: ").SemiBold();text.Span($"{Model.IssueDate:d}");});column.Item().Text(text =>{text.Span("Due date: ").SemiBold();text.Span($"{Model.DueDate:d}");});});row.ConstantItem(100).Height(50).Placeholder();});
}

更高的维护和技术债务

由于程序化 PDF 中的布局逻辑嵌入在代码中,因此任何模板调整都需要更改代码,即使是微小的调整也是如此。这会导致:

  • 设计变更的反馈循环更长。
  • 依赖开发人员进行模板调整,限制灵活性。
  • 维护成本更高,因为模板或业务规则的更新需要持续的开发时间。

基于模板的 PDF 生成

基于模板的系统允许用户直观地设计 PDF 模板,通常使用与文字处理器非常相似的拖放界面。此设置允许 WYSIWYG(所见即所得)设计,其中模板看起来与最终输出完全相同。

TX Text Control 不仅可用于从头开始编写 PDF(如第二种方法中所述),还可用于使用 WYSIWYG 模板的最灵活方法。TX Text Control 附带一个功能齐全、可自定义且可编程的文档编辑器,可集成到 Web 应用程序中,让非技术用户创建像素完美的模板。SDK 还提供了一个非 UI 引擎,可完全嵌入到采用此模板并将来自各种数据源的数据合并到模板中的应用程序中。

这个概念不仅让您能够为用户提供一个非常易于使用的模板创建界面,而且还为您在合并过程中提供充分的灵活性。

优点:

  • 用户友好型设计:所见即所得的设计工具允许非开发人员轻松创建模板,从而让更广泛的用户可以使用。
  • 动态且一致的布局:基于模板的系统自动管理分页符和内容溢出,确保一致的布局,而无需自定义代码。
  • 高保真输出:用户可以准确地看到他们的文档的外观,从而减少了测试和修改的需要。
  • MS Word 兼容性:可以从 Microsoft Word 导入和导出模板,从而轻松重复使用现有文档。

缺点:

  • 学习曲线:开发人员需要学习如何将模板系统集成到他们的应用程序中。

TX Text Control 将强大的动态文档生成功能(如合并字段、重复和条件合并块)与易于使用的模板设计相结合。

以下代码使用 TX Text Control 加载预先设计的模板并将 JSON 数据合并到其中以创建像素完美的 PDF。

using TXTextControl.DocumentServer.Fields;using (TXTextControl.ServerTextControl tx = new TXTextControl.ServerTextControl())
{tx.Create();TXTextControl.LoadSettings ls = new TXTextControl.LoadSettings(){ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord,LoadSubTextParts = true};tx.Load("template.docx", TXTextControl.StreamType.WordprocessingML, ls);using (TXTextControl.DocumentServer.MailMerge mailMerge =new TXTextControl.DocumentServer.MailMerge()){var jsonData = System.IO.File.ReadAllText("data.json");mailMerge.TextComponent = tx;mailMerge.MergeJsonData(jsonData);}tx.Save("output.pdf", TXTextControl.StreamType.AdobePDF);
}

结论

每种方法都有不同的用途,选择方法通常取决于文档类型、布局复杂程度和可用的技术专长。TX Text Control 等解决方案具有所见即所得的设计和灵活的数据合并功能,提供了理想的折中方案,将模板设计的视觉简洁性与强大的 PDF 生成功能相结合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/58820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

notepad++ compare插件的离线下载和安装

一、离线安装 去改地址找到最新的插件:https://github.com/notepad-plus-plus/nppPluginList/blob/master/doc/plugin_list_x64.md下载之后复制到插件文件夹,插件文件夹的打开方式如下 注意目录: 二、问题汇总 (1&#xff09…

echarts地图,柱状图,折线图实战

1.地图 <template><div style"height: 100%;" class"cantainerBox"><div class"top"><div class"leftTop"><span class"firstSpan">推广进度</span><div>省份选择&#xff1a;&l…

HTB:Cicada[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行开放端口扫描 使用nmap对靶机开放端口进行脚本、服务信息扫描 首先尝试空密码连接靶机SMB服务 由于不知道账户名&#xff0c;这里我们使用crackmapexec对smb服务进行用户爆破 通过该账户连接至靶机SMB服务器提取敏感信…

张嘉译王海燕婚姻告急?17年长跑终落幕,真相究竟如何?

娱乐圈又一对金童玉女分道扬镳&#xff1f;在这个瞬息万变的娱乐圈里&#xff0c;爱情似乎总是来得快去得也快。近日&#xff0c;一则关于实力派演员张嘉译与妻子王海燕结束17年婚姻长跑的消息&#xff0c;如同一颗重标题&#xff1a;&#x1f494;张嘉译王海燕婚姻告急&#x…

我的电视 左侧列表内置版 | 非常高清,频道丰富的电视直播应用

我的电视是一款专注于电视直播的应用程序&#xff0c;提供丰富且全面的电视频道&#xff0c;包括央视及各大卫视。无论您是想看新闻、体育、电影还是综艺节目&#xff0c;都可以在这里找到。应用支持高清画质播放&#xff0c;确保流畅无卡顿的观看体验。简洁的界面设计和智能推…

Conmi的正确答案——在Kibana中进入Elasticsearch的索引管理页面

Elasticsearch版本&#xff1a;7.17.25 Kibana版本&#xff1a;7.17.25 注&#xff1a;索引即类似mysql的表。 0、进入首页 1、未创建任何“索引模式”时&#xff1a; 1.1、点击左边的三横菜单&#xff1b; 1.2、点击“Discover”&#xff0c;进入“发现”页面&#xff1b; 2…

在线体验Sketch中文版,免费下载即刻上手!

Sketch是一款轻量而高效的矢量设计工具&#xff0c;助力全球设计师创造了诸多惊艳作品。安装Sketch的优势主要体现在其矢量编辑、控件和样式功能上。而下载安装“Sketch中文版”即时设计同样出色&#xff0c;它作为一站式设计平台&#xff0c;功能更全面。即时设计拥有纯中文的…

aws(学习笔记第九课) 使用AWS的网络存储EBS

aws(学习笔记第九课) 使用AWS的网络存储EBS 学习内容&#xff1a; 使用AWS的网络存储EBS 1.使用AWS的网络存储EBS EBS是什么 EBS是aws Elastic Block Store的缩写&#xff0c;就是AWS的弹性数据块存储。EBS有如下特点。 它不属于EC2的一部分&#xff0c;独立存在。可以独立存…

DAY67WEB 攻防-Java 安全JNDIRMILDAP五大不安全组件RCE 执行不出网

知识点&#xff1a; 1、Java安全-RCE执行-5大类函数调用 2、Java安全-JNDI注入-RMI&LDAP&高版本 3、Java安全-不安全组件-Shiro&FastJson&JackJson&XStream&Log4j Java安全-RCE执行-5大类函数调用 Java中代码执行的类&#xff1a; Groovy Runti…

11-Python基础编程之错误和异常

Python基础编程之错误和异常 概念错误异常 常见的系统异常异常的解决预防捕捉处理异常with语句 手动抛出异常自定义异常 概念 错误 可以通过代码进行修复&#xff1b; 异常 需要提前考虑&#xff0c;设定限制条件&#xff1b;不能通过代码进行修复&#xff1b; 常见的系…

鸿蒙开发融云demo发送图片消息

鸿蒙开发融云demo发送图片消息 融云鸿蒙版是不带UI的&#xff0c;得自己一步步搭建。 这次讲如何发送图片消息&#xff0c;选择图片&#xff0c;显示图片消息。 还是有点难度的&#xff0c;好好看&#xff0c;好好学。 一、思路&#xff1a; 选择图片用&#xff1a;photoVie…

Linux工具(yum/apt,vim)

yum(或apt) Linux中常见的软件的安装方式 : 1. yum/apt 2. rpm 安装包安装 3. 源码安装 yum/apt相当于手机中的各种应用管家 vim指令 vim是一个多模式的编辑器,只用于写代码 刚进入vim默认是命令模式 想要在vim中写代码,必须要进入插入模式 想要退出vim首先必须进入底行…

Java设计模式之代理模式(一)

什么是代理&#xff1f;可以理解为其他对象提供一种代理以控制对这个对象的访问。 举个例子&#xff0c;生活中的外卖平台&#xff0c;店铺是制作外卖的&#xff0c;然后放到平台上售卖。这里的店铺就是真实角色&#xff0c;为了能够让店铺不用担心销售等问题&#xff0c;从而…

各类素材网站下载主题源码 CeoDocs v3.6 开心版

WordPress付费办公素材下载主题 – 各类素材网站下载主题 CeoDocs_v3.6_开心版CeoDocs主题是一款轻量级、 且简洁大气、付费素材下载类型主题&#xff0c;定位于办公素材行业&#xff0c;当然也适用于办公文档、PPT模板、设计素材、 图片素材、音效素材、视频素材各类素材网站…

巨好看的登录注册界面源码

展示效果 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content"widthdevic…

Redis-发布/订阅交互模式

文章目录 一、消息代理介绍二、Redis中客户端、服务器之间的交互模式介绍三、Redis发布/订阅交互模式的操作 一、消息代理介绍 “消息代理”&#xff08;Message Broker&#xff09;是一种软件组件&#xff0c;它在不同的应用程序之间传递消息。在Redis的上下文中&#xff0c;…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务&#xff0c;每个工作负载管理一组Pod。以Deployment为例&#x…

18.04Ubuntu遇到Unable to locate package

解决办法&#xff1a; 要先升级你的apt Sudo apt-get update

《安全基石:等保测评的全方位解读》

在数字化转型的浪潮中&#xff0c;网络安全已成为企业生存与发展的核心议题。等保测评&#xff0c;作为我国网络安全等级保护制度的重要组成部分&#xff0c;不仅是企业安全的基石&#xff0c;更是推动企业高质量发展的关键。本文将全面解读等保测评的内涵、作用及其对企业的深…

(五)Spark大数据开发实战:灵活运用PySpark常用DataFrame API

目录 一、PySpark 二、数据介绍 三、PySpark大数据开发实战 1、数据文件上传HDFS 2、导入模块及数据 3、数据统计与分析 ①、计算演员参演电影数 ②、依次罗列电影番位前十的演员 ③、按照番位计算演员参演电影数 ④、求每位演员所有参演电影中的最早、最晚上映时间及…