原文 如何使用ITEXTSHARP将HTML代码字符串写进PDF

itextsharp包括一个简单的类,可以用来根据html代码或字符串创建pdf文件。使用此类,你可以使用短短几行代码,就将 HTML 文档生成一个 PDF 文件。可供下载的演示包含名为 Receipt.htm,其中位于 ~/HTMLTemplate 文件夹中的 HTML 模板文件。此 HTML 文件包含以下标记 (注意-为简洁起见被移除了一些标记)。

 <h1 style="font-weight: bold">Northwind Traders Receipt</h1> 
<p> 
   Thank you for shopping at Northwind Traders. Your order details are below. 
</p> 
<br /><br /> 
<h2 style="font-weight: bold">Order Information</h2> 
<table> 
   <tr> 
      <td style="font-weight: bold">Order:</td> 
      <td>[ORDERID]</td> 
   </tr> 
   <tr> 
      <td style="font-weight: bold">Price:</td> 
      <td>[TOTALPRICE]</td> 
   </tr> 
   <tr> 
      <td style="font-weight: bold">Order Date:</td> 
      <td>[ORDERDATE]</td> 
   </tr> 
</table> 
<br /><br /> 
<h2 style="font-weight: bold">Items In Your Order</h2> 
[ITEMS]
<br /><br /> 
<p style="text-align: center; font-style: italic; font-size: 10pt"> 
   Thank you for your business! If you have any questions about your order, please contact us at 
   800-555-NORTH. 
</p>

请注意,上述标记包含四占位符-括号包围的文本。这里的想法是,我们用itextsharp转上述标记为我们首先将替换占位符的顺序编号,总价格,和其他指标的订单,生成一个收据。转成一个网页,包括下列步骤:

  1. 创建一个文件对象的。
  2. 创建一个pdfwriter对象的。
  3. 在文本作为字符串。
  4. itextsharp的电话htmlworker.parsetolist方法,通过在网页转换成格式。这将返回一个元素的集合。
  5. 添加的每个元素返回步骤3到文件对象的

这内容receipt.htm为一个字符串,然后替换占位符-是通过下面的代码片断:

// Read in the contents of the Receipt.htm file...
string contents = File.ReadAllText(Server.MapPath("~/HTMLTemplate/Receipt.htm"));

// Replace the placeholders with the user-specified text
contents = contents.Replace("[ORDERID]", txtOrderID.Text);
contents = contents.Replace("[TOTALPRICE]", Convert.ToDecimal(txtTotalPrice.Text).ToString("c"));
contents = contents.Replace("[ORDERDATE]", DateTime.Now.ToShortDateString());

...

代码有点长,但它并不十分复杂。该代码简单地建立标记为循环CheckBox List和添加一个表行(< BR >)为每个选定的采购项目。

一旦文本字符串组成了我们准备步骤4和5。步骤4 - itextsharp的htmlworker.parsetolist方法解析文本字符串并返回一个集合的元素。步骤5列举了这个集合的元素,将它们添加到文件对象的。

// Step 4: Parse the HTML string into a collection of elements...
var parsedHtmlElements = HTMLWorker.ParseToList(new StringReader(contents), null);

// Enumerate the elements, adding each one to the Document...
foreach (var htmlElement in parsedHtmlElements)
   document.Add(htmlElement as IElement);

页面解析是简单地转换成元素可以被添加到文档。除了这些解析元素还可以添加元素创建,就像我们在我们以前的演示(createpdffromscratch.aspx)。例如,我们可以添加标志的右上角的收据使用相同的代码之前:

var logo = iTextSharp.text.Image.GetInstance(Server.MapPath("~/Images/4guysfromrolla.gif"));
logo.SetAbsolutePosition(440, 800);
document.Add(logo);

如何使用ITEXTSHARP将HTML代码字符串写进PDF的更多相关文章

  1. 将字符串写进txt中方式

    try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ...

  2. 【转】如何把Json格式字符写进text文件中

    http://www.cnblogs.com/insus/p/4306640.html http://json2csharp.chahuo.com/ 本篇一步一步学习怎样把显示于网页的json格式的字 ...

  3. 如何把Json格式字符写进text文件中

    本篇一步一步学习怎样把显示于网页的json格式的字符串写进text文件中,并保存起来.学习到创建model, Entity, 序列化List<object>转换为json,显示于网页上.然 ...

  4. js正则实现从一段复杂html代码字符串中匹配并处理特定信息

    js正则实现从一段复杂html代码字符串中匹配并处理特定信息 问题: 现在要从一个复杂的html代码字符串(包含各种html标签,数字.中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他 ...

  5. 几道JS代码手写面试题

    几道JS代码手写面试题   (1) 高阶段函数实现AOP(面向切面编程)    Function.prototype.before = function (beforefn) {        let ...

  6. 【Xamarin挖墙脚系列:代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧(转)】

    正愁如何选择构建项目中的视图呢,现在官方推荐画板 Storybord...但是好像 xib貌似更胜一筹.以前的老棒子总喜欢装吊,用代码写....用代码堆一个HTML页面不知道你们尝试过没有.等页面做出 ...

  7. JS页面跳转代码怎么写?总结了5种方法

    我们在建站时有些链接是固定的,比如客服咨询链接,一般是第三方url,如果直接加上去不太专业,那么就想着用站内的页面做跳转,跳转用js比较多,那么JS页面跳转代码怎么写呢?ytkah在网上搜索了一下,大 ...

  8. 代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧

    近期接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问.就是应该怎样制作UI界面.iOS应用是非常重视用户体验的,能够说绝大多数的应用成功与否与交互设计以及UI是否美丽易用有着非常大的关 ...

  9. 在linux上一行代码不用写实现自动采集+hadoop分词

    在linux上一行代码不用写实现自动采集+hadoop分词 将下面的shell脚本保存成到xxx.sh,然后执行即可 cd /opt/hadoop mkdir spider wget -O spide ...

随机推荐

  1. Java反射机制及IoC原理

    一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.在java中,只要给定类的名字, 那么就可以通 ...

  2. Win7 64位 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  3. 使用ShareSDK 时注意的问题

    1.使用ShareSDK 社会分享SDK(实现第三方登录) 1.QQ第三方登录时,如果是TencentSessionDelegate出现问题,或者是TencentApiInterface的框架出现问题 ...

  4. C# 计算字符串在控制台中的显示长度

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  5. SVN修改用户名与密码

    由于在svn的界面中并没有为我们提供直接更换用户名密码的地方,所以一旦我们需要更换用户名的就需要自己想一些办法. 解决方案如下: 在Eclipse使用SVN的过程中大多数人往往习惯把访问SVN的用户名 ...

  6. 转载:[转]如何学好3D游戏引擎编程

      [转]如何学好3D游戏引擎编程 Albert 本帖被 gamengines 从 游戏引擎(Game Engine) 此文为转载,但是值得一看. 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的 ...

  7. [LeetCode]413 Arithmetic Slices

    A sequence of number is called arithmetic if it consists of at least three elements and if the diffe ...

  8. ASP.NET Web服务调用发生错误,错误代码404

    现象: iOS端使用ASIHTTP连接Web服务时,得到的数据是一个错误代码为404的页面,错误信息(web.config添加<customErrors mode="Off" ...

  9. wpf 报错: 在 AddNew 或 EditItem 事务过程中不允许“DeferRefresh”。

    今天修改Bug的时候遇到一个问题: datagrid 设置了双击事件,双击弹出一个窗口,在多次点击后报错:在 AddNew 或 EditItem 事务过程中不允许“DeferRefresh” 网上查了 ...

  10. 从csdn博客搬家过来,请多关照!

    之前一直在csdn博客,也写了不少关于java的文章,主要是学习java上的一些问题.想通过这种方式来加深对问题的认知,同时也可以帮助到志同道合的人,一起在编程的道路上共进,共勉.