//public DeviceMode Devmode; public EMRI_DEVMODERecord(DataRecord dataRecord) : base(dataRecord) { }
public PageContentRecord(DataRecord dataRecord) : base(dataRecord) { }
public PageOffsetRecord(DataRecord dataRecord) : base(dataRecord) { }
public DataRecord(DataRecord dataRecord) { this.ulID = dataRecord.ulID; this.cjSize = dataRecord.cjSize; }
} // ParseHeaderRecord private void ParseDataRecords() { long lSplLen = this.binaryReader.BaseStream.Length; while (true) { long pos = this.binaryReader.BaseStream.Position; if (pos >= lSplLen) { break; } uint ulID = this.binaryReader.ReadUInt32(); if (ulID == 0x00000000) { //Don't know why. Sometimes 0x0 is too early. //So we need read it again. ulID = this.binaryReader.ReadUInt32(); } var dataRecord = new DataRecord(); dataRecord.ulID = ulID; dataRecord.cjSize = this.binaryReader.ReadUInt32(); if (dataRecord.cjSize == 0) { break; // 垃圾数据. } if (!Enum.IsDefined(typeof(RecordType), dataRecord.ulID)) { this.binaryReader.ReadBytes((int)dataRecord.cjSize); // Read unknown data block continue; } switch (dataRecord.ulID) { case (uint)RecordType.EMRI_METAFILE: { var pageContentRecord = new PageContentRecord(dataRecord); pageContentRecord.EmfMetaFile = this.binaryReader.ReadBytes((int)pageContentRecord.cjSize); SaveImg(pageContentRecord); } break; case (uint)RecordType.EMRI_ENGINE_FONT: break; case (uint)RecordType.EMRI_DEVMODE: { var devmodeRecord = new EMRI_DEVMODERecord(dataRecord); byte[] buffer = this.binaryReader.ReadBytes((int)dataRecord.cjSize); //this.deviceMode = new DeviceMode(new DEVMODE(buffer)); //devmodeRecord.Devmode = this.deviceMode; //dataRecords.Add(devmodeRecord); //SaveImg(devmodeRecord); } break; case (uint)RecordType.EMRI_METAFILE_DATA: { var pageContentRecord = new PageContentRecord(dataRecord); pageContentRecord.EmfMetaFile = this.binaryReader.ReadBytes((int)dataRecord.cjSize); //dataRecords.Add(pageContentRecord); SaveImg(pageContentRecord); } break; case (uint)RecordType.EMRI_METAFILE_EXT: case (uint)RecordType.EMRI_BW_METAFILE_EXT: { var pageOffsetRecord = new PageOffsetRecord(dataRecord); var offsets = new ulong[pageOffsetRecord.cjSize / sizeof(ulong)]; for (int i = 0; i < offsets.Length; i++) { offsets[i] = this.binaryReader.ReadUInt64(); } //dataRecords.Add(pageOffsetRecord); SaveImg(pageOffsetRecord); } break; case (uint)RecordType.EMRI_TYPE1_FONT: break; case (uint)RecordType.EMRI_PRESTARTPAGE: break; case (uint)RecordType.EMRI_DESIGNVECTOR: break; case (uint)RecordType.EMRI_SUBSET_FONT: break; case (uint)RecordType.EMRI_DELTA_FONT: break; case (uint)RecordType.EMRI_FORM_METAFILE: break; case (uint)RecordType.EMRI_BW_METAFILE: break; case (uint)RecordType.EMRI_BW_FORM_METAFILE: break; case (uint)RecordType.EMRI_ENGINE_FONT_EXT: break; case (uint)RecordType.EMRI_TYPE1_FONT_EXT: break; case (uint)RecordType.EMRI_DESIGNVECTOR_EXT: break; case (uint)RecordType.EMRI_SUBSET_FONT_EXT: break; case (uint)RecordType.EMRI_DELTA_FONT_EXT: break; case (uint)RecordType.EMRI_PS_JOB_DATA: break; case (uint)RecordType.EMRI_EMBED_FONT_EXT: break; } // switch } // while } // ParseDataRecords