如何用 C# 从 PDFFilePrint 迁移到 IronPDF
从PDF 文件打印迁移到 IronPdf:完整的 C# 迁移指南。
从PDF 文件打印迁移到IronPDF可将您的 .NET PDF 工作流程从功能有限的以打印为重点的实用程序转变为综合 PDF 库,该库可在单一的统一 API 中处理创建、操作和打印。 本指南提供了完整的分步迁移路径,消除了命令行依赖性,同时增加了PDF 文件打印无法提供的 PDF 生成和处理功能。
为什么要从PDF 文件打印迁移到 IronPDF?
了解 PDFFilePrint。
PDFFilePrint 是一款实用工具,专门用于从 C# 应用程序中打印 PDF 文件。 虽然它能很好地完成有针对性的 PDF 打印任务,但其功能仅限于文档处理的一个方面。PDF 文件打印的主要魅力在于其简单性--只专注于为 PDF 文件提供打印体验。 然而,这种狭隘的关注点对综合文档管理系统造成了很大的限制。
PDF 文件打印的关键限制
1.专注于打印:PDFFilePrint 的功能仅限于打印。 它缺乏创建或修改 PDF 文件的功能,这对更全面的文档管理系统来说是个限制。
2.命令行依赖性:PDFFilePrint 通常依赖于调用 Process.Start() 的命令行操作,可能无法满足无缝集成到需要更强大 API 的应用程序中的需求。
3.仅限 Windows:由于它在很大程度上依赖于 Windows 打印系统,因此可能不是使用其他操作系统的环境的最佳选择。
4.无 .NET 集成:无本地 API,无 NuGet 包,在某些使用模式下不支持 IntelliSense。
5.外部流程管理:必须处理进程生命周期、退出代码以及来自 stdout/stderr 的错误解析。
6.有限的错误处理:检测错误需要解析标准输出和错误流,而不是本地异常。
7.部署复杂性:必须将 PDFFilePrint.exe 与命令行使用场景中的应用程序捆绑在一起。
8.不生成 PDF:不能创建 PDF,只能在命令行模式下打印现有 PDF。
PDF 文件打印与IronPDF对比
| 方面 | PDF 文件打印 | IronPDF |
|---|---|---|
| 主要关注点 | PDF 印刷 | 全面的 PDF API |
| 类型 | 命令行实用程序/基本库 | 本地 .NET 库 |
| 集成 | Process.Start() / 基本 API | 直接调用 API |
| PDF 打印 | ✓ | ✓ |
| PDF 创建 | 有限的 | ✓ (HTML、URL、图片) |
| PDF 操作 | ✗ | ✓(合并、拆分、编辑) |
| 跨平台 | 仅限 Windows | Windows、Linux、macOS |
| 错误处理 | 解析 stdout/stderr | 本地例外情况 |
| 智能感知 | 有限的 | 全面支持 |
| NuGet软件包 | 有限的 | ✓ |
| 文档 | 基本的 | 广泛 |
对于计划在 2025 年和 2026 年之前采用 .NET 10 和 C# 14 的团队来说,IronPDF 提供了一个全面的基础,具有跨平台支持和积极的开发,解决了PDF 文件打印在架构上的局限性。
开始之前
前提条件
1..NET环境:.NET Framework 4.6.2+ 或 .NET Core 3.1+ / .NET 5/6/7/8/9+ 2.NuGet 访问:安装 NuGet 软件包的能力 3.IronPDF 许可证:从 ironpdf.com 获取许可证密钥
NuGet 软件包变更
# RemovePDF 文件打印package (if installed via NuGet)
dotnet remove package PDFFilePrint
# If using command-line PDFFilePrint.exe, remove from deployment
# Delete bundled PDFFilePrint.exe from your project
# Install IronPDF
dotnet add package IronPdf# RemovePDF 文件打印package (if installed via NuGet)
dotnet remove package PDFFilePrint
# If using command-line PDFFilePrint.exe, remove from deployment
# Delete bundled PDFFilePrint.exe from your project
# Install IronPDF
dotnet add package IronPdf许可配置
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.com确定PDF 文件打印的用法
# FindPDF 文件打印references
grep -r "PDFFilePrint\|PDFFile\|CreateFromHtml\|CreateFromUrl" --include="*.cs" .
# Find command-line execution patterns
grep -r "ProcessStartInfo.*pdf\|Process.Start.*print" --include="*.cs" .
# Find batch scripts
find . -name "*.bat" -o -name "*.cmd" | xargs grep -l "PDFFilePrint"# FindPDF 文件打印references
grep -r "PDFFilePrint\|PDFFile\|CreateFromHtml\|CreateFromUrl" --include="*.cs" .
# Find command-line execution patterns
grep -r "ProcessStartInfo.*pdf\|Process.Start.*print" --include="*.cs" .
# Find batch scripts
find . -name "*.bat" -o -name "*.cmd" | xargs grep -l "PDFFilePrint"完整的 API 参考
命名空间变更
// PDFFilePrint
using PDFFilePrint;
using System.Diagnostics; // For command-line usage
// IronPDF
using IronPdf;
using IronPdf.Printing;// PDFFilePrint
using PDFFilePrint;
using System.Diagnostics; // For command-line usage
// IronPDF
using IronPdf;
using IronPdf.Printing;IRON VB CONVERTER ERROR developers@ironsoftware.com核心类映射
| PDF 文件打印 | IronPDF | 备注 |
|---|---|---|
| <代码>new PDFFile()</ 代码 | <代码>new ChromePdfRenderer()</ 代码 | PDF 创建 |
| <代码>new PDFFile()</ 代码 | <代码>PdfDocument.FromFile()</代码 | 用于加载现有 PDF |
| <代码>PDF 文件</代码 | <代码>PDF 文档</代码 | 文档对象 |
PDF 生成方法映射
| PDF 文件打印 | IronPDF | 备注 |
|---|---|---|
| <代码>pdf.CreateFromHtml(html)</代码 | <代码>renderer.RenderHtmlAsPdf(html)</代码 | HTML 至 PDF |
| <代码>pdf.CreateFromUrl(url)</代码 | <代码>renderer.RenderUrlAsPdf(url)</代码 | URL 至 PDF |
| <代码>pdf.SaveToFile(路径)</代码 | <代码>pdf.SaveAs(路径)</代码 | 保存到文件 |
PDF 加载和打印映射
| PDF 文件打印 | IronPDF | 备注 |
|---|---|---|
| <代码>pdf.LoadFromFile(路径)</代码 | <代码>PdfDocument.FromFile(路径)</代码 | 加载现有 PDF |
| <代码>pdf.Print(打印机名称)</代码 | <代码>pdf.Print(打印机名称)</代码 | 打印到特定打印机 |
| <代码>pdf.Print("默认打印机")</代码 | <代码>pdf.Print()</代码 | 打印为默认值 |
打印设置映射(命令行到 API)
| PDFFilePrint 标志 | IronPdf 打印设置属性 | 备注 |
|---|---|---|
| <代码>-打印机 "名称"</代码 | <代码>打印机名称</代码 | <代码>字符串</代码 |
| <代码>-副本 N</代码 | <代码>份数</代码 | int |
| <代码>-无声</代码 | <代码>ShowPrintDialog = false</代码 | 颠倒逻辑 |
| <代码>-页码 "1-5"</代码 | <代码>FromPage</代码>, <代码>ToPage</代码 | int |
| <代码>-面向景观</代码 | <代码>文件方向</代码 | <代码>PdfPrintOrientation</代码 |
-duplex | <代码>Duplex</代码 | <代码>双工</代码>枚举 |
| <代码>-collate</代码 | <代码>Collate</代码 | <代码>布尔</代码 |
PDF 文件打印中没有的新功能
| IronPdf 特点 | 说明 |
|---|---|
| <代码>PdfDocument.Merge()</代码 | 合并多个 PDF |
| <代码>pdf.CopyPages()</代码 | 提取特定页面 |
| <代码>pdf.ApplyWatermark()</代码 | 添加水印 |
| <代码>pdf.SecuritySettings</代码 | 密码保护 |
| <代码>pdf.ExtractAllText()</代码 | 提取文本内容 |
| <代码>pdf.RasterizeToImageFiles()</代码 | 转换为图像 |
| <代码>pdf.SignWithDigitalSignature()</代码 | 数字签名 |
代码迁移示例
示例 1:HTML 到 PDF 的转换
之前(PDFFilePrint):
// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
pdf.CreateFromHtml(htmlContent);
pdf.SaveToFile("output.pdf");
}
}// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
pdf.CreateFromHtml(htmlContent);
pdf.SaveToFile("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com这里的根本区别在于 API 模式。PDF 文件打印使用一个具有 CreateFromHtml() 和 SaveToFile() 方法的<代码>PDF 文件</代码类。IronPDF将渲染从文档对象中分离出来--ChromePdfRenderer 处理 HTML 到 PDF 的转换并返回一个<代码>PDF 文档</代码对象,然后您可以使用 SaveAs() 保存该对象。
这种分离提供了显著的优势:您可以在转换之前在渲染器上配置渲染选项,并且可以在保存之前对返回的<代码>PDF 文档</代码进行操作(添加水印、与其他 PDF 合并、添加安全性)。 有关其他渲染选项,请参阅 HTML to PDF 文档。
示例 2:URL 到 PDF 的转换
之前(PDFFilePrint):
// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
pdf.CreateFromUrl("https://www.example.com");
pdf.SaveToFile("webpage.pdf");
}
}// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
pdf.CreateFromUrl("https://www.example.com");
pdf.SaveToFile("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFFilePrint 在同一个<代码>PDF 文件</代码类上使用 CreateFromUrl() 。IronPDF使用 ChromePdfRenderer 上专用的 RenderUrlAsPdf() 方法,该方法利用现代 Chromium 引擎准确呈现复杂的 CSS3、JavaScript 和现代网络功能。 渲染质量具有可预见性,并与您在 Chrome 浏览器中看到的内容相匹配。 了解有关 URL 至 PDF 转换的更多信息。
示例 3:PDF 打印
之前(PDFFilePrint):
// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
pdf.LoadFromFile("document.pdf");
pdf.Print("Default Printer");
Console.WriteLine("PDF sent to printer");
}
}// NuGet: Install-Package PDFFilePrint
using System;
using PDFFilePrint;
class Program
{
static void Main()
{
var pdf = new PDFFile();
pdf.LoadFromFile("document.pdf");
pdf.Print("Default Printer");
Console.WriteLine("PDF sent to printer");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comAfter (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.Print();
Console.WriteLine("PDF sent to printer");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.Print();
Console.WriteLine("PDF sent to printer");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com该示例显示了 PDF 加载和打印的基本架构差异。PDF 文件打印使用<代码>new PDFFile()</ 代码后接 LoadFromFile() 然后是 Print(printerName) 。IronPDF使用静态工厂方法<代码>PdfDocument.FromFile()</代码直接加载,然后使用 Print() 使用默认打印机(也可以传递打印机名称)。
关键的迁移变化: -<代码>new PDFFile()</ 代码+ LoadFromFile(path) → PdfDocument.FromFile(path)
Print("Default Printer")→Print()(默认打印机为自动打印机)
对于高级打印设置,IronPDF 提供了一个 PrintSettings 类。 有关高级选项,请参阅 打印文档。
高级打印设置迁移
对于使用PDF 文件打印命令行标志的应用程序,以下是迁移到IronPDF的 PrintSettings 的方法:
//PDF 文件打印command-line approach:
// PDFFilePrint.exe -silent -copies 3 -printer "HP LaserJet" -pages "1-5" "document.pdf"
//IronPDFequivalent:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
var settings = new PrintSettings
{
ShowPrintDialog = false, // -silent
NumberOfCopies = 3, // -copies 3
PrinterName = "HP LaserJet", // -printer "HP LaserJet"
FromPage = 1, // -pages "1-5"
ToPage = 5
};
pdf.Print(settings);//PDF 文件打印command-line approach:
// PDFFilePrint.exe -silent -copies 3 -printer "HP LaserJet" -pages "1-5" "document.pdf"
//IronPDFequivalent:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
var settings = new PrintSettings
{
ShowPrintDialog = false, // -silent
NumberOfCopies = 3, // -copies 3
PrinterName = "HP LaserJet", // -printer "HP LaserJet"
FromPage = 1, // -pages "1-5"
ToPage = 5
};
pdf.Print(settings);IRON VB CONVERTER ERROR developers@ironsoftware.com静音模式标志转换
注意无声打印的倒置逻辑:
// PDFFilePrint: -silent flag enables silent mode
// IronPDF: ShowPrintDialog = false (false = silent)
var settings = new PrintSettings { ShowPrintDialog = false };// PDFFilePrint: -silent flag enables silent mode
// IronPDF: ShowPrintDialog = false (false = silent)
var settings = new PrintSettings { ShowPrintDialog = false };IRON VB CONVERTER ERROR developers@ironsoftware.com迁移后的新功能
迁移到IronPDF后,您将获得PDF 文件打印无法提供的功能:
创建和打印一步到位
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice #12345</h1><p>Thank you for your order.</p>");
pdf.Print("Office Printer");using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Invoice #12345</h1><p>Thank you for your order.</p>");
pdf.Print("Office Printer");IRON VB CONVERTER ERROR developers@ironsoftware.comPDF 合并
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com水印
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>");
pdf.SaveAs("watermarked.pdf");var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:red; opacity:0.3;'>CONFIDENTIAL</h1>");
pdf.SaveAs("watermarked.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com密码保护
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SaveAs("secured.pdf");var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SaveAs("secured.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.com文本提取
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();IRON VB CONVERTER ERROR developers@ironsoftware.com关键迁移说明
类模式更改
PDFFilePrint 使用一个<代码>PDF 文件</代码类来处理所有事务; IronPdf 将关注点分开:
// PDFFilePrint: Single class
var pdf = new PDFFile();
pdf.CreateFromHtml(html);
pdf.SaveToFile(path);
// IronPDF: Renderer for creation, Document for manipulation
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);// PDFFilePrint: Single class
var pdf = new PDFFile();
pdf.CreateFromHtml(html);
pdf.SaveToFile(path);
// IronPDF: Renderer for creation, Document for manipulation
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);IRON VB CONVERTER ERROR developers@ironsoftware.com方法命名更改
//PDF 文件打印→ IronPDF
CreateFromHtml() → RenderHtmlAsPdf()
CreateFromUrl() → RenderUrlAsPdf()
LoadFromFile() → PdfDocument.FromFile()
SaveToFile() → SaveAs()
Print(printerName) → Print(printerName) or Print()//PDF 文件打印→ IronPDF
CreateFromHtml() → RenderHtmlAsPdf()
CreateFromUrl() → RenderUrlAsPdf()
LoadFromFile() → PdfDocument.FromFile()
SaveToFile() → SaveAs()
Print(printerName) → Print(printerName) or Print()IRON VB CONVERTER ERROR developers@ironsoftware.com退出代码到异常处理
如果使用命令行 PDFFilePrint:
// PDFFilePrint: Check process exit code
if (process.ExitCode != 0) {
var error = process.StandardError.ReadToEnd();
throw new Exception($"Print failed: {error}");
}
// IronPDF: Use try-catch
try {
pdf.Print();
}
catch (Exception ex) {
// Handle error with full exception details
}// PDFFilePrint: Check process exit code
if (process.ExitCode != 0) {
var error = process.StandardError.ReadToEnd();
throw new Exception($"Print failed: {error}");
}
// IronPDF: Use try-catch
try {
pdf.Print();
}
catch (Exception ex) {
// Handle error with full exception details
}IRON VB CONVERTER ERROR developers@ironsoftware.com移除外部依赖关系
如果使用命令行 PDFFilePrint,请删除捆绑的可执行文件:
// Before: Required external executable
private readonly string _pdfFilePrintPath = @"C:\tools\PDFFilePrint.exe";
// After: No external dependencies
//IronPDFis fully self-contained via NuGet// Before: Required external executable
private readonly string _pdfFilePrintPath = @"C:\tools\PDFFilePrint.exe";
// After: No external dependencies
//IronPDFis fully self-contained via NuGetIRON VB CONVERTER ERROR developers@ironsoftware.com功能对比摘要
| 特征 | PDF 文件打印 | IronPDF |
|---|---|---|
| 基本印刷 | ✓ | ✓ |
| 静音打印 | ✓ | ✓ |
| 一式多份 | ✓ | ✓ |
| 页面范围 | ✓ | ✓ |
| 双工 | 不同 | ✓ |
| 从 HTML 创建 | 有限的 | ✓ |
| 从 URL 创建 | 有限的 | ✓ |
| 合并 PDF | ✗ | ✓ |
| 拆分 PDF | ✗ | ✓ |
| 添加水印 | ✗ | ✓ |
| 提取文本 | ✗ | ✓ |
| 密码保护 | ✗ | ✓ |
| 数字签名 | ✗ | ✓ |
| 跨平台 | ✗ | ✓ |
| 本地 .NET 应用程序接口 | 有限的 | ✓ |
迁移清单
迁移前
- [ ] 在代码库中查找所有PDF 文件打印参考资料
- [ ] 记录当前使用的方法(CreateFromHtml、CreateFromUrl、Print 等)。
- [ ] 识别跨环境使用的打印机名称
- [如果使用 Process.Start 模式,请列出任何命令行参数
- [ ] 确定新功能(合并、水印、安全)的机会
- [ ] 获取 IronPdf 许可证密钥
软件包变更
- [ ] 删除
PDFFilePrintNuGet 软件包 - [ ] 从部署中移除捆绑的 PDFFilePrint.exe(如适用)
- [ ] 安装
IronPDFNuGet 软件包:<代码>dotnet 添加软件包 IronPdf - [更新命名空间导入
代码更改
- [ ] 在启动时添加许可证密钥配置
- [ ] 将<代码>new PDFFile()</ 代码+
CreateFromHtml()替换为ChromePdfRenderer.RenderHtmlAsPdf()。 - [ ] 将<代码>new PDFFile()</ 代码+
CreateFromUrl()替换为ChromePdfRenderer.RenderUrlAsPdf()。 - [ ] 将
LoadFromFile()替换为<代码>PdfDocument.FromFile()</代码。 - [ ] 将
SaveToFile()替换为SaveAs() - [ ] 根据需要更新
Print()调用 - [ ] 将退出代码检查替换为异常处理(如适用)
后迁移
- [ ] 从源代码控制中删除 PDFFilePrint.exe
- [ ] 更新构建脚本以移除PDF 文件打印复制
- [ ] 在所有目标打印机上测试打印
- [如果适用,进行跨平台测试
- [ ] 根据需要添加新功能(水印、安全性
- [ ] 更新文档
结论
从PDF 文件打印迁移到IronPDF可将您的 PDF 工作流程从专注于打印的实用程序转变为全面的 PDF 解决方案。 迁移消除了仅限 Windows 的限制,删除了外部可执行文件依赖性,并增加了PDF 文件打印无法提供的功能。
本次迁移的主要变化有 1.范围:仅打印 → 综合 PDF API 2.平台:仅限 Windows → 跨平台 3.类模式:PDFFile → ChromePdfRenderer + PdfDocument 4.HTML 方法:<代码>CreateFromHtml()</代码> → <代码>RenderHtmlAsPdf()</代码 5.URL 方法:<代码>CreateFromUrl()</代码> → <代码>RenderUrlAsPdf()</代码 6.加载方法:<代码>LoadFromFile()</代码> → <代码>PdfDocument.FromFile()</代码 7.保存方法:<代码>SaveToFile()</代码> → <代码>SaveAs()</代码 8.新功能:合并、水印、安全性、文本提取等功能






