将 pdf 文档转换为更灵活、易编辑的格式(例如 markdown)已经成为开发者和内容创作者常见的需求。将 pdf 转换为 markdown 文件,不仅方便后续编辑和版本管理,还能提升内容在不同平台和应用程序之间的兼容性,尤其适用于现代 web 发布流程。
通过文档处理工具,开发者可以自动完成 pdf 到 markdown 的转换,同时尽可能保留原始文档中的格式结构和内容信息。本教程将介绍如何使用 c# 实现 pdf 文档到 markdown 格式的转换,并展示具体代码示例。
准备工作
在开始 pdf 转 markdown 操作之前,需要先在 .net 项目中配置相关文档处理组件。您可以通过下载对应程序集文件,或使用 nuget 包管理器将所需依赖添加到项目中。
pm> install-package spire.pdf
将 pdf 文档转换为 markdown 文件
通过 c# 开发,可以轻松实现 pdf 文档到 markdown 格式的转换。首先加载目标 pdf 文件,然后将文档内容保存为 markdown 格式。在转换过程中,可以指定 markdown 输出格式,以生成可编辑、易管理的文本文件。
将 pdf 转换为 markdown 文件的具体步骤如下:
- 创建 pdf 文档处理对象。
- 加载需要转换的 pdf 文件。
- 将 pdf 文档转换并保存为 markdown 文件。
完整示例代码如下:
using spire.pdf;
namespace pdftomarkdown
{
class program
{
static void main(string[] args)
{
// 创建 pdfdocument 类实例
pdfdocument pdf = new pdfdocument();
// 加载 pdf 文档
pdf.loadfromfile("sample.pdf");
// 将文档转换为 markdown 文件
pdf.savetofile("output/pdftomarkdown.md", fileformat.markdown);
// 释放资源
pdf.close();
}
}
}通过流(stream)将 pdf 转换为 markdown
除了直接读取文件进行处理外,还可以通过流(stream)的方式加载 pdf 文档,并将其转换为 markdown 文件流。通过 loadfromstream() 方法可以从数据流中读取 pdf 文档,再使用 savetostream() 方法将转换后的内容保存为 markdown 格式的数据流。
使用流处理方式可以减少内存占用,支持处理较大的文件,同时便于实时数据传输,并简化与其他系统之间的数据交换。
通过流方式将 pdf 文档转换为 markdown 文件的具体步骤如下:
- 创建 pdf 文档的数据流对象,可以通过从网络下载文件或读取本地文件生成。
- 使用
pdfdocument.loadfromstream(stream stream)方法从流中加载 pdf 文档。 - 创建新的流对象,用于存储转换后的 markdown 文件。
- 使用
pdfdocument.savetostream(stream stream, fileformat.markdown)方法将 pdf 文档转换为 markdown 文件流。
完整示例代码如下:
using spire.pdf;
using system.io;
using system.net.http;
namespace pdftomarkdownbystream
{
class program
{
static async task main(string[] args)
{
// 创建 pdfdocument 类实例
pdfdocument pdf = new pdfdocument();
// 从 url 下载 pdf 文档并转换为字节数组
using (httpclient client = new httpclient())
{
byte[] pdfbytes = await client.getbytearrayasync("http://example.com/sample.pdf");
// 使用字节数组创建 memorystream
using (memorystream inputstream = new memorystream(pdfbytes))
{
// 从流中加载 pdf 文档
pdf.loadfromstream(inputstream);
// 创建另一个 memorystream 对象用于存储 markdown 文件
using (memorystream outputstream = new memorystream())
{
// 将 pdf 文档转换为 markdown 文件流
pdf.savetostream(outputstream, fileformat.markdown);
outputstream.position = 0; // 重置流的位置,以便后续读取
// 上传转换后的流,或将其写入文件
await client.postasync("http://example.com/upload", new streamcontent(outputstream));
file.writeallbytes("output.md", outputstream.toarray());
}
}
}
// 释放资源
pdf.close();
}
}
}知识扩展
在c# 中将 pdf 转换为 markdown,目前主要有两类方案:使用成熟的商业/开源库,或自行解析 pdf 并生成 markdown。
方案一:使用专业转换库(推荐)
这是最省时省力的方式,市面上已有多个成熟的库可以直接完成转换。
1. groupdocs.markdown for .net
groupdocs 专门为文档转 markdown 设计,支持精准导出标题、段落、列表、表格、链接、图片、引用块和代码块。
using groupdocs.markdown;
// 设置许可证(可选)
license.set("groupdocs.markdown.lic");
// 实例化转换器
var converter = new markdownconverter("business-plan.pdf");
// 转换并保存
converter.convert("business-plan.md");默认情况下,图片会以 base64 格式嵌入到输出文件中。如果希望将图片单独保存到文件夹:
var converter = new markdownconverter("document.pdf");
var convertoptions = new documentconverteroptions();
convertoptions.imageexportstrategy = new exportimagestofilesystemstrategy("./images");
converter.convert("output.md", convertoptions);- 特点:本地处理、无需网络、跨平台(windows/linux)、支持 .net framework 4.6.2+ 和 .net 6.0+
- 许可:商业库,需要授权
2. syncfusion smart data extractor
syncfusion 的 smart data extractor 库可以分析 pdf 中的文本块、表格、页眉和表单字段,保持布局和格式。
using system.io;
using system.text;
using syncfusion.smartdataextractor;
// 打开 pdf 文件流
using (filestream stream = new filestream("input.pdf", filemode.open, fileaccess.read))
{
// 初始化数据提取器
dataextractor extractor = new dataextractor();
// 提取为 markdown
string data = extractor.extractdataasmarkdown(stream);
// 保存为 markdown 文件
file.writealltext("output.md", data, encoding.utf8);
}提取特定页面:
// 设置要提取的页面范围(第2页)
extractor.pagerange = new int[,] { { 2, 2 } };
string data = extractor.extractdataasmarkdown(stream);- 特点:同样支持从扫描图像(png/jpg)中提取 markdown
- 许可:商业库(syncfusion 有免费社区版,但功能受限)
3. aspose.pdf
aspose.pdf 提供了专门的 pdftomarkdownconverter 用于 pdf 到 markdown 的转换。
using aspose.pdf;
// 加载 pdf 文档
var document = new document("input.pdf");
// 转换为 markdown
// aspose.pdf 提供了 pdftomarkdownconverter 类
var converter = new pdftomarkdownconverter();
converter.bind(document);
converter.save("output.md");- 特点:功能全面,支持从文件、字节数组或流中加载 pdf
- 许可:商业库(有 foss 版本,但功能有限)
4. markitdown(开源免费)
markitdown 是微软原版 markitdown python 库的 c# 移植版,专为 llm/rag 工作流设计,支持 22+ 种文件格式。
using managedcode.markitdown;
// 安装 nuget 包:dotnet add package managedcode.markitdown
var converter = new markitdownconverter();
var result = await converter.convertasync("document.pdf");
// result.content 即为转换后的 markdown 文本
file.writealltext("output.md", result.content);- 特点:原生 .net 9、完全异步、流式处理大文件、内存高效
- 许可:开源免费
- 注意:项目较新,建议在非生产环境先验证转换质量
方案二:自行解析 pdf(开源库组合)
如果需要完全控制转换过程,或者预算有限,可以使用开源 pdf 解析库(如 pdfpig 或 itextsharp)提取内容,然后自行生成 markdown。
使用 pdfpig 提取文本
pdfpig 是 apache pdfbox 的 c# 移植版,支持从 pdf 中读取文本和内容。
using uglytoad.pdfpig;
using uglytoad.pdfpig.content;
using system.text;
public string convertpdftomarkdown(string pdfpath)
{
var sb = new stringbuilder();
using (var pdf = pdfdocument.open(pdfpath))
{
foreach (var page in pdf.getpages())
{
// 提取页面文本
var text = page.text;
// 这里需要自行解析文本结构,添加 markdown 格式
// 例如:识别标题、列表、表格等
sb.appendline(text);
sb.appendline(); // 页面分隔
}
}
return sb.tostring();
}总结
将 pdf 转换为 markdown 可以帮助开发者更方便地编辑、管理和发布文档内容。相比直接处理 pdf 文件,通过 markdown 格式可以提升内容的可读性和跨平台兼容性,适用于网页发布、知识管理和内容处理等场景。
本文介绍了两种使用 c# 实现 pdf 转 markdown 的方法。第一种方法通过直接加载 pdf 文件并保存为 markdown 格式,适用于常规文档转换需求;第二种方法基于流(stream)处理 pdf 数据,可以减少内存占用,并支持从网络、本地文件或其他数据源读取和传输文档内容,更适合处理大型文件或集成到应用程序中。
通过这些方法,开发者可以根据实际应用场景选择合适的转换方式,实现更加灵活、高效的 pdf 文档处理流程。
以上就是c#代码实现将pdf文件转换为markdown格式的详细内容,更多关于c#实现pdf转markdown的资料请关注代码网其它相关文章!
发表评论