用itextsharp读取pdf的问题...

TimLeaf 2008-11-04 03:30:55
上接帖子:http://topic.csdn.net/u/20081103/15/5120d0ec-a218-49d7-9793-6b5ec5291aa9.html
http://www.fdydo.co.jp/sikyo/yasai.pdf
这个pdf文件里面包含了一个table...我想读取它其中的部分数据...

现在遇到的问题是:
PdfReader reader = new PdfReader(path);
byte[] bs = reader.GetPageContent(1);
我把这个bs写到记事本中得到以下数据:

q
1 g
0 0 595.200 841.800 re f
Q
q
1 g
/GS0 gs
57.120 399.682 296.160 32.280 re f
Q
q
1 g
/GS0 gs
409.800 303.202 45 16.200 re
...

这样的数据不知道该如何编码才能使正常的字符串...
而且最好包含一些格式符...这样可以来选择所需要的列...


...全文
2398 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zlb_long 2011-02-12
  • 打赏
  • 举报
回复
哪个版本可以识别中文啊iTextSharp
TimLeaf 2008-11-06
  • 打赏
  • 举报
回复
PDF为了识别所有的字符,给每一个文字都赋予一个唯一的编码,叫CID。

然后又提供了不同的字体编码与CID的Map文件和CID和Unicode的Map文件。参照Resources\cmap\00_readme.pdf文件,就可以知道这些文件是什么。

一般的PDF文件中文字转换方法应该是从PDF文件解析出来字体名称和文字编码后,从对应的CMap文件中找到该文字编码对应的CID。然后再根据CID从CID和Unicode的Map文件找到对应的Unicode。

PDFBox不能正常转换中文的原因就在于,CMapParser Class没有解析begincidrange(不同的字体编码与CID对照表)一节, 也没有参照CID和Unicode Map文件进行转换,这是一个Bug。

昨天又找到了这样一段...
现在觉得希望确实渺茫啊...
昨天找到了别人做的一个软件...Solid Converter PDF...
可以完美转换..."pdf to word" or "pdf to excel"
继续研究一下...
TimLeaf 2008-11-06
  • 打赏
  • 举报
回复
搞不定...
揭帖...
gogogo 2008-11-05
  • 打赏
  • 举报
回复
你的PDF文件要下载一个10M日文字体,太大了,看不到,你要不给个普通的pdf,要不把你看到的列表里边的内容贴出来大家看看,再和你的程序结果比较下。
TimLeaf 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 JGood 的回复:]
我记得在以前用itestsharp的时候, 如果要使其支持中文, 必须要加一个字体文件
那么在读取pdf的时候, 是不是也要加个字体文件
[/Quote]
呵呵...怎么加呢...前辈指教~
gogogo 2008-11-05
  • 打赏
  • 举报
回复
看了你的帖子,又仔细在网上查找资料研究了一下午,最后得出如下结论(不敢保证一定正确,但是敢保证95%的结论正确)

itext目前只能做到新建一个文挡,往里边添加你想象的内容都可以,添加一些如作者等的原信息或者水印页码到现有文档(其实是读取原文档,然后原样复制一个,然后添加一些信息或者添加新页,或者整页删除),具体内容如文本、图片、表格等是不能进行比较容易的读取和修改的。
目前除了一些收费的sdk,可能xpdf库可以做到文本提取,但是也仅仅是提取文本,好像也不能把格式等信息取出(这方面信息看的少,还不能完全确认)。

LZ读到的信息是正确的,不过是加密的,没有解密看不懂信息的。

提供一个itext原作者的一个文章iText PDF概述,这个文章所在网站,资料也是比较全的,建议多看看。

说明下自己一下午研究后的感觉,其实懂了html就可以理解为什么itext主要侧重生成PDF文档的功能,却不做PDF文档的阅读器的功能,其实PDF文档也有自己的文档格式,如同HTML文件有自己的文档格式一样,只不过这些格式是文本的可读的标记“<>”以内的东西,而PDF文档是二进制的不可读的加密的标记,其实东西类似,所以我们来看我们如果要做个生成HTML文档的程序相对容易(我知道多少HTML标记用多少好了,不需要全部了解,而且只要大脑想象显示的样子就可以了),但是如果解析HTML文档,甚至还要显示HTML文档,就很难了,也就是为什么IE这样的浏览器不是任何人都轻易可以做的,但是懂点HTML知识的人都能生成一个HTML文档,当然有的人做的高级有的做的简单,一个道理,分析PDF文档的标记并显示难度很大的。

结论,LZ还是不要想着修改PDF文档具体内容了,如果加水印页码之类的,倒是没问题,如果非要完成你的要求,估计只有花钱找公司的SDK来开发或者转包了。
qhdrenzhijie 2008-11-05
  • 打赏
  • 举报
回复
不会.路过
bobob 2008-11-05
  • 打赏
  • 举报
回复
很多时候,字串是在stream对象里面的,经过压缩的,直接看不到内容。一般是用flate算法压缩

要提取数据是很麻烦的事情,对于cjk字体,如果没有内嵌的话,都需要借助外部编码表来解析,而不是字体文件
mjjzg 2008-11-05
  • 打赏
  • 举报
回复
路过,顶一下,以表支持
TimLeaf 2008-11-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 gogogo 的回复:]
你的PDF文件要下载一个10M日文字体,太大了,看不到,你要不给个普通的pdf,要不把你看到的列表里边的内容贴出来大家看看,再和你的程序结果比较下。
[/Quote]
对了...你帮忙提供一下那个10M的字体是什么字体吗?
以下是图片:
JGood 2008-11-04
  • 打赏
  • 举报
回复
我记得在以前用itestsharp的时候, 如果要使其支持中文, 必须要加一个字体文件
那么在读取pdf的时候, 是不是也要加个字体文件
  • 打赏
  • 举报
回复
学习

帮顶
qinhl99 2008-11-04
  • 打赏
  • 举报
回复
up
TimLeaf 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xlg888 的回复:]
换成UTF-8的格式估计就可以了吧,愚见!!
[/Quote]

不行...试过了...仿佛是乱码...
TimLeaf 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bobob 的回复:]
()内的是文本
BT是文本开始标志,自己解析吧
[/Quote]
我怎么没在读出来的里面看见这种符号呢...
gongsun 2008-11-04
  • 打赏
  • 举报
回复
晕,默哀下...
xlg888 2008-11-04
  • 打赏
  • 举报
回复
换成UTF-8的格式估计就可以了吧,愚见!!
bobob 2008-11-04
  • 打赏
  • 举报
回复
()内的是文本
BT是文本开始标志,自己解析吧
TimLeaf 2008-11-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tete 的回复:]
可以考虑把他转换成别的格式在处理
[/Quote]
编码问题啊...怎么转换啊?详细说明下...
tete 2008-11-04
  • 打赏
  • 举报
回复
可以考虑把他转换成别的格式在处理

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧