在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在本文中,我们将仔细研究用于处理 PDF 文件的两个常用 C# 库:IronPDF - The .NET PDF Library for C# Developers ** IronPDF for .NET和报告.NET. 对于需要通过 C# 应用程序创建、修改或与 PDF 文档交互的开发人员来说,这些工具是必不可少的。 这两个库都提供了一系列功能,旨在使 PDF 的处理更简单、更高效,但它们的处理方式不同。
IronPDF for .NET 和 Report.NET 使开发人员能够动态生成文档、编辑内容并从 PDF 中提取文本和图像。 它们还支持表单处理、添加数字签名,并确保应用程序可以在不同平台上处理 PDF 而不会丢失文档的保真度。 这意味着,无论使用何种设备或操作系统,PDF 文档的外观和功能都必须符合预期。
在整个比较过程中,我们将深入探讨每个库提供的具体功能、它们的作用,提供代码片段来说明如何使用它们,并讨论它们的许可条款。 本比较旨在让开发人员清楚地了解每个库的功能,帮助他们决定哪个库最适合其项目要求。 让我们来分析一下IronPDF和Report.NET的功能和区别,重点是简洁性和对开发人员的实用见解。
报告.NETPDF.NET 是一个强大的 C# 库,旨在帮助开发人员在其 .NET 应用程序中直接创建、管理和操作 PDF 文档。 该工具以其简单直接的 PDF 生成和操作方法而闻名,可从头开始创建复杂的 PDF 文档或修改现有文档。 对于希望在其项目中实现 PDF 功能的开发人员来说,它是一个多功能的选择。
Report.NET 在创建新的 PDF 文档和编辑现有文档方面表现出色。 开发人员可以轻松添加文本、图像和图形,从而制作出详细且具有视觉吸引力的文档。
该库可以精确控制文档内容,包括文本格式、图像位置和图形元素。 这种控制水平可确保最终的 PDF 看起来与预期完全一致。
Report.NET 注重简洁性,简化了 PDF 生成过程,即使是在编程环境中处理 PDF 的新手也能轻松使用。
Report.NET 可在包括 .NET Core 在内的 .NET 平台上无缝运行,确保应用程序可以生成和管理 PDF,而不受操作系统的限制。
该库为 PDF 文档提供了广泛的自定义选项,允许开发人员调整布局、样式和整体外观,以满足其特定需求。
作为一个开源工具,Report.NET 受益于社区的贡献,确保了它能够不断更新并获得新的功能。这种社区支持还意味着开发人员可以获得丰富的知识和资源。
IronPDFPDF for .NET 是一个全面的 .NET 库,旨在促进在 .NET 应用程序中创建、操作和呈现 PDF 文档。 该工具能够处理从 HTML 生成 PDF 和直接编辑现有 PDF 文件,因此脱颖而出。 这对创建报告非常有帮助。 IronPdf 还能与 SQL Server Reporting Services 平滑集成。 我们可以用 IronPDF 创建一个最终用户报告设计器,以创建报告工具和报告查看器。
IronPDF 的核心优势之一是它能够转换将 HTML 和 CSS 转换为 PDF 文档. 对于希望将网页内容转换为可移植格式,同时保留原始设计和布局的开发人员来说,这一功能非常宝贵。
IronPdf 擅长为开发人员提供编辑和处理 PDF 文档的工具。 这包括添加或删除页面、修改文本以及嵌入图像. 我们还可以使用 IronPDF 从报告中提取报告数据。
该库支持创建和编辑PDF 表格此外,翻译还必须能够让用户以动态的方式与文档进行交互。 这一功能对于需要最终用户输入的应用程序(如调查或申请表)至关重要。
有了 IronPdf,实施加密和密码保护简单明了。 这些功能可确保 PDF 文档中的敏感信息安全,防止未经授权的访问。
IronPDF 允许开发人员渲染 PDF 文件,以便在屏幕上查看和实物印刷此外,还要确保在两种情况下都能提供高质量的译文。 这样就能更轻松地准备文件,以满足各种演示或分发需求。
IronPDF 适用于各种 .NET 平台,遵守 .NET 代码标准,便于在不同环境中进行开发,而不会出现兼容性问题。
IronPDF 由以下方面提供支持详细文件和专门的支持,帮助开发人员浏览库的功能,并将其功能有效地集成到他们的应用程序中。
IronPDF 提供许多高级编辑功能。 这包括能够合并和拆分PDF 文档,尤其适用于组织大量信息或从文档中提取特定部分单独使用。
该库允许自定义标题翻译 PDF 文档中的页眉和页脚。 这种能力对于跨页添加一致的品牌、页码或文档标题,增强输出的专业外观至关重要。
在 Visual Studio IDE 中创建控制台应用程序是一个简单明了的过程,包括几个步骤。
首先打开 Microsoft Visual Studio。 如果您尚未安装,请从以下地址下载并安装微软官方网站. 安装完成后,启动 visual studio。
打开 Visual Studio 后,您将看到启动窗口。 在此,选择 "创建一个新项目 "选项,启动设置新控制台应用程序的流程。
在 "创建新项目 "窗口中,您将看到各种项目模板。 在搜索框中输入 "控制台 "过滤选项,然后从列表中选择 "控制台应用程序"。确保选择与您希望使用的编程语言相对应的模板,如 C#。
选择控制台应用程序模板后,单击 "下一步 "进入项目配置页面。 在此,您需要提供有关项目的一些详细信息:
项目名称:为您的项目起一个有意义的名称,以反映其目的。
解决方案名称:默认情况下,该名称与您的项目名称相同,但如果您计划在同一解决方案中包含多个项目,则可以更改该名称。
填写所有必要信息后,单击 "创建 "按钮。 Visual Studio 现在将根据您的规格生成一个新的控制台应用程序项目。 这个过程可能需要一些时间。
要在项目中利用 IronPDF 的功能,首先需要安装该库。有几种方法可以实现这一点,每种方法都适合不同的开发工作流程或偏好。 以下是将 IronPDF 库安装到 Visual Studio 项目中的三种常用方法。
Visual Studio 中的 NuGet 软件包管理器用户界面提供了浏览、选择和安装软件包的直接方法。
在 Visual Studio 中,在解决方案资源管理器中导航到您的项目,执行右键单击操作,然后选择 "Manage NuGet Packages...(管理 NuGet 包...)"选项。
点击 "浏览 "选项卡,在搜索框中输入 "IronPDF"。
在搜索结果中找到 IronPdf 软件包,选择它,然后点击 "安装 "按钮。 Visual Studio 将自动处理下载和安装。
对于那些喜欢使用命令行工具的人来说,NuGet 软件包管理器控制台是一个功能强大的替代工具。
打开控制台:进入 Visual Studio 的 "工具 "菜单,然后导航到 "NuGet 包管理器">"包管理器控制台"。
Install-Package IronPdf
该命令指示 NuGet 下载最新版本的 IronPDF 并安装到项目中。
如果您喜欢手动下载软件包或需要特定版本的 IronPDF,NuGet 网站是一个不错的选择。
访问 NuGet 网站:访问nuget.org并搜索 "IronPDF"。
下载软件包:从IronPdf 页面请选择您需要的版本并下载.nupkg文件。
打开网络浏览器,访问 Report.NET GitHub 代码库:https://github.com/ritchiecarroll/Report.NET/tree/master。 本页包含最新版本的Report.NET库及其源代码。
在版本库页面上找到 "代码 "按钮并点击。 在下拉菜单中,选择 "下载 ZIP",将整个版本库下载为 ZIP 文件。将该文件保存到计算机上方便的位置,然后解压缩其中的内容。
解压 ZIP 文件后,您将在解压文件中找到 Report.NET 库源代码。 要在 Visual Studio 项目中使用 Report.NET,请按照以下步骤操作:
打开您的项目:启动 Visual Studio 并打开您希望添加 Report.NET 的项目。
手动添加库:有几种方法可以将库包含到您的项目中:
IronPDF它具有一整套先进的功能,可轻松处理各种 PDF 相关任务。
IronPdf 可以将 HTML 内容(包括 CSS 和 JavaScript)直接渲染为 PDF 文档。 这意味着网页或 HTML 模板可以转换成 PDF 文件,看起来就像在浏览器中一样。
IronPDF 允许直接转换为将 HTML 字符串转换为 PDF. 这意味着开发人员可以将存储为字符串变量的 HTML 代码,使用 IronPDF 将其呈现为 PDF 文件。当 HTML 内容在转换前由应用程序动态生成或修改时,这一功能尤其有用。
using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");
using IronPdf;
var Renderer = new IronPdf.HtmlToPdf();
var PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>");
PDF.SaveAs("HtmlStringToPdf.pdf");
Imports IronPdf
Private Renderer = New IronPdf.HtmlToPdf()
Private PDF = Renderer.RenderHtmlAsPdf("<h1>Hello IronPDF</h1>")
PDF.SaveAs("HtmlStringToPdf.pdf")
同样,IronPDF 可以将现有的将 HTML 文件转换为 PDF 文档. 具体做法是从文件系统中读取 HTML 文件,然后使用 IronPDF 创建格式和结构相同的 PDF 文档。
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderHTMLFileAsPdf("invoice.html");
PDF.SaveAs("HtmlFileToPdf.pdf");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderHTMLFileAsPdf("invoice.html")
PDF.SaveAs("HtmlFileToPdf.pdf")
IronPDF 还能渲染一个从实时 URL 获取 PDF. 这样,开发人员就可以输入一个网址,IronPdf 就会从 URL 中获取 HTML 内容并将其呈现为 PDF。
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
using IronPdf;
var Renderer = new ChromePdfRenderer();
var PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com");
PDF.SaveAs("UrlToPdf.pdf");
Imports IronPdf
Private Renderer = New ChromePdfRenderer()
Private PDF = Renderer.RenderUrlAsPdf("http://ironpdf.com")
PDF.SaveAs("UrlToPdf.pdf")
使用IronPDF,您可以编辑现有 PDF 文档. 这包括添加文本、图片和页面,或从文件中删除页面。 您还可以查找并替换文本从 PDF 文档中提取。
using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");
using IronPdf;
var document = PdfDocument.FromFile("original_document.pdf");
const int targetPageIndex = 1;
const string oldString = "Hello, World!";
const string newString = "Greetings, Universe!";
document.ReplaceTextOnPage(targetPageIndex, oldString, newString);
document.SaveAs("modified_document.pdf");
Imports IronPdf
Private document = PdfDocument.FromFile("original_document.pdf")
Private Const targetPageIndex As Integer = 1
Private Const oldString As String = "Hello, World!"
Private Const newString As String = "Greetings, Universe!"
document.ReplaceTextOnPage(targetPageIndex, oldString, newString)
document.SaveAs("modified_document.pdf")
该库可以提取文本和图像从 PDF 文件中提取内容,类似于 Crystal Reports,可用于索引、搜索或重新利用内容。
IronPDF 支持创建PDF 表格. 开发人员可以在 PDF 中以编程方式创建表格,用户可以填写表格。
using IronPdf;
using System;
const string alternativeHtmlContent = @"
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");
using IronPdf;
using System;
const string alternativeHtmlContent = @"
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>";
var alternativePdfRenderer = new ChromePdfRenderer();
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = true;
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf");
Imports IronPdf
Imports System
Private Const alternativeHtmlContent As String = "
<html>
<body>
<h2>Alternative PDF Form</h2>
<form>
Name: <br>
Age: <br>
<br>
<p>Select country:</p>
<select name='country'>
<option value='USA'>USA</option>
<option value='UK'>UK</option>
<option value='Canada'>Canada</option>
</select>
<br>
<p>Select interests:</p>
<label for='interest1'> Interest 1</label><br>
<label for='interest2'> Interest 2</label><br>
</form>
</body>
</html>"
Private alternativePdfRenderer = New ChromePdfRenderer()
alternativePdfRenderer.RenderingOptions.CreatePdfFormsFromHtml = True
alternativePdfRenderer.RenderHtmlAsPdf(alternativeHtmlContent).SaveAs("AlternativeForm.pdf")
你可以合并多个 PDF 文件将这些术语和术语翻译成一份文件。 该功能对于合并报告或组合不同的文档部分非常方便。
using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");
using IronPdf;
var firstHtmlContent = @"<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>";
var secondHtmlContent = @"<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>";
var pdfRenderer = new ChromePdfRenderer();
var pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent);
var pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent);
var mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB);
mergedPdf.SaveAs("MergedDocuments.pdf");
Imports IronPdf
Private firstHtmlContent = "<h1>Document A</h1>
<p>This is the first document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document A</p>"
Private secondHtmlContent = "<h1>Document B</h1>
<p>This is the second document.</p>
<div style='page-break-after: always;'></div>
<p>Continuation of Document B</p>"
Private pdfRenderer = New ChromePdfRenderer()
Private pdfDocA = pdfRenderer.RenderHtmlAsPdf(firstHtmlContent)
Private pdfDocB = pdfRenderer.RenderHtmlAsPdf(secondHtmlContent)
Private mergedPdf = PdfDocument.Merge(pdfDocA, pdfDocB)
mergedPdf.SaveAs("MergedDocuments.pdf")
相反,IronPDF 可以分割单一 PDF翻译成多个文档。 如果您想分发单个页面或章节,可能需要这样做。
IronPDF 可以实现加密和解密 PDF 文档为敏感信息增加了一层额外的安全保护。
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("protected.pdf", "password");
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption();
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key");
encryptedPdf.Password = "new-password";
encryptedPdf.SaveAs("secured.pdf");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("protected.pdf", "password")
encryptedPdf.SecuritySettings.RemovePasswordsAndEncryption()
encryptedPdf.SecuritySettings.MakePdfDocumentReadOnly("super-secret-key")
encryptedPdf.Password = "new-password"
encryptedPdf.SaveAs("secured.pdf")
有了这个库,就可以直接设置文档属性,如标题、作者和元数据。 这有助于文档管理和组织。
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");
using IronPdf;
using System;
var encryptedPdf = PdfDocument.FromFile("sample.pdf");
pdf.MetaData.Author = "Iron Developer";
pdf.MetaData.Keywords = "Confidential, Private";
pdf.MetaData.ModifiedDate = DateTime.Now;
pdf.SaveAs("modified.pdf");
Imports IronPdf
Imports System
Private encryptedPdf = PdfDocument.FromFile("sample.pdf")
pdf.MetaData.Author = "Iron Developer"
pdf.MetaData.Keywords = "Confidential, Private"
pdf.MetaData.ModifiedDate = DateTime.Now
pdf.SaveAs("modified.pdf")
IronPDF可以生成符合 PDF/A 标准的需要长期存档和保存记录的文件。
IronPdf 不支持将 XML 直接转换为 PDF,但可行的方法是先将 XML 数据转换为 HTML 格式。 为此,我们采用了 XSLT(可扩展样式表语言转换)XML 样式表是一种功能强大的 XML 样式表语言,用于将 XML 文档转换为 HTML、文本甚至新的 XML 文档等其他格式。 比方说,这是我们的 data.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<Library>
<Book id="1">
<Title>The Great Gatsby</Title>
<Author>F. Scott Fitzgerald</Author>
<Genre>Fiction</Genre>
<Year>1925</Year>
</Book>
<Book id="2">
<Title>To Kill a Mockingbird</Title>
<Author>Harper Lee</Author>
<Genre>Fiction</Genre>
<Year>1960</Year>
</Book>
<Book id="3">
<Title>1984</Title>
<Author>George Orwell</Author>
<Genre>Dystopian</Genre>
<Year>1949</Year>
</Book>
</Library>
<?xml version="1.0" encoding="UTF-8"?>
<Library>
<Book id="1">
<Title>The Great Gatsby</Title>
<Author>F. Scott Fitzgerald</Author>
<Genre>Fiction</Genre>
<Year>1925</Year>
</Book>
<Book id="2">
<Title>To Kill a Mockingbird</Title>
<Author>Harper Lee</Author>
<Genre>Fiction</Genre>
<Year>1960</Year>
</Book>
<Book id="3">
<Title>1984</Title>
<Author>George Orwell</Author>
<Genre>Dystopian</Genre>
<Year>1949</Year>
</Book>
</Library>
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'<?xml version="1.0" encoding="UTF-8"?> <Library> <Book id="1"> <Title> The Great Gatsby</Title> <Author> F.Scott Fitzgerald</Author> <Genre> Fiction</Genre> <Year>1925</Year> </Book> <Book id="2"> <Title> @To Kill a Mockingbird</Title> <Author> Harper Lee</Author> <Genre> Fiction</Genre> <Year>1960</Year> </Book> <Book id="3"> <Title>1984</Title> <Author> George Orwell</Author> <Genre> Dystopian</Genre> <Year>1949</Year> </Book> </Library>
这就是我们的 style.xslt 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Library Catalog</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 8px; }
tr:nth-child(even) { background-color: #f2f2f2; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h2>Library Catalog</h2>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Genre</th>
<th>Year</th>
</tr>
<xsl:for-each select="Library/Book">
<tr>
<td><xsl:value-of select="Title"/></td>
<td><xsl:value-of select="Author"/></td>
<td><xsl:value-of select="Genre"/></td>
<td><xsl:value-of select="Year"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html>
<head>
<title>Library Catalog</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 8px; }
tr:nth-child(even) { background-color: #f2f2f2; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h2>Library Catalog</h2>
<table>
<tr>
<th>Title</th>
<th>Author</th>
<th>Genre</th>
<th>Year</th>
</tr>
<xsl:for-each select="Library/Book">
<tr>
<td><xsl:value-of select="Title"/></td>
<td><xsl:value-of select="Author"/></td>
<td><xsl:value-of select="Genre"/></td>
<td><xsl:value-of select="Year"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
'INSTANT VB TODO TASK: The following line could not be converted:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> (Of html) (Of head) (Of title) Library Catalog</title> (Of style) body
If True Then
font-family: Arial, sans-serif
margin:
20px
End If
table
If True Then
border-collapse: collapse
width:
100 Mod
End If
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' th, td
' {
' text-align: left;
' padding:
' 8px;
' }
tr:
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' nth-child(even)
' {
' background-color: #f2f2f2;
' }
th
If True Then
background-color: #4CAF50
color:
white
End If
'INSTANT VB TODO TASK: The following line uses invalid syntax:
' </style> </head> <body> <h2> Library Catalog</h2> <table> <tr> <th> Title</th> <th> Author</th> <th> Genre</th> <th> Year</th> </tr> <xsl:for-@each @select="Library/Book"> <tr> <td><xsl:value-@of @select="Title"/></td> <td><xsl:value-@of @select="Author"/></td> <td><xsl:value-@of @select="Genre"/></td> <td><xsl:value-@of @select="Year"/></td> </tr> </xsl:for-@each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
下面的代码片段说明了我们如何处理这一逻辑:
using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
using System;
using System.Xml.Xsl;
using System.Xml;
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("style.xslt");
XmlReader reader = XmlReader.Create("data.xml");
XmlWriterSettings settings = new XmlWriterSettings { Indent = true, OmitXmlDeclaration = true };
using (XmlWriter writer = XmlWriter.Create("output.html", settings))
{
transform.Transform(reader, writer);
}
License.LicenseKey = "Liecense-Key";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("output.html");
pdf.SaveAs("Report.pdf");
Imports System
Imports System.Xml.Xsl
Imports System.Xml
Private transform As New XslCompiledTransform()
transform.Load("style.xslt")
Dim reader As XmlReader = XmlReader.Create("data.xml")
Dim settings As New XmlWriterSettings With {
.Indent = True,
.OmitXmlDeclaration = True
}
Using writer As XmlWriter = XmlWriter.Create("output.html", settings)
transform.Transform(reader, writer)
End Using
License.LicenseKey = "Liecense-Key"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("output.html")
pdf.SaveAs("Report.pdf")
从 XSLT 样式表开始(style.xslt)在翻译过程中,翻译人员还必须了解如何将 XML 数据结构为 HTML。 .NET中的XslCompiledTransform类用于加载您的XSLT文件。
利用 XmlReader 加载 XML 数据(data.xml). XmlReader 为此目的非常有效,因为它提供了 XML 数据的只向前、只读视图。
转换后的 HTML 将被写入一个文件(output.html)使用 XmlWriter,配置为生成缩进 HTML 以提高可读性,并省略 HTML 输出中不需要的 XML 声明。
准备好 HTML 文件后,IronPDF 的 ChromePdfRenderer 将用于将 HTML 文档转换为 PDF。 该渲染器可模仿高质量渲染引擎,确保生成的 PDF 准确呈现 HTML 内容。
最后,将 PDF 文档保存到文件系统中(报告.pdf). 转换过程到此结束,最终将生成一份从原始 XML 数据衍生而来的 PDF 文档。
这是我们使用 XML 和 IronPDF 生成报告的方式。 我们生成的 PDF 输出文件:
我们还可以通过编程创建 SAP 交互式报告,然后使用 IronPDF 进行转换。 如需了解更多详细指南,请参阅本指南,了解C# 报告生成.
报告.NET该工具提供了一套先进的功能,可以全面生成和定制 PDF。 图片中列出的功能反映了其中的一些高级功能。 让我们逐一详细探讨。
该功能可在 PDF 文档中使用各种字体样式和大小。 它允许开发人员测试不同字体的外观,确保文本正确显示并符合设计规范。
using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
public class Test : Report {
private readonly FontDef fontDef;
private readonly FontProp fontProp_Title;
private readonly FontProp fontProp_Label;
public Test() {
fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
fontProp_Label = new FontPropMM(fontDef, 4);
}
protected override void Create() {
FontTest();
}
private void FontTest() {
FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
FontProp fp = new FontPropMM(fontDef, 6);
FontProp fp_Small = new FontPropMM(fontDef, 1.4);
FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
Page page_Cur = new Page(this);
page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
Double rX = 300;
Double rY = 40;
for (Int32 i = 32; i < 127; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
for (Int32 i = 161; i < 256; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
if (rX > 185) {
rY += fp.rLineFeedMM;
rX = 22;
}
if (rY > 280) {
new Page(this);
rY = 40;
}
Char ch = (Char)iChar;
String s = ch.ToString();
page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
rX += 15;
}
}
}
using Root.Reports;
using System;
using System.Drawing;
namespace ReportSamples {
public class Test : Report {
private readonly FontDef fontDef;
private readonly FontProp fontProp_Title;
private readonly FontProp fontProp_Label;
public Test() {
fontDef = FontDef.FontDefFromName(this, FontDef.StandardFont.Helvetica);
fontProp_Title = new FontPropMM(fontDef, 6) { Bold = true };
fontProp_Label = new FontPropMM(fontDef, 4);
}
protected override void Create() {
FontTest();
}
private void FontTest() {
FontProp fp_Title = new FontPropMM(fontDef, 12) { Bold = true };
FontProp fp = new FontPropMM(fontDef, 6);
FontProp fp_Small = new FontPropMM(fontDef, 1.4);
FontProp fp_XSmall = new FontPropMM(fontDef, 0.8);
Page page_Cur = new Page(this);
page_Cur.AddCB_MM(30, new RepString(fontProp_Title, "Font Test"));
Double rX = 300;
Double rY = 40;
for (Int32 i = 32; i < 127; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
for (Int32 i = 161; i < 256; i++) {
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
PrintCharacter('�', fp, fp_Small, fp_XSmall, rX, rY, page_Cur);
}
private void PrintCharacter(Int32 iChar, FontProp fp, FontProp fp_Small, FontProp fp_XSmall, Double rX, Double rY, Page page_Cur) {
if (rX > 185) {
rY += fp.rLineFeedMM;
rX = 22;
}
if (rY > 280) {
new Page(this);
rY = 40;
}
Char ch = (Char)iChar;
String s = ch.ToString();
page_Cur.AddMM(rX + 2, rY, new RepString(fp, s));
rX += 15;
}
}
}
Imports Root.Reports
Imports System
Imports System.Drawing
Namespace ReportSamples
Public Class Test
Inherits Report
Private ReadOnly fontDef As FontDef
Private ReadOnly fontProp_Title As FontProp
Private ReadOnly fontProp_Label As FontProp
Public Sub New()
fontDef = FontDef.FontDefFromName(Me, FontDef.StandardFont.Helvetica)
fontProp_Title = New FontPropMM(fontDef, 6) With {.Bold = True}
fontProp_Label = New FontPropMM(fontDef, 4)
End Sub
Protected Overrides Sub Create()
FontTest()
End Sub
Private Sub FontTest()
Dim fp_Title As FontProp = New FontPropMM(fontDef, 12) With {.Bold = True}
Dim fp As FontProp = New FontPropMM(fontDef, 6)
Dim fp_Small As FontProp = New FontPropMM(fontDef, 1.4)
Dim fp_XSmall As FontProp = New FontPropMM(fontDef, 0.8)
Dim page_Cur As New Page(Me)
page_Cur.AddCB_MM(30, New RepString(fontProp_Title, "Font Test"))
Dim rX As Double = 300
Dim rY As Double = 40
For i As Int32 = 32 To 126
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
Next i
For i As Int32 = 161 To 255
PrintCharacter(i, fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
Next i
PrintCharacter(AscW(" "c), fp, fp_Small, fp_XSmall, rX, rY, page_Cur)
End Sub
Private Sub PrintCharacter(ByVal iChar As Int32, ByVal fp As FontProp, ByVal fp_Small As FontProp, ByVal fp_XSmall As FontProp, ByVal rX As Double, ByVal rY As Double, ByVal page_Cur As Page)
If rX > 185 Then
rY += fp.rLineFeedMM
rX = 22
End If
If rY > 280 Then
Dim tempVar As New Page(Me)
rY = 40
End If
Dim ch As Char = ChrW(iChar)
Dim s As String = ch.ToString()
page_Cur.AddMM(rX + 2, rY, New RepString(fp, s))
rX += 15
End Sub
End Class
End Namespace
利用图像示例功能,开发人员可以在 PDF 文档中嵌入图像。 这包括控制图片的大小和位置,以及可能对图片应用的转换或特效。
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ImageSample : Report {
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
BrushProp bp = new BrushProp(this, Color.LightGray);
new Page(this);
page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
}
}
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ImageSample : Report {
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp_Title = new FontPropMM(fd, 15) { Bold = true };
FontProp fp_SubTitle = new FontPropMM(fd, 4) { Bold = true };
PenProp pp = new PenProp(this, 0.2, Color.FromArgb(235, 235, 235));
PenProp pp_Black = new PenProp(this, 0.2, Color.Black);
BrushProp bp = new BrushProp(this, Color.LightGray);
new Page(this);
page_Cur.AddCB_MM(40, new RepString(fp_Title, "Image Sample"));
System.IO.Stream stream = GetType().Assembly.GetManifestResourceStream("ReportSamples.Image.jpg");
page_Cur.AddMM(20, 90, new RepImageMM(stream, 40, Double.NaN));
page_Cur.AddMM(20, 95, new RepString(fp_SubTitle, "W = 40mm, H = auto."));
page_Cur.AddMM(67, 90, new RepImageMM(stream, 40, 20));
page_Cur.AddMM(67, 95, new RepString(fp_SubTitle, "W = 40mm, H = 20mm"));
page_Cur.AddMM(114, 90, new RepImageMM(stream, Double.NaN, 30));
page_Cur.AddMM(114, 95, new RepString(fp_SubTitle, "W = auto., H = 30mm"));
page_Cur.AddMM(161, 90, new RepImageMM(stream, 30, 30));
page_Cur.AddMM(161, 95, new RepString(fp_SubTitle, "W = 30mm, H = 30mm"));
}
}
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
Public Class ImageSample
Inherits Report
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp_Title As FontProp = New FontPropMM(fd, 15) With {.Bold = True}
Dim fp_SubTitle As FontProp = New FontPropMM(fd, 4) With {.Bold = True}
Dim pp As New PenProp(Me, 0.2, Color.FromArgb(235, 235, 235))
Dim pp_Black As New PenProp(Me, 0.2, Color.Black)
Dim bp As New BrushProp(Me, Color.LightGray)
Dim tempVar As New Page(Me)
page_Cur.AddCB_MM(40, New RepString(fp_Title, "Image Sample"))
Dim stream As System.IO.Stream = Me.GetType().Assembly.GetManifestResourceStream("Image.jpg")
page_Cur.AddMM(20, 90, New RepImageMM(stream, 40, Double.NaN))
page_Cur.AddMM(20, 95, New RepString(fp_SubTitle, "W = 40mm, H = auto."))
page_Cur.AddMM(67, 90, New RepImageMM(stream, 40, 20))
page_Cur.AddMM(67, 95, New RepString(fp_SubTitle, "W = 40mm, H = 20mm"))
page_Cur.AddMM(114, 90, New RepImageMM(stream, Double.NaN, 30))
page_Cur.AddMM(114, 95, New RepString(fp_SubTitle, "W = auto., H = 30mm"))
page_Cur.AddMM(161, 90, New RepImageMM(stream, 30, 30))
page_Cur.AddMM(161, 95, New RepString(fp_SubTitle, "W = 30mm, H = 30mm"))
End Sub
End Class
End Namespace
列表布局管理器提供了一种在 PDF 文档中添加列表的方法。 这对于创建有序或无序列表、自定义列表缩进、子弹样式以及管理文档中列表项的整体布局非常有用。
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ListLayoutManagerSample : Report {
private Double rMarginLeft = 20; // millimeters
private Double rWidth = 175; // millimeters
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 1.9);
Double rY = 40; // vertical position in millimeters
new Page(this);
FontProp fp_Title = new FontPropMM(fd, 8);
page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
rY += 18;
ListLayoutManager llm = null;
using (llm = new ListLayoutManager(this)) {
PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
// Configuration for columns
TlmColumn col_Number = new TlmColumnMM(llm, 10);
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
TlmColumn col_Text = new TlmColumnMM(llm, 100);
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
llm.container_CreateMM(page_Cur, rMarginLeft, rY); // immediately creates a container
// Adding rows and content
// ...
// Rows and content omitted for brevity
// ...
}
rY += llm.rCurY_MM + 1.5;
fp.rSizeMM = 1.5;
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
}
}
}
using Root.Reports;
using System.Drawing;
namespace ReportSamples {
public class ListLayoutManagerSample : Report {
private Double rMarginLeft = 20; // millimeters
private Double rWidth = 175; // millimeters
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 1.9);
Double rY = 40; // vertical position in millimeters
new Page(this);
FontProp fp_Title = new FontPropMM(fd, 8);
page_Cur.AddCB_MM(rY, new RepString(fp_Title, "List Layout Manager Sample"));
rY += 18;
ListLayoutManager llm = null;
using (llm = new ListLayoutManager(this)) {
PenProp pp_BorderLine = new PenPropMM(this, 0.4, Color.Blue);
PenProp pp_GridLine = new PenPropMM(this, 0.1, Color.Blue);
// Configuration for columns
TlmColumn col_Number = new TlmColumnMM(llm, 10);
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter;
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine;
TlmColumn col_Text = new TlmColumnMM(llm, 100);
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine;
TlmColumn col_Author = new TlmColumnMM(llm, rWidth - llm.rWidthMM);
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine;
col_Author.tlmCellDef_Default.brushProp_Back = new BrushProp(this, Color.FromArgb(255, 210, 210));
llm.container_CreateMM(page_Cur, rMarginLeft, rY); // immediately creates a container
// Adding rows and content
// ...
// Rows and content omitted for brevity
// ...
}
rY += llm.rCurY_MM + 1.5;
fp.rSizeMM = 1.5;
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, new RepString(fp, "End of list"));
}
}
}
Imports Root.Reports
Imports System.Drawing
Namespace ReportSamples
Public Class ListLayoutManagerSample
Inherits Report
Private rMarginLeft As Double = 20 ' millimeters
Private rWidth As Double = 175 ' millimeters
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp As FontProp = New FontPropMM(fd, 1.9)
Dim rY As Double = 40 ' vertical position in millimeters
Dim tempVar As New Page(Me)
Dim fp_Title As FontProp = New FontPropMM(fd, 8)
page_Cur.AddCB_MM(rY, New RepString(fp_Title, "List Layout Manager Sample"))
rY += 18
Dim llm As ListLayoutManager = Nothing
llm = New ListLayoutManager(Me)
Using llm
Dim pp_BorderLine As PenProp = New PenPropMM(Me, 0.4, Color.Blue)
Dim pp_GridLine As PenProp = New PenPropMM(Me, 0.1, Color.Blue)
' Configuration for columns
Dim col_Number As TlmColumn = New TlmColumnMM(llm, 10)
col_Number.tlmCellDef_Default.rAlignH = RepObj.rAlignCenter
col_Number.tlmCellDef_Default.rAlignV = RepObj.rAlignCenter
col_Number.tlmCellDef_Default.penProp_LineLeft = pp_BorderLine
Dim col_Text As TlmColumn = New TlmColumnMM(llm, 100)
col_Text.tlmCellDef_Default.tlmTextMode = TlmTextMode.MultiLine
Dim col_Author As TlmColumn = New TlmColumnMM(llm, rWidth - llm.rWidthMM)
col_Author.tlmCellDef_Default.penProp_LineRight = pp_BorderLine
col_Author.tlmCellDef_Default.brushProp_Back = New BrushProp(Me, Color.FromArgb(255, 210, 210))
llm.container_CreateMM(page_Cur, rMarginLeft, rY) ' immediately creates a container
' Adding rows and content
' ...
' Rows and content omitted for brevity
' ...
End Using
rY += llm.rCurY_MM + 1.5
fp.rSizeMM = 1.5
page_Cur.AddRT_MM(rMarginLeft + rWidth, rY, New RepString(fp, "End of list"))
End Sub
End Class
End Namespace
这是指设置和修改 PDF 文档本身的各种属性(如元数据)的能力。(作者、标题、主题)查看首选项以及加密和访问权限等安全设置。
using Root.Reports;
using System;
namespace ReportSamples {
public class PdfPropertiesSample : Report {
public PdfPropertiesSample() {
PdfFormatter pf = (PdfFormatter)formatter;
pf.sTitle = "PDF Sample";
pf.sAuthor = "Otto Mayer, mot@root.ch";
pf.sSubject = "Sample of some PDF features";
pf.sKeywords = "Sample PDF RSF";
pf.sCreator = "RSF Sample Application";
pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
pf.pageLayout = PageLayout.TwoColumnLeft;
pf.bHideToolBar = true;
pf.bHideMenubar = false;
pf.bHideWindowUI = true;
pf.bFitWindow = true;
pf.bCenterWindow = true;
pf.bDisplayDocTitle = true;
}
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 4);
FontProp fp_Title = new FontPropMM(fd, 11);
fp_Title.bBold = true;
Page page = new Page(this);
page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
fp_Title.rSizeMM = 8;
page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
page = new Page(this);
page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
}
}
}
using Root.Reports;
using System;
namespace ReportSamples {
public class PdfPropertiesSample : Report {
public PdfPropertiesSample() {
PdfFormatter pf = (PdfFormatter)formatter;
pf.sTitle = "PDF Sample";
pf.sAuthor = "Otto Mayer, mot@root.ch";
pf.sSubject = "Sample of some PDF features";
pf.sKeywords = "Sample PDF RSF";
pf.sCreator = "RSF Sample Application";
pf.dt_CreationDate = new DateTime(2002, 8, 15, 0, 0, 0, 0);
pf.pageLayout = PageLayout.TwoColumnLeft;
pf.bHideToolBar = true;
pf.bHideMenubar = false;
pf.bHideWindowUI = true;
pf.bFitWindow = true;
pf.bCenterWindow = true;
pf.bDisplayDocTitle = true;
}
protected override void Create() {
FontDef fd = new FontDef(this, FontDef.StandardFont.Helvetica);
FontProp fp = new FontPropMM(fd, 4);
FontProp fp_Title = new FontPropMM(fd, 11);
fp_Title.bBold = true;
Page page = new Page(this);
page.AddCB_MM(40, new RepString(fp_Title, "PDF Properties Sample"));
fp_Title.rSizeMM = 8;
page.AddCB_MM(100, new RepString(fp_Title, "First Page"));
page.AddCB_MM(120, new RepString(fp, "Choose <Document Properties, Summary> from the"));
page.AddCB_MM(126, new RepString(fp, "File menu to display the document properties"));
page = new Page(this);
page.AddCB_MM(100, new RepString(fp_Title, "Second Page"));
}
}
}
Imports Root.Reports
Imports System
Namespace ReportSamples
Public Class PdfPropertiesSample
Inherits Report
Public Sub New()
Dim pf As PdfFormatter = CType(formatter, PdfFormatter)
pf.sTitle = "PDF Sample"
pf.sAuthor = "Otto Mayer, mot@root.ch"
pf.sSubject = "Sample of some PDF features"
pf.sKeywords = "Sample PDF RSF"
pf.sCreator = "RSF Sample Application"
pf.dt_CreationDate = New DateTime(2002, 8, 15, 0, 0, 0, 0)
pf.pageLayout = PageLayout.TwoColumnLeft
pf.bHideToolBar = True
pf.bHideMenubar = False
pf.bHideWindowUI = True
pf.bFitWindow = True
pf.bCenterWindow = True
pf.bDisplayDocTitle = True
End Sub
Protected Overrides Sub Create()
Dim fd As New FontDef(Me, FontDef.StandardFont.Helvetica)
Dim fp As FontProp = New FontPropMM(fd, 4)
Dim fp_Title As FontProp = New FontPropMM(fd, 11)
fp_Title.bBold = True
Dim page As New Page(Me)
page.AddCB_MM(40, New RepString(fp_Title, "PDF Properties Sample"))
fp_Title.rSizeMM = 8
page.AddCB_MM(100, New RepString(fp_Title, "First Page"))
page.AddCB_MM(120, New RepString(fp, "Choose <Document Properties, Summary> from the"))
page.AddCB_MM(126, New RepString(fp, "File menu to display the document properties"))
page = New Page(Me)
page.AddCB_MM(100, New RepString(fp_Title, "Second Page"))
End Sub
End Class
End Namespace
PDF From Text 功能展示了该库在 PDF 中添加和自定义文本内容的功能。 这包括设置文本对齐方式、行间距、颜色以及应用粗体或斜体等文本效果。
IronPDF以其广泛的详细文件. IronPdf 提供了一个条理清晰的文档部分,其中包括设置说明、教程和 API 参考资料。 指南的结构可以帮助初学者和有经验的开发人员快速找到所需的信息。 对于社区驱动的支持,开发人员可以求助于论坛和社区讨论。 在这里,他们可以提出问题、分享经验并从其他用户那里找到答案。
IronPDF 还通过票务系统提供专业支持,工程师可以直接从 IronPDF 团队获得帮助。 这项服务可能是付费许可的一部分,可提供更直接、更即时的帮助。
报告.NET作为一个开源库,.NET、Python 或 Node.js 有着不同的文档和支持方式。 文档的内容可能不如商业库那么广泛,但足以满足入门和处理常见任务的需要。 该库的文档可在 GitHub 存储库中找到,或作为源代码中的内联注释。 它往往技术性较强,可能需要深入挖掘才能找到所需的信息。
由于 Report.NET 是一个免费的开源库,因此不提供正式的专业支持。 开发人员可以依靠社区提供的帮助,也可能需要聘请专家来解决更深入的问题。
IronPDF提供各种许可模式翻译的目的是适应不同的开发和部署需求,确保适合各种规模的项目和组织。 以下是概述:
Lite License(749美元):这是最基本的选项,适合在一个地点从事单一项目的个人开发人员。 译文附带电子邮件支持,但不包括免版税的再分发。
Plus License($1,499 USD):该 License 面向小型团队,最多支持三名开发人员在三个地点为三个项目工作。 该项目将加强支持,包括 24 小时电子邮件和聊天以及电话支持。
专业 License(2,999 美元):专为大型团队和项目设计,最多可容纳 10 名开发人员在 10 个地点为 10 个项目工作。 它包括所有 Plus 支持选项,并增加了屏幕共享支持,以实现更多的交互式问题解决。
免费试用许可:是评估目的的理想之选。试用许可您可以免费试用 IronPDF。不过,它仅供私人使用,生成的 PDF 不应发布在任何公共或企业互联网或内联网项目上。
除核心许可证外,还可选择扩展覆盖范围:
Report.NET 根据 LGPL 许可免费发布。 LGPL(较小通用公共许可证)该许可证是一种免费软件许可证,允许用户运行、研究、共享和修改软件。 许可证确保 Report.NET 库可以在开源软件和专有软件中自由使用,只要不修改代码的 LGPL 许可部分即可。 如果对这些工具进行了修改,则必须在相同的许可下共享这些修改。
阅读时IronPDF和报告.NET因此,我们已经检查了各种要素,如它们的功能、提供的功能范围、易用性、支持服务以及许可方式。
IronPDF 提供了丰富的功能,开发人员不仅可以通过 HTML、图像和文本创建和编辑 PDF 文件,还可以实现加密、数字签名和定制页眉/页脚等高级功能。 支持不同的许可方式意味着它可以适应从个人开发者到大型企业的不同规模的项目。 其全面的文档和专业的支持结构使其适用于需要持续更新和直接帮助的项目。 IronPDF还提供一个免费试用IronPDF 的起价为 749 美元。
与此相反,Report.NET 是一个简单明了的工具,擅长生成 PDF 文档。 LGPL 许可证意味着开发人员可以在个人和商业项目中使用它,而不会受到重大限制。 虽然它可能无法提供与 IronPDF 相同级别的结构化支持,但 Report.NET 的开源性质鼓励社区提供意见和帮助。
您在 IronPDF 和 Report.NET 之间的选择将取决于您项目的具体要求。 如果您的项目需要在专业支持下进行详细的 PDF 创建和操作,IronPDF 可能是您的首选。