操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox

简介: 原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox  很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结。因为实践是经验的来源,总结是提升的基础,所以无论怎样,自己都该反省一下。

原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox

 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结。因为实践是经验的来源,总结是提升的基础,所以无论怎样,自己都该反省一下。今天我主要是研究学习了两个PDF文档的相关类,iTextSharp 和PDFBox。我研究出发点是实现PDF文档的检索,需要提取PDF文档中的文字内容,然后通过正则匹配实现搜索。

  《类似Windows Search的文件搜索系统》中介绍的文件检索方法是很不错的,但它里面对PDF中的中文检索不支持,因为里面调用的iTextSharp不能很好地支持英文,PdfReader类的GetPageContent()方法无法正常返回中文字符,经我测试,并非简单的编码问题。所以,急需能够从PDF中提取text功能。

      我首先学习iTextSharp.dll 下载:http://sourceforge.net/projects/itextsharp/  这里面有很多输出PDF文档的简单例子(下载iTextSharp例子),在学习中发现,不支持中文内容输出。在网上搜索相关内容发现,原来是缺少字体库。有两种方法解决:

  1.自己指定系统的字体库,创建PDF中使用的字体。参见:http://unruledboy.cnblogs.com/Skins/ChinaHeart/Controls/archive/2005/08/30/225984.html

            Document document = new Document(PageSize.A4,50, 50, 50, 50);
            try
            {
                PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("Chap11.pdf", FileMode.Create));

      //下面是创建PDF文档加密的
               //writer.SetEncryption(PdfWriter.STRENGTH40BITS,"654321", "654321", PdfWriter.AllowCopy);  
                document.Open();

      //指定字体库,并创建字体
                BaseFont baseFont = BaseFont.CreateFont(
                    "C:\\WINDOWS\\FONTS\\SIMHEI.TTF",
                    BaseFont.IDENTITY_H,
                    BaseFont.NOT_EMBEDDED);
                iTextSharp.text.Font font = new iTextSharp.text.Font(baseFont, 9); 

               //指定输出内容的字体

      document.Add(new Paragraph(" This document is Top Secret! ", font));
                document.Close();
            }
            catch (Exception de)
            {
                Console.WriteLine(de.StackTrace);
            }

       2.从http://sourceforge.net/projects/itextsharp/ 下载扩展字体库iTextAsianCmaps.dll 和iTextAsian.dll,支持亚洲字体。

    下载界面如下:

   

 

      

 

 

 

 

 

 

 

 

 

 

  /// <summary>
        /// 创建中文字体(实现中文)
        /// </summary>
        /// <returns></returns>
        public static iTextSharp.text.Font CreateChineseFont()
        {
            BaseFont.AddToResourceSearch("iTextAsian.dll");
            BaseFont.AddToResourceSearch("iTextAsianCmaps.dll"); //"STSong-Light", "UniGB-UCS2-H", 
            BaseFont baseFT=BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);

            iTextSharp.text.Font font = new iTextSharp.text.Font(baseFT);
            return font;
        }

  "UniGB-UCS2-H" "UniGB-UCS2-V"是简体中文。 "STSong-Light"是字体名称。BaseFont.EMBEDDED是将字体嵌入文档内。

  其次,我接下来尝试在使用iTextSharp读对象类时,指定字体库,可是很遗憾没有相应方法。请参照:http://www.cnblogs.com/diction/articles/1120984.html (提取文本不支持中文)而且,即使有也很不灵活,因为你不可能预知PDF文档中使用的字体,PDF文档中可能有多种字体。后来,搜索网页相关信息发现:原来iTextSharp的操作PDF文档优势是PDF文档的创建。

  需求是学习和工作的动力

     我的原始目标是找到PDF文档内容提取为文本的方法,我转向《How to parse PDF files》 该文章完整讲述了PDF文档提取文本的方法和整个解决过程思路,我会单独转载该文章,希望不能访问国外网的网友也能看到。PDFBox的下载http://sourceforge.net/projects/pdfbox/files/ 下载解压后里面内容很丰富,

 

 

 

 

所有需要的dll都包含在Bin文件夹里面

 

  "PDFBox is a Java PDF Library. This project will allow access to all of the components in a PDF document. More PDF manipulation features will be added as the project matures. This ships with a utility to take a PDF document and output a text file. "

  PDFBox是个JAVA开源项目,里面使用IKVM.NET开源项目http://www.ikvm.net/ 支持JAVA类库在.NET中调用。

  IKVM.NET is an implementation of Java for Mono and the Microsoft .NET Framework. It includes the following components:

  • A Java Virtual Machine implemented in .NET
  • A .NET implementation of the Java class libraries
  • Tools that enable Java and .NET interoperability

  对IKVM.NET的学习,对以后在.NET下使用JAVA类库很有帮助,其实IKVM.Runtime.dll 就是封装了JAVA类库的运行环境。

需要添加的DLL有:FontBox-0.1.0-dev.dll、IKVM.GNU.Classpath.dll、IKVM.Runtime.dll、PDFBox-0.7.3.dll

PDFBox使用实例代码如下:请参照:http://www.cnblogs.com/wuhenke/archive/2010/04/16/1713949.html

        private static string parseUsingPDFBox(string filename)
        {
            PDDocument doc = PDDocument.load(filename);

            PDFTextStripper stripper = new PDFTextStripper();
            
            return stripper.getText(doc);
        }

PDFBox功能很强大,有时间值得好好学习一下。

 

 

参考:

http://www.codeproject.com/kb/cpp/ExtractPDFText.aspx?df=100&forumid=47947

http://www.codeproject.com/KB/string/pdf2text.aspx

http://www.cnblogs.com/hardrock/

http://www.ikvm.net/

目录
相关文章
|
12月前
|
数据安全/隐私保护 Windows
深度剖析:PDF 工具箱功能,编辑器操作及页面 / 图像提取技巧
PDF24 Tools是一款德国开发的免费PDF工具箱,18年始终免费,支持网页与Windows客户端。内置近50个工具,涵盖编辑、转换、合并、提取、加密等功能,操作简单,可离线使用,是高效处理PDF的理想选择。
1354 0
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
12月前
|
小程序
公众号如何添加附传Word、Excel、Pdf、PPT文档
公众号里添加一些文档给公众号粉丝下载,比如课件PPT、申请表Word文档、岗位需求Excel表、大赛入围/获奖名单等。公众号本身是不支持直接上传文件的,但我们可以通过附件小程序“间接”上传文件。
1720 0
|
人工智能 JavaScript 前端开发
基于iTextSharp实现PDF加密功能
本教程介绍使用C#与iTextSharp库实现PDF文档加密的方法。内容包括环境搭建、界面设计及后台逻辑编写,涵盖选择文件、设置用户与所有者密码、加密操作等步骤,帮助开发者快速掌握PDF安全处理技巧。
332 0
|
人工智能 编解码 文字识别
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
OCRmyPDF 是一款开源命令行工具,专为将扫描的 PDF 文件转换为可搜索、可复制的文档。支持多语言、图像优化和多核处理。
1685 17
OCRmyPDF:16.5K Star!快速将 PDF 文件转换为可搜索、可复制的文档的命令行工具
|
人工智能 开发工具 开发者
【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能
HarmonyOS 系统提供的核心场景化视觉服务,旨在帮助开发者快速实现移动端文档数字化功能。
659 0
|
人工智能 Docker 索引
推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate
今天给大家推荐一个**双语对照的 PDF 翻译工具**的开源项目:PDFMathTranslate 。
推荐一个双语对照的 PDF 翻译工具的开源项目:PDFMathTranslate
DeepSeek + Xmind,1分钟自动把pdf/word文档转成思维导图
DeepSeek与Xmind结合,1分钟将PDF、Word文档转换为思维导图。只需四步:上传文档至DeepSeek,请求转换为Markdown格式,保存文件并修改后缀为.md,最后导入Xmind生成思维导图。轻松驾驭复杂文档,适用于学习笔记、工作报告、项目规划等场景,大幅提升效率!
|
人工智能 文字识别 自然语言处理
1.6K star!这个开源文本提取神器,5分钟搞定PDF/图片/Office文档!
Kreuzberg 是一个基于 Python 的文本提取库,支持从 PDF、图像、Office 文档等 20+ 格式中提取文本内容。采用 MIT 开源协议,具备本地处理、异步架构、智能 OCR 等特性,特别适合需要隐私保护的文档处理场景。
1981 1
|
XML C# 数据格式
一个.NET开源、免费、功能强大的 PDF 处理工具
一个.NET开源、免费、功能强大的 PDF 处理工具
713 8

热门文章

最新文章