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

原文 如何使用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);
时间: 2024-10-03 01:16:06

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

不要把代码逻辑写在assert里!

虽然很清楚assert在release下不管用,但是还会把代码逻辑写进assert,导致在release下逻辑无法执行,调试了好长时间.. assert不只是在release下不能触发"异常",而且整个代码逻辑都不执行 #define assert(_Expression)     ((void)0)

JAVA 中一个字符串s ,有36位取前24位,代码怎么写?

问题描述 JAVA 中一个字符串s ,有36位取前24位,代码怎么写? 求解..JAVA 中 一个字符串s ,有36位取前24位,代码怎么写? 解决方案 s.substring(0 24) 解决方案二: s = s.subString(s 24); 解决方案三: s.substring(024); substring()方法包头不包尾索引从0开始 解决方案四: s = s.subString(024); substring()方法包头不包尾索引从0开始 解决方案五: s = s.subStrin

sql-ASP读取SQL数据表 生成多记录JSON 具体代码如何写 求教大神

问题描述 ASP读取SQL数据表 生成多记录JSON 具体代码如何写 求教大神 数据表是user 主键是m_Name <%response.ContentType=""text/json"" response.write request(""jsoncallback"")%>([{""m_Name"":""*依旧""n_Name&quo

新人的编程习惯与原则:代码是写给人看的

编程规范的目的是让代码更容易阅读,更容易维护,"代码是写给人看的"这个观点应该是写代码的基本原则. 1.命名规则:最好变量命名长度为6-15个字母之间,明确地表达出每个变量的意思,不要使用歧义单词或者生僻单词,方法命名遵循同样的规则,最好用动词表示,譬如Set开头表示设置.Match表示匹配等 2.方法长度:尽量使用短的方法体,一个方法体里面的代码行最好不要超过80行,超过就应该考虑把里面独立的内容提取放到另一个方法里面(也就是所谓的重构) 3.参数个数:参数个数不要太多,如果超过7个

代码这样写不止于优雅(Python 版)

Martin(Bob大叔)曾在<代码整洁之道>一书打趣地说:当你的代码在做 Code Review 时,审查者要是愤怒地吼道: "What the fuck is this shit?" "Dude, What the fuck!" 等言辞激烈的词语时,那说明你写的代码是 Bad Code,如果审查者只是漫不经心的吐出几个 "What the fuck?", 那说明你写的是 Good Code.衡量代码质量的唯一标准就是每分钟骂出&q

java验证微博账号的代码怎么写?急求大神指教········

问题描述 java验证微博账号的代码怎么写?急求大神指教········ 要怎么验证字符串是微博账号啊?如果该字符串是微博账号返回true,否则返回false,怎么才能验证它是不是微博的账号呢??? 解决方案 微博账户就是邮箱地址啊,用正则表达式匹配下. 解决方案二: 新浪邮箱.拿到后匹配,或者是uid 解决方案三: 微博并不一定用新浪的邮箱.我自己就用gmail的 解决方案四: 我一个邮箱,就没有注册过新浪微博,只能通过新浪微博的官方接口来验证是否可以登陆 解决方案五: 可以考虑通过微博接口,

java遍历服务器里的所有excel文件读取特定单元格的值,循环读取文件的代码怎么写

问题描述 java遍历服务器里的所有excel文件读取特定单元格的值,循环读取文件的代码怎么写 package com.excel.action; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import jxl.Cell; import jxl.CellType; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbo

数据结构哈夫曼树代码怎么写

问题描述 数据结构哈夫曼树代码怎么写 哈夫曼树:输入一串只包含abcdefg8种字符的字符串,统计每种字符出现的次数,并据此创建相应的哈夫曼树. 这怎么写 解决方案 统计字符个数这个简单,你创建一个数组,将每个字符的ascii-'a',得到下标,对应下标+1http://blog.csdn.net/yaoowei2012/article/details/18180769 解决方案二: http://www.cnblogs.com/shiyangxt/archive/2008/12/05/1348

网络编程-求一段从网站读取实时日线数据的vb代码,本人要把实时日线数据不断写进txt文件最后一行

问题描述 求一段从网站读取实时日线数据的vb代码,本人要把实时日线数据不断写进txt文件最后一行 谢谢各位大神!本人业余爱好,但是现在对网络编程不熟,求帮助! 日线数据直接读到一个字符串里面就好了,用空格或tab隔开都行 解决方案 这不是S吗?直接写到数据库的表里就好了