Print spooler api 从spl文件获取副本数

Print spooler api 从spl文件获取副本数,print-spooler-api,Print Spooler Api,我使用下面的代码从spl文件中获取副本数。对于windows 2008 server生成的spl文件,没有SpoolErrorRecordTypes.SRT_DEVMODE Private Sub SkipAHeader(ByVal Header As EMFMetaRecordHeader, ByRef SpoolBinaryReader As BinaryReader) With Header If .nSize <= 0 Then .

我使用下面的代码从spl文件中获取副本数。对于windows 2008 server生成的spl文件,没有SpoolErrorRecordTypes.SRT_DEVMODE

Private Sub SkipAHeader(ByVal Header As EMFMetaRecordHeader, ByRef SpoolBinaryReader As BinaryReader)

    With Header
        If .nSize <= 0 Then
            .nSize = 8
        End If
        If .iType = SpoolerRecordTypes.SRT_JOB_INFO Then
            Dim JobInfo() As Byte
            JobInfo = SpoolBinaryReader.ReadBytes(.nSize)
            SpoolBinaryReader.BaseStream.Seek(.Seek + .nSize, SeekOrigin.Begin)
        ElseIf .iType = SpoolerRecordTypes.SRT_EOF Then
            '\\ End of file reached..do nothing
        ElseIf .iType = SpoolerRecordTypes.SRT_DEVMODE Then
            '\\ Spool job DEVMODE
            Dim _dmThis As New DevMode(SpoolBinaryReader)
            _Copies = _dmThis.Copies
            SpoolBinaryReader.BaseStream.Seek(.Seek + 8 + .nSize, SeekOrigin.Begin)
        ElseIf .iType = SpoolerRecordTypes.SRT_PAGE Or .iType = SpoolerRecordTypes.SRT_EXT_PAGE Then
            '\\ 
            Call ProcessEMFRecords(Header, SpoolBinaryReader)
        ElseIf .iType = SpoolerRecordTypes.SRT_EOPAGE1 Or .iType = SpoolerRecordTypes.SRT_EOPAGE2 Then
            '\\ int plus long
            Dim EOPAGE() As Byte
            EOPAGE = SpoolBinaryReader.ReadBytes(.nSize)
            If .nSize = &H8 Then
                SpoolBinaryReader.BaseStream.Seek(.Seek + .nSize + 8, SeekOrigin.Begin)
            End If
        ElseIf .iType = SpoolerRecordTypes.SRT_UNKNOWN Then
            SpoolBinaryReader.BaseStream.Seek(.Seek + 4, SeekOrigin.Begin)
        Else
            SpoolBinaryReader.BaseStream.Seek(.Seek + .nSize, SeekOrigin.Begin)
        End If
    End With

End Sub
Private子SkipAHeader(ByVal头作为EMFMetaRecordHeader,ByRef spoolbaryreader作为BinaryReader)
带标题

如果是这样的话,我很怀疑那个记录是否丢失了。我有读取spool文件的生产代码,并且已经工作了很多年,包括Win2008 Server。您能告诉我缺少什么记录吗。。。我仍然没有得到副本的数量。我怀疑有任何记录丢失。您是否知道,在多页文档中,除非该页的某些内容发生更改,否则每一页都没有一个
DEVMODE
?(例如,方向)一旦遇到
DEVMODE
,则
DEVMODE
在遇到新页面之前对所有后续页面保持有效。如果您的代码确实正确地处理了这个问题,那么我猜您的文件解析逻辑中有一个bug。但是你没有包含代码,所以我只能猜测。