QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1701|回复: 10

请教nihui关于ocular的pdf标注

[复制链接]
发表于 2009-12-21 16:28:59 | 显示全部楼层 |阅读模式
感觉这里nihui对kde4的开发最熟悉了,所以请教一件事

ocular的pdf标注是基于pdf的文件名的。但是这样文件改名字后,原来的标注就不能用了。
acrobat的标注就是直接保存到pdf文件的,但是ocular的目的是保存到本地,pdf文件不动。
以前记得有过讨论,为什么不基于文件的md5来核对是否加载标注。不知道这么一个简单,实用的功能现在还没实现。
不知nihui知道相关的内幕吗?能否对ocular打开文件,加载标注的代码做一下patch?
谢谢
发表于 2009-12-21 17:54:47 | 显示全部楼层
我不知道相关的内幕。

以下是 google 的内容。。。

简短的回答:
因为 okular 是通用文档查看器,批注功能并不是所有文件类型都支持的,比如 DVI 之类就不行。

长一点的回答:因为 okular 使用的 pdf 后端 poppler 本身不支持批注功能,还有 DRM 限制,使得添加修改文档属性和批注都做不到。

http://bugs.kde.org/show_bug.cgi?id=151614
基于 md5 hash 判别文件的补丁在 bug 报告的第一个附件里。

我还不会做这个补丁...
至少目前不会。
回复

使用道具 举报

发表于 2009-12-21 17:55:47 | 显示全部楼层
基于md5的会不会变慢呢。
回复

使用道具 举报

 楼主| 发表于 2009-12-21 18:38:03 | 显示全部楼层
谢谢。
senjishikong老大出现了,激动....
我个人觉得不会变慢...因为pdf文件一般不大...对小文件做md5速度应该很快吧...
建议magic把这个补丁集成,增加magic的特色....
回复

使用道具 举报

 楼主| 发表于 2009-12-21 18:56:32 | 显示全部楼层
Index: core/document.cpp
===================================================================
--- core/document.cpp        (Revision 85947
+++ core/document.cpp        (Arbeitskopie)
@@ -16,6 +16,8 @@
#include <windows.h>
#endif

+#include <mhash.h>
+
// qt/kde/system includes
#include <QtCore/QtAlgorithms>
#include <QtCore/QDir>
@@ -1367,12 +1369,21 @@
         // determine the related "xml document-info" filename
         d->m_url = url;
         d->m_docFileName = docFile;
-        if ( url.isLocalFile() )
-        {
-        QString fn = url.fileName();
-        document_size = fileReadTest.size();
-        fn = QString::number( document_size ) + '.' + fn + ".xml";
+        MHASH t = mhash_init(MHASH_MD5);
+       
+        if(t == MHASH_FAILED)
+          return false;
+       
+        mhash(t, fileReadTest.readAll().data(), fileReadTest.size());
+        unsigned char hash_bin[16];
+        char hash_asc[33];
+        mhash_deinit(t, hash_bin);
         fileReadTest.close();
+
+        for(int i = 0; i < 16; ++i)
+          sprintf(hash_asc + 2 * i, "%02x", (int)hash_bin);
+
+        QString fn = QString(hash_asc) + ".xml";
         QString newokular = "okular/docdata/" + fn;
         QString newokularfile = KStandardDirs::locateLocal( "data", newokular );
         if ( !QFile::exists( newokularfile ) )
@@ -1387,7 +1398,6 @@
             }
         }
         d->m_xmlFileName = newokularfile;
-        }
     }
     else
     {
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt        (Revision 85947
+++ CMakeLists.txt        (Arbeitskopie)
@@ -100,7 +100,7 @@
     SET(OKULAR_IOKIT "-framework IOKit" CACHE STRING "Apple IOKit framework")
ENDIF(APPLE)

-target_link_libraries(okularcore  ${OKULAR_IOKIT} ${KDE4_KIO_LIBS} ${KDE4_PHONON_LIBRARY} ${KDE4_KJSAPI_LIBRARY} ${MATH_LIB} ${KDE4_THREADWEAVER_LIBRARY} )
+target_link_libraries(okularcore  ${OKULAR_IOKIT} ${KDE4_KIO_LIBS} ${KDE4_PHONON_LIBRARY} ${KDE4_KJSAPI_LIBRARY} ${MATH_LIB} ${KDE4_THREADWEAVER_LIBRARY} mhash )

set_target_properties(okularcore PROPERTIES VERSION 1.1.0 SOVERSION 1 )
回复

使用道具 举报

发表于 2009-12-21 20:44:39 | 显示全部楼层
...............

好歹也把这个改成 qt 的  
回复

使用道具 举报

发表于 2009-12-21 21:09:50 | 显示全部楼层
用 QCryptographicHash 改了下。
速度上的差距只会在打开文件的时候计算一次 md5hash。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2009-12-22 12:24:29 | 显示全部楼层
呵呵,nihui高效率....
能否将这个补丁集成进magic rc2?
回复

使用道具 举报

发表于 2009-12-22 12:35:15 | 显示全部楼层
可以。
回复

使用道具 举报

 楼主| 发表于 2009-12-22 13:46:46 | 显示全部楼层

希望能在rc2的发行注记上看到这个消息,呵呵
回复

使用道具 举报

发表于 2009-12-29 12:22:16 | 显示全部楼层
ok. 将直接包含在 rc2 中。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 02:59 , Processed in 0.039461 second(s), 17 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表