如何使用 C# 创建 PDF

我们始终在寻找一种方法,以更准确、精确和有效的方式在 C# 项目中生成 PDF 文档并与之协作。使用库中的易用函数使我们能够跟踪更多的工作,而不是在生成 PDF 的耗时细节上花费时间,无论是在 .NET 中。

以下代码片段也适用于 Aspose.PDF.Drawing 库。

使用 C# 语言创建(或生成)PDF 文档

Aspose.PDF for .NET API 允许您使用 C# 和 VB.NET 创建和读取 PDF 文件。该 API 可用于各种 .NET 应用程序,包括 WinForms、ASP.NET 等。在本文中,我们将展示如何使用 Aspose.PDF for .NET API 在 .NET 应用程序中轻松生成和读取 PDF 文件。

如何创建简单的 PDF 文件

要使用 C# 创建 PDF 文件,可以使用以下步骤。

  1. 创建 Document 类的对象。
  2. 向 Document 对象的 Pages 集合中添加一个 Page 对象。
  3. TextFragment 添加到页面的 Paragraphs 集合中。
  4. 保存生成的 PDF 文档。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateHelloWorldDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();

    // Create PDF document
    using (var document = new Aspose.Pdf.Document())
    {
        // Add page
        var page = document.Pages.Add();
        // Add text to new page
        page.Paragraphs.Add(new Aspose.Pdf.Text.TextFragment("Hello World!"));
        // Save PDF document
        document.Save(dataDir + "HelloWorld_out.pdf");
    }
}

如何创建可搜索的 PDF 文档

Aspose.PDF for .NET 提供创建和操作现有 PDF 文档的功能。当在 PDF 文件中添加文本元素时,生成的 PDF 是可搜索的。然而,如果我们将包含文本的图像转换为 PDF 文件,PDF 中的内容将不可搜索。然而,作为一种解决方法,我们可以对生成的文件使用 OCR,使其变得可搜索。

下面指定的逻辑识别 PDF 图像中的文本。对于识别,您可以使用外部 OCR 支持 HOCR 标准。出于测试目的,我们使用了免费的 Google tesseract OCR。因此,您首先需要在系统上安装 Tesseract-OCR,并且您将拥有 tesseract 控制台应用程序。

以下是完成此要求的完整代码:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateSearchableDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "SearchableDocument.pdf"))
    {
        document.Convert(CallBackGetHocr);

        // Save PDF document
        document.Save(dataDir + "SearchableDocument_out.pdf");
    }
}

private static string CallBackGetHocr(System.Drawing.Image img)
{
    var tmpFile = Path.GetTempFileName();
    try
    {
        using (var bmp = new System.Drawing.Bitmap(img))
        {
            bmp.Save(tmpFile, System.Drawing.Imaging.ImageFormat.Bmp);
        }

        var inputFile = string.Concat('"', tmpFile, '"');
        var outputFile = string.Concat('"', tmpFile, '"');
        var arguments = string.Concat(inputFile, " ", outputFile, " -l eng hocr");
        var tesseractProcessName = RunExamples.GetTesseractExePath();

        var psi = new System.Diagnostics.ProcessStartInfo(tesseractProcessName, arguments)
        {
            UseShellExecute = true,
            CreateNoWindow = true,
            WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden,
            WorkingDirectory = Path.GetDirectoryName(tesseractProcessName)
        };

        var p = new System.Diagnostics.Process
        {
            StartInfo = psi
        };
        p.Start();
        p.WaitForExit();

        using (var streamReader = new StreamReader(tmpFile + ".hocr"))
        {
            string text = streamReader.ReadToEnd();
            return text;
        }
    }
    finally
    {
        if (File.Exists(tmpFile))
        {
            File.Delete(tmpFile);
        }
        if (File.Exists(tmpFile + ".hocr"))
        {
            File.Delete(tmpFile + ".hocr");
        }
    }
}

如何使用低级函数创建可访问的 PDF

此代码片段处理 PDF 文档及其标记内容,利用 Aspose.PDF 库进行处理。

该示例在 PDF 的第一页的标记内容中创建一个新的 span 元素,查找所有 BDC 元素,并将它们与 span 关联。然后保存修改后的文档。

您可以使用 BDCProperties 对象创建一个指定 mcid、lang 和扩展文本的 bdc 语句:

var bdc = new Aspose.Pdf.Operators.BDC("P", new Aspose.Pdf.Facades.BDCProperties(1, "de", "Hallo, welt!"));

在创建结构树后,可以使用元素对象上的 Tag 方法将 BDC 操作符绑定到结构的指定元素:

Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
span.Tag(bdc);

创建可访问 PDF 的步骤:

  1. 加载 PDF 文档。
  2. 访问标记内容。
  3. 创建一个 Span 元素。
  4. 将 Span 附加到根元素。
  5. 遍历页面内容。
  6. 检查 BDC 元素并标记它们。
  7. 保存修改后的文档。
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateAnAccessibleDocument()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_QuickStart();
    
    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "tourguidev2_gb_tags.pdf"))
    {
        // Access tagged content
        Aspose.Pdf.Tagged.ITaggedContent content = document.TaggedContent;
        // Create a span element
        Aspose.Pdf.LogicalStructure.SpanElement span = content.CreateSpanElement();
        // Append span to root element
        content.RootElement.AppendChild(span);
        // Iterate over page contents
        foreach (var op in document.Pages[1].Contents)
        {
            var bdc = op as Aspose.Pdf.Operators.BDC;
            if (bdc != null)
            {
                span.Tag(bdc);
            }
        }
        // Save PDF document
        document.Save(dataDir + "AccessibleDocument_out.pdf");
    }
}

此代码通过在文档的标记内容中创建一个 span 元素并使用此 span 标记第一页的特定内容(BDC 操作)来修改 PDF。然后将修改后的 PDF 保存到新文件中。