Adobe Capture Document (ACD) File Format

I very often get an ACD file with corrupted pages in them. These pages did not start out corrupted but Reviewer made them corrupt. Opening a corrupt page causes an application error and Reviewer shuts down. Since Reviewer forces the page to be open before deleting it, I had no way to remove these corrupt pages.

In order to write a program myself to do this I had to reverse engineer the ACD file format. This is what I discovered.

Address    Bits  Description
---------  ----  -----------
$00000000  32    Unknown
$00000004  16    Unknown
$00000006  32    Relative offset to last Block
$0000000A  32    Offset to font tables?
$0000000E  16    Number of pages in document
...
$00000018  32    Block 1 unknown
$0000001C  16    Block 1 page number
$0000001E  32    Block 1 relative offset to next block
$00000022  16    Block 1 length of string
$00000024   8    Block 1 array of characters

Block data structure
--------------------
rel+$0000  32    Unknown
rel+$0004  16    Page number
rel+$0006  32    Relative offset to next block
rel+$000A  16    Length of string
rel+$000C   8    Array of characters
...

The data structure seems to start at address $00000018 and consists of a linked list that can be walked. The last data structure contains a null relative offset.

Address $0000000E contains the total number of pages in the document. As  you walk the data structure you encounter blocks that have page numbers equal to zero. These seem to be blocks that are obsolete and replaced with new blocks at the end of the list. Deleted pages contain the value $DEAD for the page number.

To delete a page from the list, (1) decrement the total number of pages, (2) walk the list, (3) decrement the page number on any pages greater than the one being deleted, and (4) write the value $DEAD at the page number the is to be deleted.

If you have any other information about the ACD format, let me know nick@b-e.com. Thanks.