itextsharp 获取文本_在C#中使用iTextSharp读取pdf内容
小编典典
在.Net中,一旦有了一个字符串, 便有了一个字符串 ,并且它 始终 是Unicode
。实际的内存实现是UTF-16,但这并不重要。永远不要将字符串分解为字节,并尝试将其重新解释为不同的编码,然后将其拍回为字符串,因为这样做没有意义,并且几乎总是会失败。
您的问题是这一行:
currentText = Encoding.UTF8.GetString(Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.UTF8.GetBytes(currentText)));
我将其分成几行来说明:
byte[] bytes = Encoding.UTF8.GetBytes("ی"); //bytes now holds 0xDB8C
byte[] converted = Encoding.Convert(Encoding.Default, Encoding.UTF8, bytes);//converted now holds 0xC39BC592
string final = Encoding.UTF8.GetString(converted);//final now holds ی
该代码将混淆127 ASCII屏障以上的所有内容。删除重新编码行,您应该会很好。
旁注,很可能任何创建字符串的操作都会错误地进行,实际上并不太常见。但是您需要先解决该问题, 然后
再string在byte级别上解决该问题。
编辑
该代码应与上面的代码完全相同,只是应删除一行。另外,无论您使用什么显示文本,请确保其支持Unicode。另外,如@kuujinbo所说,请确保您使用的是iTextSharp的最新版本。我用5.2.0.0进行了测试。
public string ReadPdfFile(string fileName) {
StringBuilder text = new StringBuilder();
if (File.Exists(fileName)) {
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++) {
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
text.Append(currentText);
}
pdfReader.Close();
}
return text.ToString();
}
编辑2
上面的代码解决了编码问题,但没有解决字符串本身的顺序。不幸的是,这个问题似乎是在PDF级别本身上。
因此,在这种从右到左的书写系统中显示文本需要分别定位每个字形(这既繁琐又昂贵),或者用显示字符串表示文本(请参见9.2,“字体的组织和使用”),其字符代码在相反的顺序。
PDF 2008 Spec-14.8.2.3.3-逆序显示字符串
当对上述字符串进行重新排序时,如果我正确理解规范,则内容应使用“已标记内容”部分BMC。但是,我查看并生成的一些样本PDF似乎并没有真正做到这一点。在这方面,我绝对可能是错误的,因为这不是我的专长,因此您必须反复研究。
2020-05-19
itextsharp 获取文本_在C#中使用iTextSharp读取pdf内容相关推荐
- itextsharp 获取文本_使用itextsharp从签名图像中获取Layer2文本(签名描述)
虽然Bruno以包含"第2层"的PDF开头解决了这个问题,但请允许我先说明使用这些"签名层"在PDF签名外观是不 PDF规范,规范实际上根本不知道这些层!因此, ...
- itextsharp 获取文本_利用iTextSharp提取PDF文件中的文本内容
最近测试中需要对比两个PDF文件的内容,当然只是文字没有图表的,但是没有现成的工具可用.于是我的想法是先把PDF转换为Text,然后再对比Text的内容.现在问题的关键变成了如何提取PDF中的文本,在 ...
- Java 下载 Excel模板时,报修正 Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?如果信任此工作簿的来源,请点击是
代码如下: /*** 下载导入应用模板** @return*/@ResponseBody@RequestMapping(method = RequestMethod.GET)public Respon ...
- Flexcell 导出Excel 打不开,提示Excel在“XXXX.xls” 中发现不可读取的内容。是否要回复此工作薄的内容?如果信任此工作薄的来源,请点击“是”。...
我们在项目中应用Flexcell 导出Excel时报错,提示Excel在"XXXX.xls" 中发现不可读取的内容.是否要回复此工作薄的内容?如果信任此工作薄的来源,请点击&quo ...
- webmagic 获取文本_学习使用Java的webmagic框架爬取网页内容
(一)使用前的配置: 2,(1)添加依赖: us.codecraft webmagic-core 0.7.3 us.codecraft webmagic-extension 0.7.3 us.code ...
- python提取ppt文本_提取PPT中的文字(包括图片中的文字)
python是一门很强大的语言,因为有着丰富的第三方库,所以可以说Python是无所不能的. 很多人都知道,Python可以操作Excel,PDF·还有PPT,这篇文章就围绕Python提取PPT中的 ...
- selenium查找文本_在Selenium中查找具有链接文本和部分链接文本的元素
selenium查找文本 Selenium中CSS定位器是一个基本概念,每个旨在使用Selenium执行自动化测试的测试人员都应该意识到这一点. 在Selenium中充分使用CSS定位器可以帮助您以更 ...
- python中用于绘制各种图形、标注文本_在python中的图形上绘制常量文本-问答-阿里云开发者社区-阿里云...
我确定我可能在问一个愚蠢的问题,但找不到与我相同的问题. 我的朋友帮我写了一段代码,分析给出的数据并用趋势线将其绘制出来,我想在图的右上方添加一行文本,并在图上打印出其他内容,以表明它是什么文件(在代 ...
- python读取pdf文件_深入学习python解析并读取PDF文件内容的方法
这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...
最新文章
- LeetCode简单题之仅执行一次字符串交换能否使两个字符串相等
- Hadoop集群的基本操作(三:HBase的基本操作)
- .NET Compact Framework下SQL CE的使用
- hadoop定位文件读取
- 神经网络的输出有方向吗?
- Tomcat——目录结构
- 微信小程序websocket聊天室
- PHP-Redis扩展安装 error: ext/standard/php_smart_str.h: No such file or directory
- linux下gate版本管理,Linux安装使用GoldenGate
- (JAVA)String类之比较方法(2)
- python爬取百度贴吧中的所有邮箱_python写的百度贴吧邮箱采集(带界面)
- 微型计算机应用领域思维导图,思维导图作用和应用领域有哪些
- 部分PTA自测题答案(仅参考)
- matlab 齐次线性方程组,利用matlab求解RE中出现的齐次线性方程组
- c语言中数组strcat什么意思,c语言中的strcat是什么意思?
- tc command gives Error: Specified qdisc not found on RHEL 8
- JWT的数据格式详解
- Linux: vi 编辑器
- 已解决:Component should be written as a pure functioneslintreact/prefer-stateless-fun报错
- lrd热加载方式启动本地web服务(我用于从github把别人服务器代码拉倒本地去搭建自己的网络服务)