前提是PDF里面是有文字的!

一次性取得所有页内容:

        /// <summary>
/// 改进前取得所有页的所有word
/// </summary>
/// <param name="pdfFilePath"></param>
/// <param name="txtDirectoryPath"></param>
public static void ConvertPdfToTxt(string pdfFilePath, string txtDirectoryPath)
{
CAcroAVDoc avDoc = (Acrobat.CAcroAVDoc)Microsoft.VisualBasic.Interaction.CreateObject("AcroExch.AVDoc"); //set AVDoc object
CAcroPDDoc pdDoc;
//open the PDF
if (avDoc.Open(pdfFilePath, ""))
{
pdDoc = (CAcroPDDoc)avDoc.GetPDDoc();
Object jsAcroObj = pdDoc.GetJSObject();
Type T = jsAcroObj.GetType();
object[] saveAsParam = { txtDirectoryPath, "com.adobe.acrobat.accesstext" };
T.InvokeMember("saveAs",
BindingFlags.InvokeMethod |
BindingFlags.Public |
BindingFlags.Instance,
null, jsAcroObj, saveAsParam);
object[] closeDocParam = { true };
T.InvokeMember("closeDoc",
BindingFlags.InvokeMethod |
BindingFlags.Public |
BindingFlags.Instance,
null, jsAcroObj, closeDocParam); if (!avDoc.Close()) avDoc.Close();
}
}

逐页取出:

        /// <summary>
/// 改进后取得每一页的所有word
/// </summary>
/// <param name="pdDoc"></param>
/// <returns></returns>
public static List<KeyValuePair<String, String>> PdDocGetText(AcroPDDoc pdDoc)
{
List<KeyValuePair<String, String>> txt = new List<KeyValuePair<string, string>>();
AcroPDPage page;
int pages = pdDoc.GetNumPages();
string pageText = "";
for (int i = ; i < pages; i++)
{
page = (AcroPDPage)pdDoc.AcquirePage(i);
object jso, jsNumWords, jsWord;
List<string> words = new List<string>();
try
{
jso = pdDoc.GetJSObject();
if (jso != null)
{
object[] args = new object[] { i };
jsNumWords = jso.GetType().InvokeMember("getPageNumWords", System.Reflection.BindingFlags.InvokeMethod, null, jso, args, null);
int numWords = Int32.Parse(jsNumWords.ToString());
for (int j = ; j <= numWords; j++)
{
object[] argsj = new object[] { i, j, false };
jsWord = jso.GetType().InvokeMember("getPageNthWord", System.Reflection.BindingFlags.InvokeMethod, null, jso, argsj, null);
words.Add((string)jsWord);
}
}
foreach (string word in words)
{
//取得当前page内容
pageText += word;
}
}
catch
{
} //当前页内容加入list
txt.Add(new KeyValuePair<string, string>((i + ).ToString(), pageText));
pageText = ""; jso = null;
}
return txt;
}

在这个基础之上我们再写一些比如搜索PDF内容的功能就容易多了吧。

补充:这里有一个问题,当遇到PDF排版是纵向的时候,读出来的是乱码,因为行是横向的。这个困扰我很久了,大家如果有思路的话可以说出来交流一下。

PDF抽取文字 C# with Adobe API的更多相关文章

  1. PDF转图片 C# with Adobe API

    PDF转图片大概有十几种方式,褒贬不一,我就详细给大家说一下我认为效率最高的方式,使用Adobe官方的SDK 安装acrobat reader 9.0以上即可,勾选如下组件.

  2. 自动生成pdf书签(仅适用于Adobe Acrobat on windows )

    必备软件 1.Adobe Acrobat. 2.AutoBookmark 为adobe acrobat的自动生成书签的插件(我用的这个:AutoBookmark Standard Plug-in),下 ...

  3. C# 使用itextsharp 读取pdf中文字坐标

      程序调用: using iTextSharp.text.pdf; using System; using System.Collections.Generic; using System.Linq ...

  4. 使用PDFminer3k解析pdf为文字遇到:WARING:root:GBK-EUC-H

    最近需要把PDF解析为文字,查了查python的模块,发现PDFminer3k能满足需求.我使用的是 windows平台下的python3.6,python2的则下载pdfminer. 首先下载:直接 ...

  5. c# iText 生成PDF 有文字,图片,表格,文字样式,对齐方式,页眉页脚,等等等,

    #region 下载说明书PDF protected void lbtnDownPDF_Click(object sender, EventArgs e) { int pid = ConvertHel ...

  6. 开发笔记:PDF生成文字和图片水印

    背景 团队手里在做的一个项目,其中一个小功能是用户需要上传PDF文件到文件服务器上,都是一些合同或者技术评估文档,鉴于知识版权和防伪的目的,需要在上传的PDF文件打上水印, 这时候我们需要提供能力给客 ...

  7. Ubuntu下安装PDF 文档阅读器Adobe Reader 9.5.5

    由于没有PPA所以我们必须在Adobe的官方FTP上下载安装,下面的方法同时适用于32位和64位系统: wget ftp://ftp.adobe.com/pub/adobe/reader/unix/9 ...

  8. Java编辑PDF写入文字 插入图片

    package com.test; import com.itextpdf.text.BaseColor; import com.itextpdf.text.Font; import com.itex ...

  9. 凸优化 Convex Optimization PDF 扫描文字识别版

    凸优化理论 Convex Optimization 清华大学出版社 王书宁许窒黄晓霖译 Stephen Boyd Lieven Vandenbergt原著 2013 年l 月第1 版 下载链接 链接: ...

随机推荐

  1. mysql 配置参数

    mysql JDBC Driver 常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysq ...

  2. Creating custom datatypes using the umbraco usercontrol wrapper

    本篇文章介绍的是基于UmbracoCMS技术搭建的网站所使用的相关技术. 1.      需求 Umbraco CMS的dataType中有richTexhEditor控件,但是它不是太完善,比如没有 ...

  3. Java数据库连接代码集合(转)

    Java数据库连接接口(JDBC)是Java里定义的一套用于数据库连接和操作的API的集合.有不同的数据库厂商提供这套接口的实现类,对于 Java程序员来说,程序员不需要关心数据库的底层的实现,统一的 ...

  4. mybatis04 根据用户名称模糊查询用户信息

    根据用户名称模糊查询用户信息可能返回多条记录. 1.1.1User.xml 编码 如果用%进行模糊查询,#{}表示一个占位符会被翻译为一个?号(SELECT * FROM USER WHERE id= ...

  5. MYSQL参数学习---------------- 张碧池

    http://pottievil.com/category/mysql/mysql%E5%8F%82%E6%95%B0/

  6. windows修改mysql默认字符集不成功

    今天下午弄了半天,终于把mysql的默认字符集弄成了, 按照网上的说法,什么修改mysql下面的my.ini文件,把参数设置成utf-8,我反复操作,结果都是不成功,后来我把mysql5.0卸载了,网 ...

  7. Linux多网卡多IP配置

    echo "210 local100" >> /etc/iproute2/rt_tables echo "220 local200" >> ...

  8. GUI编程笔记(java)09:GUI控制文本框只能输入数字字符案例

    1.首先我们看看我的需求,如下: 控制文本框只能输入数字字符   2.源代码: package cn.itcast_07; import java.awt.FlowLayout; import jav ...

  9. vs2012 aspx 没有设计视图了?

    vs2012的html设计视图没有了!重新安装一次都不行!现在已经通过简单办法来解决了 其实当你打开 HTML设计器 设置时, “启用 HTML设计器"  这里是打勾的!这时千万不要放弃.先 ...

  10. SharePoint Attachement操作代码

    下载文件 如果下载其它类别的文件:  SPSecurity.RunWithElevatedPrivileges(].ToString();                            swi ...