0

我正在使用读取 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

细节:

xP8gAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAU1RHNjI2NTeVACYAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wF/ AAAAAAAAAAAAAAAAAA==

是标题信息,即图像名称

底部下方的文件数据应提供 URL(根据 Lotus Notes 论坛)

任何帮助将不胜感激!

感谢和问候哈西娜

4

3 回答 3

1

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

笔记位图元素

表示专有的 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">

你可以解码....

于 2012-08-20T10:42:53.800 回答
0

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 等已经压缩的数据类型,这是正常情况) - 块被存储而不是压缩。

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

于 2013-06-06T12:10:59.280 回答
0

使用 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

于 2016-09-30T21:07:23.330 回答