代码之家  ›  专栏  ›  技术社区  ›  Jaroslav Záruba

如何将扫描的文档与其文本内容链接起来以使其可搜索?

  •  1
  • Jaroslav Záruba  · 技术社区  · 14 年前

    我有PDF文档,包含多个扫描文档的图像/页面。他们的(OCR生成的)文本内容来自不同的XML文件。

    是否可以以某种方式使用/链接XML中的文本内容到我的PDF文件?(理想情况下,存储库中不会留下任何其他文件来迷惑不知情的用户。)

    有人建议将包含文本内容的流传递给我的PDF文件的cm:content属性。我在这里有点迷路了,因为我的意思是,要么我提供了一个引用,要么我又分配了一个巨大的字符串。第一种是文本内容必须作为单独的文档保存在某个地方。后面的听起来我又会达到65k的极限。
    另外,我认为设置cm:content可能会删除PDF内容本身。我需要PDF二进制数据保持不变。

    在这里 suggestion is being discussed . 我现在无论如何都在尝试。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jaroslav Záruba    12 年前

    苏,其实很简单。。。需要做的是在您的文档上定义一个类型为“d:content”的属性;我是通过一个方面来实现的。。。

    model.xml文件:

    <aspects>
        <aspect name="mm:my_aspect">
    ...
                <property name="mm:myTextContentProperty">
                    <type>d:content</type>
                </property>
            </properties>
        </aspect>
    </aspects>
    

    然后,当我在存储库中同时拥有PDF和它的文本表示时,我通过添加方面和填充属性来链接这两者。。。

    getNodeService().addAspect(pdfNodeRef, myAspect, null);
    getNodeService().setProperty(pdfNodeRef, MyModel.MY_TEXT_CONTENT_PROPERTY, new ContentData("store://....bin", "text/plain", size, "UTF-8"));
    

    "@\\{http\\://mymodel.ns/content/1.0\\}myTextContentProperty:\"" + string + "\""
    "TEXT:\"" + string + "\""
    

    后者也暗示 here
    但有一个问题:搜索会吐出PDF文档以及使用属性链接的文档。所以现在我需要在搜索结果中隐藏稍后的内容。。。

    希望这能为其他户外新手节省一些时间。:)

        2
  •  0
  •   Jaroslav Záruba    14 年前

    另一种实现我需要的方法是使用contentService设置我的文本内容属性。。。

    ContentWriter writer = getContentService().getWriter(pdfNodeRef, MyModel.MY_TEXT_CONTENT_PROPERTY, true);
    writer.setMimetype("text/plain");
    writer.setEncoding("UTF-8");
    writer.putContent(stringFromXmlDescription); // the source XML gets thrown away
    

    之后 已设置mimetype和编码。否则内容/属性不可搜索。)