如何使用C#实现PDF和TXT格式互转?Aspose快速搞定

被刻印的时光 ゝ 提交于 2020-11-24 13:20:25

PDF文件之所以受欢迎,是因为它们支持文本,图像,动画,视频和许多其他注释。

但是,文本是大多数PDF文档中最重要的部分。在本文中,我们将使用C#.NET将PDF转换为TXT文件,并将TXT文件转换为PDF格式。本文内容包括:

  • 使用C#或VB.NET将PDF转换为TXT文件而不进行格式化
  • 使用C#或VB.NET使用格式化例程将PDF转换为TXT文件
  • 使用C#或VB.NET以编程方式将TXT文件转换为PDF

目前,.NET版Aspose.PDF升级到v20.9版,增强TIFF到PDF的转换性能,修复LZW解码器失败等诸多Bug问题,感兴趣的朋友可点击下载最新版

使用C#或VB.NET将PDF转换为TXT文件而不进行格式化

首先,我们将无需任何格式设置例程即可将PDF转换为文本。文本内容将按原样转换。因此,从输入的PDF文件开始,输出文本将不遵循任何格式。需要按照以下步骤将PDF高效且可靠地转换为TXT。

  • 加载输入的PDF文档
  • 初始化StringBuilder类的实例
  • 遍历PDF文档的每一页
  • 使用TextDevice和Raw模式读取文本
  • 将输出文本另存为TXT文件

下面的代码段显示了如何在.NET Framework中使用C#或VB将PDF转换为TXT文件:

// Open document
Document pdfDocument = new Document(dataDir + "MultiColumnPdf.pdf");
StringBuilder builder = new StringBuilder();
// String to hold extracted text
string extractedText = "";

foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Create text device
        TextDevice textDevice = new TextDevice();

        // Set different options
        TextExtractionOptions options = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Raw);
        textDevice.ExtractionOptions = options;

        // Convert the page and save text to the stream
        textDevice.Process(pdfPage, textStream);

        // Close memory stream
        textStream.Close();

        // Get text from memory stream
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}

dataDir = dataDir + "PDF_to_TXT_Raw.txt";
// Save the text file
File.WriteAllText(dataDir, builder.ToString());

使用C#或VB.NET使用格式化例程将PDF转换为TXT文件

可以按照以下步骤,使用C#轻松地将PDF文档的文本内容呈现为TXT文件:

  • 加载源PDF文件
  • 启动一个字符串变量
  • 使用TextFormattingMode.Pure通读每个页面
  • 保存转换后的TXT文件

以下代码段显示了如何使用C#或VB.NET语言将PDF格式转换为TXT文件:

// Open document
Document pdfDocument = new Document(dataDir + "MultiColumnPdf.pdf");
StringBuilder builder = new StringBuilder();
// String to hold extracted text
string extractedText = "";

foreach (Page pdfPage in pdfDocument.Pages)
{
    using (MemoryStream textStream = new MemoryStream())
    {
        // Create text device
        TextDevice textDevice = new TextDevice();

        // Set different options
        TextExtractionOptions options = new
        TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Pure);
        textDevice.ExtractionOptions = options;

        // Convert the page and save text to the stream
        textDevice.Process(pdfPage, textStream);

        // Close memory stream
        textStream.Close();

        // Get text from memory stream
        extractedText = Encoding.Unicode.GetString(textStream.ToArray());
    }
    builder.Append(extractedText);
}

dataDir = dataDir + "PDF_to_TXT_Pure.txt";
// Save the text file
File.WriteAllText(dataDir, builder.ToString());

视觉比较PURE和RAW文本转换

以下屏幕快照是我们刚刚讨论的两种方法的直观比较。您会注意到,纯模式(最右边的窗口)以与PDF文件(最左边的窗口)相同的格式显示文本。

PDF处理控件Aspose.PDF功能演示:使用C#实现PDF和TXT格式互转

使用C#或VB.NET以编程方式将TXT文件转换为PDF

TXT文件通常包含大量文本内容。您可以使用Aspose.PDF for .NET API轻松地将TXT文件转换为PDF文件。只需按照以下步骤执行文本到PDF的转换:

  • 创建一个TextReader类的实例
  • 初始化PDF文档并添加空白页
  • 实例化TextBuilder对象
  • 从输入的TXT文件中读取每一行文本
  • 保存输出PDF文件

下面的代码段说明了如何使用C#或VB.NET语言以编程方式将包含文本的TXT文件转换为PDF文档:

// Read input TXT file
System.IO.TextReader tr = new StreamReader(dataDir + "Test.txt", Encoding.UTF8, true);

// Initialize new Document
Document doc = new Document();

// Add blank page
Page page = doc.Pages.Add();
String strLine;

// Initiate TextBuilder object
TextBuilder builder = new TextBuilder(page);
double x = 100; double y = 100;
while ((strLine = tr.ReadLine()) != null)
{
 TextFragment text = new TextFragment(strLine);
 text.Position = new Position(x, y);
 if (y >= page.PageInfo.Height - 72)
 {
  y = 100;
  page = doc.Pages.Add();
  builder = new TextBuilder(page);
 }
 else
 {
  y += 15;
 }
 builder.AppendText(text);
}

// Save output PDF file
doc.Save(dataDir + "TexttoPDF.pdf");
tr.Close();

如果您有任何疑问或需求,请随时加入Aspose技术交流群(642018183),我们很高兴为您提供查询和咨询

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!