使用 C# 创建 PDF 文档

PDF 是一种独立于平台的文档格式,可在不同的操作系统或机器上保持其内容的格式和布局一致。这就是各种组织使用 PDF 格式动态生成发票、收据、报告和其他业务文档的原因。 Aspose.PDF for .NET 是一个 PDF 库,可帮助您在 .NET 应用程序中实现 PDF 自动化。它允许您使用 C# 或 VB.NET 以编程方式创建、编辑、解析和转换 PDF 文件。在本文中,我将介绍 PDF 生成功能,并向您展示如何使用 C# 从头开始创建 PDF 文件。

我将从创建一个简单的 PDF 文档开始,然后继续向文档中添加其他元素。以下是我将在本文中演示的功能列表。

C# PDF 库 - 安装

您可以使用 NuGet Package Manager 或 Package Manager Console 使用以下命令安装 Aspose.PDF for .NET。或者,可以从 下载 部分下载。

Install-Package Aspose.Pdf

使用 C# 创建 PDF 文件

让我们首先创建一个包含文本片段的 PDF 文档。以下是从头开始创建简单 PDF 文档的步骤。

以下代码示例展示了如何使用 C# 创建 PDF 文件。

// 加载 PDF 文档 
Document document = new Document();

// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 将文本添加到新页面
page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("Hello World! This is a new PDF generated by Aspose.PDF for .NET."));

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 创建 pdf

使用 C# 在 PDF 中应用文本格式

现在让我们看看如何将文本添加到 PDF 文档并使用不同的格式选项。以下是执行此操作的步骤。

  • 使用 Document 类创建一个新的 PDF 文档或加载一个现有的。
  • 访问要放置文本的 Page
  • 创建一个 TextFragment 的对象并设置文本和其他格式选项,例如位置、字体、颜色、大小等。
  • 使用 TextBuilder 类将 TextFragment 对象添加到页面。
  • 使用 Document.Save() 方法创建 PDF 文档。

以下代码示例展示了如何使用 C# 在 PDF 文件中添加格式化文本。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 创建文本片段
TextFragment textFragment = new TextFragment("Text 1: We have now applied text formatting. This is PDF generated by Aspose.PDF for .NET");
textFragment.Position = new Position(100, 700);
TextFragment textFragment1 = new TextFragment("Text 2: We have now applied text formatting. This is PDF generated by Aspose.PDF for .NET");
textFragment1.Position = new Position(100, 600);

// 设置文本属性
textFragment.TextState.FontSize = 12;
textFragment.TextState.Font = FontRepository.FindFont("TimesNewRoman");
textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray);
textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Red);

textFragment1.TextState.DrawTextRectangleBorder = true;
textFragment1.TextState.Underline = true;
textFragment1.TextState.StrikeOut = true;
// 使用图案色彩空间创建新颜色
textFragment1.TextState.ForegroundColor = new Aspose.Pdf.Color()
{
	PatternColorSpace = new Aspose.Pdf.Drawing.GradientAxialShading(Color.Red, Color.Blue)
};
// 创建 TextBuilder 对象
TextBuilder textBuilder = new TextBuilder(page);

// 将文本片段附加到 PDF 页面
textBuilder.AppendText(textFragment);
textBuilder.AppendText(textFragment1);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 创建带有格式化文本的 pdf

使用 C# 创建多列 PDF

我们经常看到报纸、研究文章和其他类型的文档中的文本分为两列或更多列。为了实现这种文本分割,Aspose.PDF for .NET 允许创建多列 PDF。以下是创建多列 PDF 的步骤。

以下代码示例展示了如何使用 C# 创建多列 PDF。

// 加载 PDF 文档 
Document document = new Document();
// 指定 PDF 文件的左边距信息
document.PageInfo.Margin.Left = 40;
// 指定 PDF 文件的右边距信息
document.PageInfo.Margin.Right = 40;
Aspose.Pdf.Page page = document.Pages.Add();

// 添加一行
Aspose.Pdf.Drawing.Graph graph1 = new Aspose.Pdf.Drawing.Graph(500, 2);
// 将行添加到 section 对象的 paraphraphs 集合
page.Paragraphs.Add(graph1);

// 指定线的坐标
float[] posArr = new float[] { 1, 2, 500, 2 };
Aspose.Pdf.Drawing.Line l1 = new Aspose.Pdf.Drawing.Line(posArr);
graph1.Shapes.Add(l1);

// 添加标题
// 使用包含 html 标签的文本创建字符串变量
string s = "<font face=\"Times New Roman\" size=4>" +
"<strong> How to Steer Clear of money scams</<strong> "
+ "</font>";

// 创建包含 HTML 文本的文本段落
HtmlFragment heading_text = new HtmlFragment(s);
page.Paragraphs.Add(heading_text);

Aspose.Pdf.FloatingBox box = new Aspose.Pdf.FloatingBox();
// 在节中添加四列
box.ColumnInfo.ColumnCount = 2;
// 设置列间距
box.ColumnInfo.ColumnSpacing = "5";
// 设置列宽
box.ColumnInfo.ColumnWidths = "250 250"; 

// 创建文本 
TextFragment text2 = new TextFragment(@"Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue. Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales. Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue. Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales. Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue. Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales. Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue. Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. Praesent porttitor turpis eleifend ante. Morbi sodales.");

// 在文档中添加文本
box.Paragraphs.Add(text2);
page.Paragraphs.Add(box);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 创建多列 pdf

使用 C# 在 PDF 中插入图像

以下步骤演示如何在 PDF 文档中插入图像。

  • 使用 Document 类创建一个新的 PDF 文档或打开一个现有的文档。
  • 获取要插入图像的页面。
  • 将图像添加到页面的图像中。
  • 使用 GSaveConcatenateMatrixDo 运算符将图像放置在页面上。
  • 使用 Document.Save() 方法保存 PDF 文档。

以下代码示例展示了如何使用 C# 在 PDF 中插入图像。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 设置坐标
int lowerLeftX = 100;
int lowerLeftY = 100;
int upperRightX = 250;
int upperRightY = 250; 

// 将图像加载到流中
FileStream imageStream = new FileStream("aspose_pdf.png", FileMode.Open);
// 将图像添加到页面资源的图像集合
page.Resources.Images.Add(imageStream);
// 使用 GSave 运算符:此运算符保存当前图形状态
page.Contents.Add(new Aspose.Pdf.Operators.GSave());
// 创建矩形和矩阵对象
Aspose.Pdf.Rectangle rectangle = new Aspose.Pdf.Rectangle(lowerLeftX, lowerLeftY, upperRightX, upperRightY);
//矩阵 matrix = new Matrix(new double[] { rectangle.URX - rectangle.LLX, 0, 0, rectangle.URY - rectangle.LLY, rectangle.LLX, rectangle.LLY });
Matrix matrix = new Matrix(new double[] { 200, 0, 0, 200, 200, 600 });
// 使用 ConcatenateMatrix(连接矩阵)运算符:定义图像必须如何放置
page.Contents.Add(new Aspose.Pdf.Operators.ConcatenateMatrix(matrix));
XImage ximage = page.Resources.Images[page.Resources.Images.Count];
// 使用 Do 运算符:此运算符绘制图像
page.Contents.Add(new Aspose.Pdf.Operators.Do(ximage.Name));
// 使用 GRestore 运算符:此运算符恢复图形状态
page.Contents.Add(new Aspose.Pdf.Operators.GRestore());

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 在 PDF 中插入图像

使用 C# 在 PDF 文件中创建表

该表用于以行和列的形式组织数据,并提供信息的快速概览。要在 PDF 文档中创建表格,请按照以下步骤操作。

  • 创建 Document 类的对象以创建新的 PDF 或加载现有的 PDF。
  • 访问要在其中创建表的页面。
  • 创建 Table 类的实例。
  • 使用 BorderInfo 类设置表格的边框和单元格的边框。
  • 创建一个新的 Row 并将其添加到 Table.Rows 集合。
  • 将单元格添加到 Row.Cells 集合。
  • 使用 Page.Paragraphs.Add() 方法将表格添加到页面。
  • 使用 Document.Save() 方法保存 PDF 文档。

以下代码示例展示了如何使用 C# 在 PDF 中创建表格。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 初始化表的新实例
Aspose.Pdf.Table table = new Aspose.Pdf.Table();
// 将表格边框颜色设置为 LightGray
table.Border = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// 设置表格单元格的边框
table.DefaultCellBorder = new Aspose.Pdf.BorderInfo(Aspose.Pdf.BorderSide.All, .5f, Aspose.Pdf.Color.FromRgb(System.Drawing.Color.LightGray));
// 创建一个循环以添加 10 行
for (int row_count = 1; row_count < 10; row_count++)
{
	// 向表中添加行
	Aspose.Pdf.Row row = table.Rows.Add();
	// 添加表格单元格
	row.Cells.Add("Column (" + row_count + ", 1)");
	row.Cells.Add("Column (" + row_count + ", 2)");
	row.Cells.Add("Column (" + row_count + ", 3)");
}

// 将表格添加到页面
page.Paragraphs.Add(table);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 在 pdf 中创建表格

使用 C# 在 PDF 中添加注释

注释是用于提供有关 PDF 文档内容的附加信息的图形对象。 PDF 格式支持各种注释,包括文本、高亮、线条、注释等。以下是在 PDF 文档中添加注释的步骤。

以下代码示例展示了如何使用 C# 向 PDF 添加注释。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 创建注释
TextAnnotation textAnnotation = new TextAnnotation(page, new Aspose.Pdf.Rectangle(200, 400, 400, 600));
textAnnotation.Title = "Sample Annotation Title";
textAnnotation.Subject = "Sample Subject";
textAnnotation.State = AnnotationState.Accepted;
textAnnotation.Contents = "Sample contents for the annotation";
textAnnotation.Open = true;
textAnnotation.Icon = TextIcon.Key;

Border border = new Border(textAnnotation);
border.Width = 5;
border.Dash = new Dash(1, 1);
textAnnotation.Border = border;
textAnnotation.Rect = new Aspose.Pdf.Rectangle(200, 400, 400, 600);

// 在页面的注解集合中添加注解
page.Annotations.Add(textAnnotation);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 在 PDF 中添加注释

您还可以使用链接注释将超链接添加到 PDF 文档。以下是执行此操作的步骤。

以下代码示例展示了如何使用 C# 向 PDF 文档添加超链接。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 创建链接注释对象
LinkAnnotation link = new LinkAnnotation(page, new Aspose.Pdf.Rectangle(100, 800, 250, 750));
// 为 LinkAnnotation 创建边框对象
Border border = new Border(link);
// 将边框宽度值设置为 0
border.Width = 1;
// 设置 LinkAnnotation 的边框
link.Border = border; 

// 将链接类型指定为远程 URI
link.Action = new GoToURIAction("www.aspose.com");
// 将链接注释添加到 PDF 文件第一页的注释集合
page.Annotations.Add(link);

// 为链接的文本创建自由文本注释
FreeTextAnnotation textAnnotation = new FreeTextAnnotation(document.Pages[1], new Aspose.Pdf.Rectangle(100, 800, 250, 750), new DefaultAppearance(Aspose.Pdf.Text.FontRepository.FindFont("TimesNewRoman"), 10, System.Drawing.Color.Blue));
// 要添加为自由文本的字符串
textAnnotation.Contents = "Link to Aspose website";
// 设置自由文本注释的边框
textAnnotation.Border = border;
// 将 FreeText 注释添加到 Document 第一页的注释集合
page.Annotations.Add(textAnnotation);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 在 PDF 中添加超链接

使用 C# 在 PDF 中创建书签

书签用于导航到 PDF 文档中的特定部分或页面。 Aspose.PDF for .NET 允许您添加或操作书签。以下是在 PDF 文档中创建和添加书签的步骤。

以下代码示例展示了如何使用 C# 创建带有书签的 PDF 文档。

// 加载 PDF 文档 
Document document = new Document();
// 添加页面
Aspose.Pdf.Page page = document.Pages.Add();

// 创建父书签对象
OutlineItemCollection pdfOutline = new OutlineItemCollection(document.Outlines);
pdfOutline.Title = "Parent Outline";
pdfOutline.Italic = true;
pdfOutline.Bold = true;

// 创建一个子书签对象
OutlineItemCollection pdfChildOutline = new OutlineItemCollection(document.Outlines);
pdfChildOutline.Title = "Child Outline";
pdfChildOutline.Italic = true;
pdfChildOutline.Bold = true;

// 在父书签的收藏中添加子书签
pdfOutline.Add(pdfChildOutline);
// 在文档的大纲集合中添加父书签。
document.Outlines.Add(pdfOutline);

// 保存 PDF 文档
document.Save("Generated-PDF.pdf");
使用 C# 在 PDF 中创建书签

结论

在本文中,我向您展示了如何使用 C# 从头开始创建 PDF 文件。分步指南和代码示例演示了如何以编程方式在 PDF 文件中添加文本、图像、表格、注释、超链接和书签。您可以使用 文档 探索 Aspose 的 .NET PDF 库的其他功能。

也可以看看