在现代软件开发中,生成PDF文档是一个常见的需求。TallPDF.NET是一个强大的库,它允许开发者以编程方式或通过XML来构建PDF文档。本文将介绍如何使用TallPDF.NET来创建PDF文档,并展示一些示例代码。
TallPDF.NET的文档对象模型(DOM)可以以编程方式构建,也可以从XML中构建。如果从XML创建,可以使用XSL来将任何XML转换为TallPDF.NET兼容的XML。
TallPDF.NET类库包括诸如Document、Section、Footer和Paragraph等类。以下是完整的文档:
以下图表展示了如何从布局对象构建PDF文档:
以下是一个创建PDF的“Hello world!”示例:
C#
//
创建一个带有单个部分的新文档
Document document = new Document();
Section section = document.Sections.Add();
document.Sections.Add(section);
//
向部分添加一个新的文本段落
TextParagraph textParagraph = new TextParagraph();
section.Paragraphs.Add(textParagraph);
//
创建一个片段,设置一些文本并将其添加到段落
Fragment fragment = new Fragment();
fragment.Text = "Hello world!";
textParagraph.Fragments.Add(fragment);
using (FileStream file = new FileStream("out1.pdf", FileMode.Create))
{
document.Write(file);
}
尽管这看起来像是为“Hello world!”编写了很多代码,但其灵活性在构建更复杂的文档时非常有用。
TallPDF.NET的5.0版本包括了iOS和Android的Xamarin版本。第一个版本已经可用。如果感兴趣,可以加入beta计划。
如果熟悉XAML,那么就知道XAML是一种指定如何实例化对象以及如何分配属性的方法。使用TallPDF.NET从XML创建PDF的工作方式类似。顺便说一下,在2002年实现了这种方法,比2008年最初发布的XAML早得多。
以下是在XML中指定的与“Hello world!”相同的例子:
XML
<document xmlns="http://www.tallcomponents.com/schemas/tallpdf/v3">
<section>
<paragraph type="textparagraph">
<fragment>Hello World</fragment>
</paragraph>
</section>
</document>
以下是将此XML转换为PDF的代码:
C#
//
从XML创建新文档
Document document = new Document();
document.Read("helloworld.xml");
using (FileStream file = new FileStream("out2.pdf", FileMode.Create))
{
document.Write(file);
}
考虑以下简单的XML文档,描述了两个客户:
XML
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer id="1">
<Name>Chris Sharp</Name>
</Customer>
<Customer id="2">
<Name>Mike Jones</Name>
</Customer>
</Customers>
显然,这个文档不能直接转换为PDF,因为它不包含XML元素到布局元素的映射。为此,编写了一个XSL,将此XML转换为TalPDF.NET兼容的XML:
XML
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.tallcomponents.com/schemas/tallpdf/v3">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
<document>
<section>
<paragraph type="textparagraph">
<fragment font="helveticabold" fontsize="14">Simple XSL Transformation</fragment>
</paragraph>
<xsl:apply-templates select="/Customers/Customer"/>
</section>
</document>
</xsl:template>
<xsl:template match="/Customers/Customer">
<paragraph type="textparagraph">
<fragment font="helveticabold" fontsize="10">
<xsl:value-of select="@id"/>.
</fragment>
<fragment font="helvetica" fontsize="10">
<xsl:value-of select="Name"/>
</fragment>
</paragraph>
</xsl:template>
</xsl:stylesheet>
以下是使用XSL将客户XML转换为PDF的代码:
C#
//
加载XML
XmlReader xml = new XmlTextReader("data.xml");
//
加载XSL
XslCompiledTransform xsl = new XslCompiledTransform();
xsl.Load("transform.xslt");
//
转换
Stream converted = new MemoryStream();
xsl.Transform(xml, null, converted);
converted.Position = 0;
//
从转换后的XML构建PDF
Document document = new Document();
XmlReader reader = new XmlTextReader(converted);
document.Read(reader);
using (FileStream file = new FileStream("out3.pdf", FileMode.Create))
{
document.Write(file);
}