2012-08-17 109 views
0

我正在使用讀取Filedata的dxl邏輯將其轉換爲base64字節[]並創建一個gif圖像,將蓮花筆記文檔庫內嵌圖像轉換爲gif圖像。對於所有示例,轉換工作正常,但幾天前我們遇到了帶有notesbitmap標記的示例文件,在閱讀過幾篇論壇提到的Lotus Notes DXL Notesbitmap到GIF

「對於DXL導出中的問題圖像,它們是否會生成元素如果是後者,我相信它們實際上是圖像引用而不是實際圖像; notesbitmap數據不是一個gif,而是包含一個二進制頭和一個Notes特定格式的URL。「

但我在哪裏可以找到特定的筆記中的URL,因爲當我解碼第二個數據時,它會給我垃圾結果而不是url。

我也嘗試在轉換之前將ConvertNotesBitmapToGif .net屬性設置爲true。

請找到下面的鏈接,樣品DXL: http://www.page-monitor.com/Downloads/Exported2.xml

詳情:

xP8gAAEAAQAAAAgAAAAAAAAAAAAAAAAAU1RHNjI2NTeVACYAAAAAAAAAAAAAAAAAAAAAAAAA0wF/ AAAAAAAAAAAAAAAAAA ==

是標題信息即圖像名稱

和FILEDATA在底部下方應該給URL(根據蓮花筆記論壇)

任何幫助將非常感謝!

感謝和問候 Haseena

回答

1

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

notesbitmap元件

表示一個專有的註釋位圖圖像。存儲在NSF 文件中的圖像由base64內容組成,這是一系列表示位圖的CD (複合數據)記錄。

因此,如果您運行

xP8gAAEAAQAAAAgAAAAAAAAAAAAAAAAAU1RHNjI2NTeVACYAAAAAAAAAAAAAAAAAAAAAAAAA0wF/ AAAAAAAAAAAAAAAAAA== 

雖然一個base64解碼器,你會得到

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

而且你會發現 「STG62657」 在DXL

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

你可以解碼...

+0

是的,你是正確的第一編碼數據給我的文件名,但通過解碼$文件數據到base64並將其寫入gif文件不給出一個圖像,我認爲這裏的格式不同:(然後我們在原始模式下打開文件,我們有一個想法,即前72個字節(即尋找GIF關鍵字)頭是如此不包括,如果我提取的數據我能夠得到的圖像。但現在的問題,我有幾個其他文件,其中包含72個字節不起作用http://www.page-monitor.com/Downloads/ExportedOutputech.xml – 2012-08-22 07:32:44

+0

@ Haseena能爲你提供一個代碼示例嗎? – float 2013-11-11 10:42:30

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)是正常的情況),則壓縮會節省空間 - 塊不會被壓縮。

如果您不知道上面解釋過的情況,偶爾交換壓縮和未壓縮的塊可能會引起混淆:在某個點正確啓動的數據會變成垃圾。

0

使用DXL可以爲包含位圖圖像的$ File項目提取'filedata'。 filedata是Base64編碼的,所以需要解碼才能獲得二進制數據。

的位圖數據的結構如下: 1. WORD - 的塊 2.一個或多個字的數目與每個塊 3.字的長度的每個塊 - TYPE_COMPOSITE標誌

繼標題是位圖的CD記錄。通常情況下,CD唱片是: - 圖形 - 位圖信息頭 - 一個或多個位圖段 - 位圖顏色表 - 位圖圖案表

你可以做的是去除所有的TYPE_COMPOSITE標誌字節了(但保持TYPE_COMPOSITE標誌字節)並將二進制數據寫入文件。

然後使用NotesRichTextItem的AppendRTFile方法,您可以將圖像導入富文本項目。

上這樣做的,一個樣本代理分析二進制數據更詳細的信息可以在我們的網站上找到: https://www.agecom.com.au/support/agecomkb.nsf/0/58cbf10f0ab723c9ca25803e006c7de8