【问题标题】:Lotus Notes DXL Notesbitmap to GIFLotus Notes DXL Notesbitmap 转 GIF
【发布时间】:2012-08-17 10:16:30
【问题描述】:

我正在使用读取 Filedata 并将其转换为 base64 字节 [] 并创建 gif 图像的 dxl 逻辑将 Lotus Notes 文档库内联图像转换为 gif 图像。所有示例的转换工作正常,但几天前我们遇到了带有 notesbitmap 标记的示例文件,在阅读了几个论坛之后提到

“对于您的 DXL 导出中的问题图像,它们会导致输出中的元素,还是?如果是后者,我相信它们实际上是图像引用而不是实际图像;notesbitmap 数据不是 gif,但包含 Notes 特定格式的二进制标头和 URL。”

但是我在哪里可以找到特定注释中的 URL,因为当我解码第二个数据时,它给了我垃圾结果而不是 url。

我还尝试在转换前将 ConvertNotesBitmapToGif .net 属性设置为 true。

请在以下链接中找到示例 DXL: http://www.page-monitor.com/Downloads/Exported2.xml

详情:

xP8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU1RHNjI2NTeVACYAAAAAAAAAAAAAAAAAAAAAAAAA0wF/ 啊啊啊啊啊啊啊==

是标题信息,即图像名称

和底部的文件数据 应该给出 URL(根据 Lotus Notes 论坛)

任何帮助将不胜感激!

感谢和问候 哈西娜

【问题讨论】:

    标签: lotus-notes


    【解决方案1】:

    来自http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=%2Fcom.ibm.designer.domino.main.doc%2FH_NOTESBITMAP_ELEMENT_XML.html

    notesbitmap 元素

    表示专有的 Notes 位图图像。存储在 NSF 中的图像 文件由base64内容组成,这是一系列CD (复合数据)表示位图的记录。

    因此,如果你运行

    xP8gAAEAAQAAAAgAAAAAAAAAAAAAAAAAU1RHNjI2NTeVACYAAAAAAAAAAAAAAAAAAAAAAAAA0wF/ AAAAAAAAAAAAAAAAAA==
    

    虽然是 base64 解码器,但您会得到

    `Äÿ ������������������STG62657�&�������������������Ó�������������
    

    您会在 DXL 的下方找到“STG62657”

    <item name="$FILE" summary="true" sign="true" seal="true">
    <object>
    <file hosttype="cdstorage" compression="none" flags="storedindoc" encoding="none" name="STG62657" size="2332">
    

    你可以解码......

    【讨论】:

    • 是的,你是正确的,第一个编码数据给了我文件名,但是通过将 $FILE 数据解码为 base64 并将其写入 gif 文件不会给出我认为格式不同的图像:(,然后我们以原始模式打开文件,我们知道前 72 个字节(即寻找 GIF 关键字)是标题,因此不包括如果我提取数据,我能够获得图像。但现在问题是我几乎没有其他文件其中排除 72 个字节不起作用page-monitor.com/Downloads/ExportedOutputech.xml
    【解决方案2】:

    base64编码数据的第一个字节(0xC4)指的是

    #define SIG_CD_STORAGELINK      (196 | WORDRECORDLENGTH)
    

    在您的情况下,它是一个参考,但它也可以是图像数据本身。所以检查数据前缀总是一个好主意。

    存储链接格式是这样的:

    #define STORAGE_LINK_TYPE_OBJECT        1
    #define STORAGE_LINK_TYPE_NOTE          2
    #define STORAGE_LINK_TYPE_URL_CONVERTED 3
    #define STORAGE_LINK_TYPE_URL_MIME      4
    #define STORAGE_LINK_TYPE_MIME_PART     5
    #define STORAGE_LINK_TYPE_MIME_OBJECT   6
    
    #define STORAGE_LINK_LOAD_DEFERRED  1
    #define STORAGE_LINK_LOAD_ON_DEMAND 2
    
    /*  Structure for externally stored objects */
    typedef struct {
        WSIG Header;
        WORD StorageType;           /* Type of object (Object, Note, URL, etc.) */
        WORD LoadType;              /* How to load (deferred, on demand, etc.) */
        WORD Flags;                 /* Currently not used */
        WORD DataLength;            /* Length of data following */
        WORD Reserved[6];           /* Currently not used */
                                    /* Storage data follows... */
    } CDSTORAGELINK;
    

    图像数据可能“按原样”(但采用 base64 编码)或压缩后出现在文档中。例如,通过 LZ1 压缩,图像数据被组织成块。如果对于特定的块,压缩可以节省空间 - 它被压缩,如果压缩后生成的数据大小增加(对于 GIF 等已经压缩的数据类型,这是正常情况) - 块被存储而不是压缩。

    如果您不了解上述说明,则压缩和未压缩块的偶尔交换可能会令人困惑:正确启动的数据在某些时候会变成垃圾。

    【讨论】:

      【解决方案3】:

      使用 DXL,您可以为包含位图图像的 $File 项提取“文件数据”。文件数据是 Base64 编码的,因此需要对其进行解码以获得二进制数据。

      Bitmap数据的结构如下: 1. WORD - 块数 2.每个块的一个或多个WORD,每个块的长度 3. WORD - TYPE_COMPOSITE 标志

      在标题之后是位图的 CD 记录。通常,CD 记录是: - 形象的 - 位图标题 - 一个或多个位图段 - 位图颜色表 - 位图模式表

      您可以做的是删除直到 TYPE_COMPOSITE 标志的所有字节(但保留 TYPE_COMPOSITE 标志字节)并将二进制数据写入文件。

      然后使用 NotesRichTextItem 的 AppendRTFile 方法可以将图像导入富文本项。

      有关执行此操作的更多详细信息以及解析二进制数据的示例代理可以在我们的网站上找到: https://www.agecom.com.au/support/agecomkb.nsf/0/58cbf10f0ab723c9ca25803e006c7de8

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多