At 01:11 PM 4/12/2003, you wrote:
I am curious if you have deciphered the meaning of the 0x5d BIFF record that
occurs between MSODRAWING records. It does not seem to be an anchor. If you
know, I would appreciate comments.

Here is an example from my enhanced version of BiffViewer.

============================================
Offset 0x1044 (4164)
rectype = 0xec, recsize = 0xdc
-BEGIN DUMP---------------------------------
00000000 0F 00 02 F0 D4 00 00 00 10 00 08 F0 08 00 00 00 ................
00000010 02 00 00 00 01 04 00 00 0F 00 03 F0 BC 00 00 00 ................
00000020 0F 00 04 F0 28 00 00 00 01 00 09 F0 10 00 00 00 ....(...........
00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040 02 00 0A F0 08 00 00 00 00 04 00 00 05 00 00 00 ................
00000050 0F 00 04 F0 84 00 00 00 B2 04 0A F0 08 00 00 00 ................
00000060 01 04 00 00 00 0A 00 00 43 00 0B F0 4A 00 00 00 ........C...J...
00000070 04 41 01 00 00 00 05 C1 32 00 00 00 BF 01 00 00 .A......2.......
00000080 01 00 BF 03 00 00 08 00 44 00 3A 00 5C 00 42 00 ........D.:.\.B.
00000090 41 00 53 00 49 00 53 00 5C 00 47 00 4D 00 4C 00 A.S.I.S.\.G.M.L.
000000A0 5C 00 46 00 4D 00 55 00 5F 00 47 00 30 00 31 00 \.F.M.U._.G.0.1.
000000B0 2E 00 42 00 4D 00 50 00 00 00 00 00 10 F0 12 00 ..B.M.P.........
000000C0 00 00 02 00 00 00 00 00 00 00 00 00 04 00 40 00 [EMAIL PROTECTED]
000000D0 10 00 5A 00 00 00 11 F0 00 00 00 00             ..Z.........
-END DUMP-----------------------------------
recordid = 0xec, size =220
 [MSODRAWING]
Drawing Container n=0
  Drawing Atom v=0 (f008) Drawing ID=1
    Number of Shapes: 2
    Last Assigned Shape ID: 1:1
  Shape Group Container (f003) n=0
    Shape Container n=0
      DrawingShapeGroup Atom v=1 n=0
        Boundary: (0,0)-(0,0)
      Shape v=2 (f00a) Primitive
        ShapeId: 1:0
        Flags: Group, Patriarch
    Shape Container n=0
      Shape v=2 (f00a) Picture Frame
        ShapeId: 1:1
        Flags: Anchored, Has Property
      Property Table Atom (f00b) v=3, 4 properties
        Property Table
          BLIP (260): 1
          BLIP File Name (261): D:\IMAGES\FMU_G01.BMP
          [f]Fill Flags (447): 65536
          Unknown Property (959): 524288
      Client Anchor Atom v=0 (f010) n=0
        Binary Data
          02 00 00 00 00 00 00 00 00 00 04 00 40 00 10 00
          5A 00
[/MSODRAWING]

============================================
Offset 0x1124 (4388)
rectype = 0x5d, recsize = 0x26
-BEGIN DUMP---------------------------------
00000000 15 00 12 00 08 00 01 00 11 60 00 00 00 00 00 07 .........`......
00000010 DC 00 00 00 00 00 07 00 02 00 FF FF 08 00 02 00 ................
00000020 01 00 00 00 00 00                               ......
-END DUMP-----------------------------------
recordid = 0x5d, size =38
[UNKNOWN RECORD:5d]
    .id        = 5d
[/UNKNOWN RECORD]

The Client Anchor Atom above is the anchor which describes how the drawing
is positioned, and is interpreted outside of the Escher object. The 0x5d
record follows immediately, and I haven't got a clue about how to build it.

That an OBJ record. The Excel 97 Developers Guide describes how to create this record.


Also, how does your library deal with the MSODRAWING records, which are
scattered throughout the worksheet? Neither MSODRAWING nor MSODRAWINGGROUP
uses CONTINUE records like the rest of Excel.

This puzzled me for a long time. I ended up aggregating them together before attempting to decode the hierarchy. When serializing them back out again I had to be careful to chop the hierarchy back up at the right spots.


I too had (actually have) a package that does drawings. The drawing part
(contents of MSODRAWING and MSODRAWINGGROUP records) are completely worked
out, except for these unknown BIF records, and the compression of BLIP
structures. I can build the Escher side of the MSODRAWING structure with
various kinds of shapes and properties, including PNG images (uncompressed).

I've implemented BLIP compression and decompression (it's not too hard). What I haven't done is provide a high level API for that bit yet.


However, I also cannot release just yet. I'm not even a committer. And I
thought the committers were about to release something, so I stopped work on
the Excel interface. My main interest was getting it to work with Microsoft
Project.

I'm a committer was planning on releasing this sooner but unfortunately it's paid work and the payment hasn't been finalized yet.


You don't need to be a committer to develop POI. Just submit a patch and if everything is okay one of the committers will load it into CVS for you.

The stuff I have is a little bit tied to Excel but could be made more generic without too much effort.



Reply via email to