65.9K
CodeProject 正在变化。 阅读更多。
Home

使用LEADTOOLS PDF文件功能增强Google Drive搜索

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013 年 10 月 1 日

CPOL

4分钟阅读

viewsIcon

29770

downloadIcon

122

在接下来的白皮书中,我们将展示如何读取和写入 PDF 关键字元数据,更新 Google Drive 上的文件,与本地 Google Drive 数据库进行交互,以及所有这些操作都可以在 Windows Explorer 的单个右键单击上下文菜单中完成。

引言

Google Drive 等云服务因其安全、可靠且便捷的存储和备份文档、图片、音乐和其他文件的能力,每年的受欢迎程度都在不断增长。对于云端拥有大量数据的用户来说,再次搜索和查找文件可能会变得很麻烦。大多数搜索功能范围有限,仅利用文件名,或者对于 PDF 等文件格式,仅利用文件本身的内容。因此,可能需要某种程度的自定义或增强才能充分利用您的 Google Drive 云存储。

搜索 PDF 可能比搜索 MP3 或 JPEG 容易,但 Google Drive 在此格式上也存在一些限制。例如,假设您扫描发票或银行对账单并将其保存为 PDF。即使您拥有可以提取文本的扫描仪或软件(通过 OCR),您仍然可能没有可靠的方法来搜索该文档。文本可能包含公司名称和日期的词语,但可能缺少您在存档和查找文档时有用的关键字,例如“银行”、“保险”、“PayPal 付款”等。

这正是您在保存 PDF 文件时希望包含在 PDF 文件关键字元数据中的信息类型,但 Google Drive 不会在其搜索索引中使用此元数据。因此,您可以使用 LEADTOOLS PDF SDK 读取和编辑文件元数据,然后更新 Google Drive 中文件的 IndexableTextData 属性。在接下来的白皮书中,我们将展示如何读取和写入 PDF 关键字元数据,更新 Google Drive 上的文件,与本地 Google Drive 数据库进行交互,以及所有这些操作都可以在 Windows Explorer 的单个右键单击上下文菜单中完成。

创建右键单击上下文菜单

当使用像 Google Drive 这样带有桌面应用程序以自动同步计算机上文件与在线云驱动器的服务时,一个功能齐全的应用程序不是必需的。更实用的方法是添加一个上下文菜单项,当您右键单击 PDF 文件时出现。在命令添加到注册表后,您可以右键单击任何 PDF 文件并选择“更新文件关键字”,这将把文件名作为参数传递给应用程序。

using (RegistryKey pdfTypeRegKey =
Registry.ClassesRoot.OpenSubKey(".pdf"))
{
   // Create path to registry location
   string regPath = string.Format(@"{0}\shell\{1}",
      (String)pdfTypeRegKey.GetValue(null), "UpdateFileKeywords");
 
   // Add context menu to the registry
   using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(regPath))
   {
      key.SetValue(null, "Update File Keywords");
   }
 
   // Add command that is invoked to the registry
   string menuCommand = string.Format("\"{0}\" \"%L\"", 
       Application.ExecutablePath);
   using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(
       string.Format(@"{0}\command", regPath)))
   {
      key.SetValue(null, menuCommand);
   }
}

使用 LEADTOOLS 更新 PDF 文件关键字元数据

现在我们的应用程序基础已经打好,我们必须更新 PDF 文件中的关键字。LEADTOOLS 在一个对程序员友好的 SDK 中提供了全面的 PDF 读取、写入和编辑功能,允许直接修改 PDF 文件属性、可搜索文本、书签等。当我们的应用程序从右键菜单 shell 命令加载时,它将使用 LEADTOOLS 的 PDFFile 对象来检索关键字并在文本框中显示以供编辑。

PDFFile _document = new PDFFile(fileName, password);
_document.Load();
_txtKeywords.Text = _document.DocumentProperties.Keywords;

保存同样简单,只需要几行代码。正如您所见,PDF 的文档属性已使用新的关键字正确更新。

_document.DocumentProperties.Keywords = _txtKeywords.Text;
_document.SetDocumentProperties(fileName);

更新 Google Drive

最后,还需要采取一些额外的步骤来完成我们对 Google Drive PDF 搜索的增强。PDF 文件中的关键字和其他元数据属性是有用且强大的功能,但 Google Drive 在其搜索算法中并未对其加以利用。然而,Google Drive 中的每个文件都有 IndexableTextData 属性,在使用 Google Drive API 时可以对其进行修改。

当使用 Google Drive 的 Windows 桌面同步应用程序时,它会使用本地 SQL 数据库来跟踪本地文件及其在线信息。为了完成此操作,我们必须获取与我们刚刚更新的本地文件匹配的 fileId。根据您的 Google Drive 文件夹的组织方式,您可能需要额外的查询来递归地在子文件夹中查找文件。但是,一旦您获得了与通过右键单击菜单命令传递的 PDF 文件名匹配的 inode_number,您就可以从数据库中获取 fileId 并调用 Google Drive Web 服务。

// Get resource_id for the target file (formatted
"type:resource_id")
sqLitecmd.CommandText = "SELECT resource_id FROM mapping
where inode_number='" + fileInodeNumber + "'";
 
reader = sqLitecmd.ExecuteReader();
reader.Read();
 
String fileResourceId =
reader["resource_id"].ToString().Split(':')[1];
reader.Close();
 
File file = googleDriveHelper.GetFile(fileResourceId);
file.IndexableText = new File.IndexableTextData();
file.IndexableText.Text = _document.DocumentProperties.Keywords;
googleDriveHelper.UpdateFileMetadata(file);

现在,您可以在 Google Drive 中搜索自定义 PDF 关键字,从而增加了 Google Drive 免费云存储服务已经令人难以置信的价值。

下载完整的 PDF 示例

您可以下载包含上述功能的完整功能演示。要运行此示例,您需要以下条件:

支持

需要帮助才能运行此示例吗?联系我们的支持团队以获得免费技术支持!有关定价或许可问题,您可以联系我们的销售团队(sales@leadtools.com)或致电 704-332-5532。

© . All rights reserved.