-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
请为文档结构探查器为表单和批注等显示其内容流的命令节点 #233
Comments
表单里的指令暂时没有解析。 |
可以考虑在点击节点之后,在下面的那个帮助窗口里面显示解析内容。这样复制问题也解决了 |
Contents不全是可见字符,遇到不可见字符例如00,查看的信息就可能截断。 |
遇到这种情况,可以用“导出”按钮,把内容导出成文件。 |
二进制文件没法直接看,也许可以把00替换成.再输出文本 |
不会考虑替换。 也许后面会为表单等内容解析指令,和页面类似,生成一个“命令”节点。 |
能生成命令节点也不错,只是不知道要等到哪一年。 其实Contents里面的00字节都在Tj中,转成.也不影响查看结构细节。 我目前的处理办法是检查Tj是不是含有不可显示字符,如果有的话,把Tj中的内容按16进制输出,然后做个标记,能看明白就行。 毕竟保存再看实在太慢了。 |
一个被截断,一个乱码,具体看压缩包 另外最新代码缺MuPdfWriterOptions定义,删掉才能编译 |
一个星期都没够就做出来了,还想“哪一年”呢? 请等下个版本,把控制字符替换成\000的八进制表达方式。 |
刚刚上传了一个新的测试版。 |
谢谢更新,辛苦了 002c.pdf 我不太清楚为什么你要采用八进制显示的方式。我是希望对Tj括号内的乱码或者不可见字符串解码要看到原始byte字节的,这样方便后继处理。至于Contents的其它字符,本来就是ASCII可见字符串,也不需要改编码。 那个切换编码功能可能还是需要加一个混合显示模式。只对TJ内的字符串做编码转换,如果Tj里面有不可见字符,则整个Tj括号里面的数据以原始byte方式显示。这样方便查看Contents信息(提供一个ASCII+部分原始字节的混合显示模式)。 另外 /Artifact 里面会有Contents内容,这里面的字符串也会乱码。希望与Tj中的处理方法一致。 Contents里面目前只发现这两种情况乱码,其它是否还会有乱码情况,等以后遇到再告诉你。 这个应用场景:有的时候我们一方面要看编码后的文本是什么,同时还要能切换看到这个文本的原始字节(包括转义用的反斜杠。之前版本测试发现文档结构查看器可以显示原始字节,但是漏掉了反斜杠,估计是按照转义之后的字符串显示的字节数据),这样才能把可见文本与原始数据对应起来,进行下一步处理。 |
/Artifact的Contents 显示乱码,切换编码无效。 |
PDF规范里支持的转义就是8进制。 如果你关心的是Tj里的文本内容,你应该看展开的命令节点,里面已经给你做好了解码的工作,并且给出了参数的十六进制表示形式。 |
内容流不一定都是用ASCII、GBK或统一码编码的。 别想什么用正则表达式直接匹配TJ或Tj内容来筛选文本,那是歪路。遇到CID字库就马上抓瞎。 |
你可能没太理解我的应用场景。 我在写PDFCommander,这是个永久免费的去水印工具,目前此软件真的可以实现万能去除水印。 通过PDFPatcher,我需要看Contents里面的Tj文本,然后80%情况下最终操作是处理这个文本的原始字节(大概10%的PDF水印是字符串,80%以上不是文本字符串,需要处理原始字节)。 希望PDFPatcher能看到Contents的Tj文本(目的是为了定位原始字节),同时又能把文本显示为原始字节(某些pdf查找水印需要用原始字节),毕竟大部分时候操作是针对原始字节进行的。 使用命令节点确实可以看Tj,但是当命令节点极多的时候(几百个),没有办法找到需要的水印节点。 如果PDFPatcher只能看到Contents的文本,不能切换显示Tj里面的原始字节,我就得手工干活了。其实我无所谓,只是大部分软件用户没啥操作基础,找不到文本水印的位置和字节就没法写参数。 PDFCommander不需要识别文本,也不使用正则。所以不在乎是不是CID字库。 |
我知道你想做的工作。 你要做好这个筛选文本的工作,就必须知道怎么解码文本。这是绕不过去的。否则,只会浪费你和我的时间。 |
你答复得比我编辑得都快。 我的意思是软件有分工,你的软件做水印肉眼识别,我的软件做水印处理。 我不能在PDFCommander里面做解码文本,因为没有UI。而且,实际上不需要解码我就能处理水印。 |
如果是给普通用户用的话,那就更不能让他们看 Contents 了。 你应该知道 PDF 不是所有文本都是使用国标或统一码编码的,而且这种文档绝非少数。 |
我见过的PDF中的Contents都是ascii编码的,只是Tj里面或者其它个别地方是乱七八糟的编码。PDFCommander所作的一部分工作就是把这些乱七八糟的文本原始字节找到,然后替换掉,达到去水印的目的。补丁丁是我看到的找文本水印的最方便的软件。 Contents正常应该都是ASCII的吧,如果有其它编码的找找有没有样本让我看看。其实PDFCommander处理的是原始字节,并不在意Contents是什么编码,只要人眼能找到水印对应的原始字节就可以了。 我平时工作很少用pdf,不是专业搞pdf文档解析的。我只是临时写个工具救急。发到吾爱发现用途甚广,很多人需要它,所以才慢慢更新成现在这个万能工具。 |
显然不是。 |
更甚者如下。 |
没太看懂你说的不是ASCII是啥意思。我看16进制 71 0A 31 36 2E 这就是ASCII啊 |
我上传的两个示例文件是针对这句话而言的:“你应该知道 PDF 不是所有文本都是使用国标或统一码编码的,而且这种文档绝非少数。” |
你说的对,现在PDFCommander缺乏文本指令参数的解码功能,导致查找文本水印相对困难。因为没有UI,所以我的软件不打算写文本解码功能。我觉得补丁丁可以弥补这个问题,给菜鸟们谋个福利。 谢谢你的卓越工作 |
让我花点时间想想怎样让普通用户可以相对轻松地指定要删除的内容。 |
去水印的需求在 #209 ,因内容与本帖提到的需求有重合之处,可到该处继续讨论。 |
仔细想了想,没有混合模式输出也没啥。把Contents导出之后,在文本编辑器里面把乱码转成16进制字节就行了。 |
0004.zip
我用pdfbox的debugger可以看到Fm0中的Tj内容,补丁丁找不到
另外我发现文档结构查看器有的内容可以复制,有的不行。例如 Tj 中的数据无法复制
The text was updated successfully, but these errors were encountered: