SPL 文件解析

进来有对于Windows 打印文档内容进行截取的需求,深入研究了相关方案。可以遵循以下方法来实现。

在这里插入图片描述
如上图需要把画框区域的复选框打钩,这样就可以在打印过程中就可以在目录 C:\Windows\System32\spool\PRINTERS 下保留打印临时文件,每次打印保留两个文件分别以.SHD 和 .SPL 结尾。 .SHD 为打印控制文件,.SPL 存储打印内容。我们可以通过解析 SPL文件的方式来获得打印内容。

SPL文件根据操作系统的版本不同解析方法有差异。

Win10 系统

Win10 系统下其实是一个打包的 zip 压缩文件,可以先将文件后缀名改为.zip 后用解压缩工具打开,如下图:
在这里插入图片描述
我们需要重点关注Documents 目录,在Documents\1\Pages 路径下保存着打印文档的元数据信息,如下图:
在这里插入图片描述

1.fpage 内容如下:

<FixedPage Width="793.76" Height="1122.56" xmlns="http://schemas.openxps.org/oxps/v1.0" xml:lang="und">
	<!-- Microsoft XPS Document Converter (MXDC) Generated! Version: 0.3.9600.16384 -->
	<Glyphs Fill="#ff000000" FontUri="../Resources/Fonts/75F130F1-D7EC-4D18-84BB-D0114A477EE5.odttf" FontRenderingEmSize="16.0006" StyleSimulations="None" OriginX="332.8" OriginY="108.32" Indices="7136;5418;7095;7516;7095;7827;17;87;91;87" UnicodeString="新建文本文档.txt" />
	<Glyphs Fill="#ff000000" FontUri="../Resources/Fonts/75F130F1-D7EC-4D18-84BB-D0114A477EE5.odttf" FontRenderingEmSize="16.0006" StyleSimulations="None" OriginX="75.68" OriginY="126.56" Indices="1424;7263;1114;3927;3455;15611" UnicodeString="你是个大坏蛋" />
	<Glyphs Fill="#ff000000" FontUri="../Resources/Fonts/75F130F1-D7EC-4D18-84BB-D0114A477EE5.odttf" FontRenderingEmSize="16.0006" StyleSimulations="None" OriginX="368.8" OriginY="1023.52" Indices="12636;3;20;3;20133" UnicodeString="第 1 页" />
</FixedPage>

通过读取该文件可以得到文件的元数据信息。

Win 7 及 xp 操作系统

SPL文件在Win7 及 xp 系统中是一种标准的文件格式,具体可以参考 SPL 格式文档下载. 该文档格式为二进制格式,格式内容可以用下图表示:
在这里插入图片描述
简单来说如果打印内容为两页文档,可以用下图表示:
在这里插入图片描述
如下为SPL解析示例代码:

using namespace std;

long ReadLongFromFile(FILE * pFile);
void ReadOneSpace(char* name, FILE * pFile);
long ReadOneSpaceReturn(char* name, FILE * pFile);
void ReadOneRecord(int recordID, FILE * pFile);
void WriteBuffer(wchar_t buffer[2000]);
void ReadOneEMR(FILE * pFile);
void ReadOneSpaceFromBuffer(char* name, wchar_t * pFile, int pointer);
int main()
{
	setlocale(LC_ALL, "");

	const char* pszFileName = "D:\\tmp\\00004.SPL";

	FILE * pFile;
	pFile = fopen(pszFileName, "r");
	if (pFile != NULL)
	{
		//Read all content.
		for (size_t i = 1; i < 10000; i++)
		{
			int c = fgetc(pFile);
			if (c==EOF)
			{
				break;
			}
			printf("%02X ", c);
			if (i % 8 == 0)
			{
				if (i % 16 == 0)
				{
					cout << endl;
					continue;
				}
				printf(" ");
			}
		}
		//Read structure.
		fseek(pFile,0,SEEK_SET);
		cout << endl;
		ReadOneSpace(const_cast<char*>("dwVersion"),pFile);
		long position= ReadOneSpaceReturn(const_cast<char*>("cjSize"), pFile);
		ReadOneSpace(const_cast<char*>("dpszDocName"), pFile);
		ReadOneSpace(const_cast<char*>("dpszOutput"), pFile);
		wchar_t buffer[2000] = { };
		wchar_t wTmp;
		for (size_t i = 0; ; i++)
		{
			fread(&wTmp, sizeof(wTmp), 1, pFile);
			if (!wTmp)
				break;
			memcpy((wchar_t*)&buffer[i], (wchar_t*)&wTmp, sizeof(wTmp));
		}
		wprintf(L"%s",buffer);
		//EMRI_METAFILE_DATA 
		fseek(pFile, position, 0);
		cout << endl;
		ReadOneEMR(pFile);
		ReadOneSpace(const_cast<char*>("tail1"), pFile);
		ReadOneSpace(const_cast<char*>("tail2"), pFile);
		ReadOneEMR(pFile);
		ReadOneSpace(const_cast<char*>("tail1"), pFile);
		ReadOneSpace(const_cast<char*>("tail2"), pFile);
		fclose(pFile);
	}
	int a;
	cin >> a;
	return 0;
}

void ReadOneEMR(FILE * pFile)
{
	wchar_t wTmp;
	ReadOneSpace(const_cast<char*>("ulID"), pFile);
	long cjSize = ReadOneSpaceReturn(const_cast<char*>("cjSize"), pFile);
	//EMR_HEADER
	ReadOneSpace(const_cast<char*>("Type"), pFile);
	ReadOneSpace(const_cast<char*>("Size"), pFile);
	ReadOneSpace(const_cast<char*>("Bounds1"), pFile);
	ReadOneSpace(const_cast<char*>("Bounds2"), pFile);
	ReadOneSpace(const_cast<char*>("Bounds3"), pFile);
	ReadOneSpace(const_cast<char*>("Bounds4"), pFile);
	ReadOneSpace(const_cast<char*>("Frame1"), pFile);
	ReadOneSpace(const_cast<char*>("Frame2"), pFile);
	ReadOneSpace(const_cast<char*>("Frame3"), pFile);
	ReadOneSpace(const_cast<char*>("Frame4"), pFile);
	ReadOneSpace(const_cast<char*>("Signature"), pFile);
	ReadOneSpace(const_cast<char*>("Version"), pFile);
	ReadOneSpace(const_cast<char*>("Bytes"), pFile);
	long recordCount = ReadOneSpaceReturn(const_cast<char*>("Records"), pFile);
	ReadOneSpace(const_cast<char*>("HandlesReserved"), pFile);
	ReadOneSpace(const_cast<char*>("nDescription"), pFile);
	ReadOneSpace(const_cast<char*>("offDescription"), pFile);
	ReadOneSpace(const_cast<char*>("nPalEntries"), pFile);

	ReadOneSpace(const_cast<char*>("Device1"), pFile);
	ReadOneSpace(const_cast<char*>("Device2"), pFile);
	ReadOneSpace(const_cast<char*>("Millimeters1"), pFile);
	ReadOneSpace(const_cast<char*>("Millimeters2"), pFile);
	ReadOneSpace(const_cast<char*>("cbPixelFormat"), pFile);
	ReadOneSpace(const_cast<char*>("offPixelFormat"), pFile);
	ReadOneSpace(const_cast<char*>("bOpenGL"), pFile);
	ReadOneSpace(const_cast<char*>("MicrometersX"), pFile);
	ReadOneSpace(const_cast<char*>("MicrometersY"), pFile);
	wchar_t buffer2[2000] = { };
	for (size_t i = 0; i < 12; i++)
	{
		fread(&wTmp, sizeof(wTmp), 1, pFile);
		memcpy((wchar_t*)&buffer2[i], (wchar_t*)&wTmp, sizeof(wTmp));
	}
	wprintf(L"EmfDescription:%s", buffer2);


	for (size_t i = 0; i < recordCount; i++)
	{
		ReadOneRecord(i, pFile);
	}
}

void ReadOneRecord(int recordID,FILE * pFile)
{
	cout << endl;
	printf("This is record%d",recordID);
	cout << endl;
	long type = ReadOneSpaceReturn(const_cast<char*>("Type"), pFile);
	
	long size = ReadOneSpaceReturn(const_cast<char*>("Size"), pFile);
	wchar_t buffer[2000] = { };
	wchar_t wTmp;
	for (size_t i = 0;i< (size -8)/2; i++)
	{
		fread(&wTmp, sizeof(wTmp), 1, pFile);
		memcpy((wchar_t*)&buffer[i], (wchar_t*)&wTmp, sizeof(wTmp));
	}
    //wprintf(L"RecordContent:%s", recordID, buffer);
	WriteBuffer(buffer);
	if (type == 0x00000054)
	{
		cout << endl;
		cout << "This is a content record." << endl;
		ReadOneSpaceFromBuffer(const_cast<char*>("Bounds1"), buffer, 0);
		ReadOneSpaceFromBuffer(const_cast<char*>("Bounds2"), buffer, 2);
		ReadOneSpaceFromBuffer(const_cast<char*>("Bounds3"), buffer, 4);
		ReadOneSpaceFromBuffer(const_cast<char*>("Bounds4"), buffer, 6);

		ReadOneSpaceFromBuffer(const_cast<char*>("iGraphicsMode"), buffer, 8);
		ReadOneSpaceFromBuffer(const_cast<char*>("exScale"), buffer, 10);
		ReadOneSpaceFromBuffer(const_cast<char*>("eyScale"), buffer, 12);
		ReadOneSpaceFromBuffer(const_cast<char*>("Reference1"), buffer, 14);
		ReadOneSpaceFromBuffer(const_cast<char*>("Reference2"), buffer, 16);
		ReadOneSpaceFromBuffer(const_cast<char*>("Chars"), buffer, 18);
		ReadOneSpaceFromBuffer(const_cast<char*>("offString"), buffer, 20);
		ReadOneSpaceFromBuffer(const_cast<char*>("Options"), buffer, 22);
		ReadOneSpaceFromBuffer(const_cast<char*>("Rectangle1"), buffer, 24);
		ReadOneSpaceFromBuffer(const_cast<char*>("Rectangle2"), buffer, 26);
		ReadOneSpaceFromBuffer(const_cast<char*>("Rectangle3"), buffer, 28);
		ReadOneSpaceFromBuffer(const_cast<char*>("Rectangle4"), buffer, 30);
		ReadOneSpaceFromBuffer(const_cast<char*>("offDx"), buffer, 32);

		wchar_t bufferTmp[2000] = { };
		int pointer = 34;
		for (size_t i = 0; ; i++)
		{
			if (!buffer[pointer])
			{
				break;
			}
			memcpy((wchar_t*)&bufferTmp[i], (wchar_t*)&buffer[pointer], sizeof(wTmp));
			pointer++;
		}

		wprintf(L"Content:%s", bufferTmp);
	}
}

void WriteBuffer(wchar_t buffer[2000])
{
	cout << "RecordContent:";
	int lastZero = 0;
	for (size_t i = 0; i < 2000; i++)
	{
		if (buffer[i])
		{
			lastZero = i;
		}
	}
	if (lastZero >0)
	{
		for (size_t i = 0; i < lastZero; i++)
		{
			wprintf(L"%s",&buffer[i]);
		}
	}
	cout << endl;
}

void ReadOneSpace(char* name, FILE * pFile)
{
	long result = ReadLongFromFile(pFile);
	
	cout <<name<<":";
	printf("%08X", result);
	cout << "-";
	long fPointer = ftell(pFile)-1;
	printf("%08X", fPointer);
	cout << endl;
}

void ReadOneSpaceFromBuffer(char* name, wchar_t * pFile,int pointer)
{
	long result = pFile[pointer];

	cout << name << ":";
	printf("%08X", result);
	cout << endl;
}

long ReadOneSpaceReturn(char* name, FILE * pFile)
{
	long result = ReadLongFromFile(pFile);

	cout << name << ":";
	printf("%08X", result);
	cout << "-";
	long fPointer = ftell(pFile)-1;
	printf("%08X", fPointer);
	cout << endl;
	return result;
}

long ReadLongFromFile(FILE * pFile)
{
	long result=0;
	int size = fread(&result,4,1,pFile);
	return result;
}

结果:

00 00 01 00 3C 00 00 00  10 00 00 00 2A 00 00 00
B0 65 FA 5E 87 65 2C 67  87 65 63 68 20 00 2D 00
20 00 B0 8B 8B 4E 2C 67  00 00 70 00 64 00 66 00
63 00 6D 00 6F 00 6E 00  00 00 00 00 0C 00 00 00
9C 06 00 00 01 00 00 00  84 00 00 00 D8 01 00 00
4F 02 00 00 DA 0A 00 00  0B 19 00 00 00 00 00 00
00 00 00 00 08 52 00 00  04 74 00 00 20 45 4D 46
00 00 01 00 9C 06 00 00  20 00 00 00 02 00 00 00
0C 00 00 00 6C 00 00 00  00 00 00 00 5E 13 00 00
68 1B 00 00 D2 00 00 00  29 01 00 00 00 00 00 00
00 00 00 00 00 00 00 00  EF 33 03 00 28 88 04 00
50 00 72 00 69 00 6E 00  74 00 20 00 74 00 65 00
73 00 74 00 00 00 00 00  25 00 00 00 0C 00 00 00
07 00 00 80 25 00 00 00  0C 00 00 00 00 00 00 80
52 00 00 00 70 01 00 00  01 00 00 00 9C FF FF FF
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  8B 5B 53 4F 00 00 69 00
64 00 61 00 20 00 43 00  6F 00 6E 00 73 00 6F 00
6C 00 65 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00
00 00 00 00 CE 11 A1 FB  FE 07 00 00 00 00 00 00
00 00 00 00 82 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 82 00 00 00  00 00 00 00 4A 04 04 00
00 00 00 00 C0 84 6D 77  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 01 00 00 00
00 00 00 00 31 75 6D 77  00 00 00 00 40 13 C7 01
00 00 00 00 C0 84 6D 77  00 00 00 00 98 13 C7 01
00 00 00 00 11 A9 00 00  00 00 00 00 C0 9C 7F 00
00 00 00 00 00 00 00 00  00 00 00 00 3C 12 00 00
00 00 00 00 ED 6B 6D 77  00 00 00 00 00 00 00 00
00 00 00 00 4A 04 04 00  00 00 00 00 4A 04 04 00
00 00 00 00 4A 04 04 00  00 00 00 00 E3 F7 11 77
00 00 00 00 D2 89 A1 FB  FE 07 00 00 33 D6 35 FD
FE 07 00 00 00 00 00 00  00 00 00 00 23 D6 35 FD
FE 07 00 00 BB 22 34 FE  FE 07 00 00 93 F4 11 77
00 00 00 00 46 B4 A3 FD  64 76 00 08 00 00 00 00
25 00 00 00 0C 00 00 00  01 00 00 00 12 00 00 00
0C 00 00 00 01 00 00 00  1B 00 00 00 10 00 00 00
00 00 00 00 00 00 00 00  0D 00 00 00 10 00 00 00
00 00 00 00 00 00 00 00  62 00 00 00 0C 00 00 00
01 00 00 00 64 00 00 00  0C 00 00 00 14 00 00 80
6D 00 00 00 10 00 00 00  DD EE EB 05 01 00 00 00
77 00 00 00 34 00 00 00  04 00 00 00 DB 14 0C E9
01 00 00 00 D4 87 3C 0A  03 00 00 00 35 46 E5 14
03 00 00 00 01 D0 22 88  01 00 00 00 00 00 00 00
00 00 00 00 54 00 00 00  70 00 00 00 83 08 00 00
4F 02 00 00 DA 0A 00 00  B2 02 00 00 01 00 00 00
DD 89 87 40 39 76 87 40  83 08 00 00 4F 02 00 00
06 00 00 00 4C 00 00 00  00 10 00 00 00 00 00 00
00 00 00 00 FF FF FF FF  FF FF FF FF 58 00 00 00
B0 65 FA 5E 87 65 2C 67  87 65 63 68 64 00 00 00
64 00 00 00 64 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 1E 00 00 00  18 00 00 00 D8 01 00 00
C1 02 00 00 86 11 00 00  A8 18 00 00 16 00 00 00
0C 00 00 00 01 00 00 00  12 00 00 00 0C 00 00 00
01 00 00 00 1B 00 00 00  10 00 00 00 00 00 00 00
00 00 00 00 77 00 00 00  34 00 00 00 04 00 00 00
DB 14 0C E9 01 00 00 00  D4 87 3C 0A 03 00 00 00
35 46 E5 14 03 00 00 00  01 D0 22 88 01 00 00 00
00 00 00 00 00 00 00 00  54 00 00 00 54 00 00 00
00 00 00 00 00 00 00 00  FF FF FF FF FF FF FF FF
01 00 00 00 DD 89 87 40  39 76 87 40 D8 01 00 00
C1 02 00 00 01 00 00 00  4C 00 00 00 04 10 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
50 00 00 00 20 00 00 00  58 02 00 00 16 00 00 00
0C 00 00 00 00 00 00 00  77 00 00 00 34 00 00 00
04 00 00 00 DB 14 0C E9  01 00 00 00 D4 87 3C 0A
03 00 00 00 35 46 E5 14  03 00 00 00 01 D0 22 88
01 00 00 00 00 00 00 00  00 00 00 00 54 00 00 00
60 00 00 00 D8 01 00 00  C1 02 00 00 6D 02 00 00
24 03 00 00 01 00 00 00  DD 89 87 40 39 76 87 40
D8 01 00 00 C1 02 00 00  03 00 00 00 4C 00 00 00
00 10 00 00 00 00 00 00  00 00 00 00 FF FF FF FF
FF FF FF FF 54 00 00 00  68 00 67 00 75 00 00 00
32 00 00 00 32 00 00 00  32 00 00 00 77 00 00 00
34 00 00 00 04 00 00 00  DB 14 0C E9 01 00 00 00
D4 87 3C 0A 03 00 00 00  35 46 E5 14 03 00 00 00
01 D0 22 88 01 00 00 00  00 00 00 00 00 00 00 00
54 00 00 00 6C 00 00 00  6E 02 00 00 C1 02 00 00
2F 04 00 00 24 03 00 00  01 00 00 00 DD 89 87 40
39 76 87 40 6E 02 00 00  C1 02 00 00 05 00 00 00
4C 00 00 00 00 10 00 00  00 00 00 00 00 00 00 00
FF FF FF FF FF FF FF FF  58 00 00 00 90 96 90 96
A6 7E A6 7E 30 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 64 00 00 00  32 00 00 00 1B 00 00 00
10 00 00 00 00 00 00 00  00 00 00 00 16 00 00 00
0C 00 00 00 00 00 00 00  77 00 00 00 34 00 00 00
04 00 00 00 DB 14 0C E9  01 00 00 00 D4 87 3C 0A
03 00 00 00 35 46 E5 14  03 00 00 00 01 D0 22 88
01 00 00 00 00 00 00 00  00 00 00 00 54 00 00 00
70 00 00 00 D8 01 00 00  D5 07 00 00 2F 04 00 00
38 08 00 00 01 00 00 00  DD 89 87 40 39 76 87 40
D8 01 00 00 D5 07 00 00  06 00 00 00 4C 00 00 00
00 10 00 00 00 00 00 00  00 00 00 00 FF FF FF FF
FF FF FF FF 58 00 00 00  CF 7E 4E 6D 4C 75 CF 7E
4E 6D 4C 75 64 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 64 00 00 00  64 00 00 00 4B 00 00 00
10 00 00 00 00 00 00 00  05 00 00 00 77 00 00 00
34 00 00 00 04 00 00 00  DB 14 0C E9 01 00 00 00
D4 87 3C 0A 03 00 00 00  35 46 E5 14 03 00 00 00
01 D0 22 88 01 00 00 00  00 00 00 00 00 00 00 00
54 00 00 00 6C 00 00 00  00 09 00 00 A8 18 00 00
5D 0A 00 00 0B 19 00 00  01 00 00 00 DD 89 87 40
39 76 87 40 00 09 00 00  A8 18 00 00 05 00 00 00
4C 00 00 00 00 10 00 00  00 00 00 00 00 00 00 00
FF FF FF FF FF FF FF FF  58 00 00 00 2C 7B 20 00
31 00 20 00 75 98 00 00  64 00 00 00 32 00 00 00
32 00 00 00 32 00 00 00  64 00 00 00 0E 00 00 00
14 00 00 00 00 00 00 00  10 00 00 00 14 00 00 00
0E 00 00 00 08 00 00 00  A4 06 00 00 00 00 00 00
0C 00 00 00 48 05 00 00  01 00 00 00 84 00 00 00
D8 01 00 00 4F 02 00 00  DA 0A 00 00 0B 19 00 00
00 00 00 00 00 00 00 00  08 52 00 00 04 74 00 00
20 45 4D 46 00 00 01 00  48 05 00 00 16 00 00 00
02 00 00 00 0C 00 00 00  6C 00 00 00 00 00 00 00
5E 13 00 00 68 1B 00 00  D2 00 00 00 29 01 00 00
00 00 00 00 00 00 00 00  00 00 00 00 EF 33 03 00
28 88 04 00 50 00 72 00  69 00 6E 00 74 00 20 00
74 00 65 00 73 00 74 00  00 00 00 00 25 00 00 00
0C 00 00 00 07 00 00 80  25 00 00 00 0C 00 00 00
00 00 00 80 52 00 00 00  70 01 00 00 01 00 00 00
9C FF FF FF 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 8B 5B 53 4F
00 00 69 00 64 00 61 00  20 00 43 00 6F 00 6E 00
73 00 6F 00 6C 00 65 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
01 00 00 00 00 00 00 00  CE 11 A1 FB FE 07 00 00
00 00 00 00 00 00 00 00  82 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00  82 00 00 00 00 00 00 00
4A 04 04 00 00 00 00 00  C0 84 6D 77 00 00 00 00
00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
01 00 00 00 00 00 00 00  31 75 6D 77 00 00 00 00
40 13 C7 01 00 00 00 00  C0 84 6D 77 00 00 00 00
98 13 C7 01 00 00 00 00  11 A9 00 00 00 00 00 00
C0 9C 7F 00 00 00 00 00  00 00 00 00 00 00 00 00
3C 12 00 00 00 00 00 00  ED 6B 6D 77 00 00 00 00
00 00 00 00 00 00 00 00  4A 04 04 00 00 00 00 00
4A 04 04 00 00 00 00 00  4A 04 04 00 00 00 00 00
E3 F7 11 77 00 00 00 00  D2 89 A1 FB FE 07 00 00
33 D6 35 FD FE 07 00 00  00 00 00 00 00 00 00 00
23 D6 35 FD FE 07 00 00  BB 22 34 FE FE 07 00 00
93 F4 11 77 00 00 00 00  46 B4 A3 FD 64 76 00 08
00 00 00 00 25 00 00 00  0C 00 00 00 01 00 00 00
12 00 00 00 0C 00 00 00  01 00 00 00 1B 00 00 00
10 00 00 00 00 00 00 00  00 00 00 00 0D 00 00 00
10 00 00 00 00 00 00 00  00 00 00 00 62 00 00 00
0C 00 00 00 01 00 00 00  64 00 00 00 0C 00 00 00
14 00 00 80 6D 00 00 00  10 00 00 00 DD EE EB 05
01 00 00 00 77 00 00 00  34 00 00 00 04 00 00 00
DB 14 0C E9 01 00 00 00  D4 87 3C 0A 03 00 00 00
35 46 E5 14 03 00 00 00  01 D0 22 88 01 00 00 00
00 00 00 00 00 00 00 00  54 00 00 00 70 00 00 00
83 08 00 00 4F 02 00 00  DA 0A 00 00 B2 02 00 00
01 00 00 00 DD 89 87 40  39 76 87 40 83 08 00 00
4F 02 00 00 06 00 00 00  4C 00 00 00 00 10 00 00
00 00 00 00 00 00 00 00  FF FF FF FF FF FF FF FF
58 00 00 00 B0 65 FA 5E  87 65 2C 67 87 65 63 68
64 00 00 00 64 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 64 00 00 00  1E 00 00 00 18 00 00 00
D8 01 00 00 C1 02 00 00  86 11 00 00 A8 18 00 00
77 00 00 00 34 00 00 00  04 00 00 00 DB 14 0C E9
01 00 00 00 D4 87 3C 0A  03 00 00 00 35 46 E5 14
03 00 00 00 01 D0 22 88  01 00 00 00 00 00 00 00
00 00 00 00 54 00 00 00  7C 00 00 00 D8 01 00 00
C9 09 00 00 F7 04 00 00  2C 0A 00 00 01 00 00 00
DD 89 87 40 39 76 87 40  D8 01 00 00 C9 09 00 00
08 00 00 00 4C 00 00 00  00 10 00 00 00 00 00 00
00 00 00 00 FF FF FF FF  FF FF FF FF 5C 00 00 00
CF 7E 4E 6D 4C 75 CF 7E  4E 6D 4C 75 CF 7E 4E 6D
64 00 00 00 64 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 64 00 00 00  64 00 00 00 64 00 00 00
77 00 00 00 34 00 00 00  04 00 00 00 DB 14 0C E9
01 00 00 00 D4 87 3C 0A  03 00 00 00 35 46 E5 14
03 00 00 00 01 D0 22 88  01 00 00 00 00 00 00 00
00 00 00 00 54 00 00 00  78 00 00 00 D8 01 00 00
41 0F 00 00 93 04 00 00  A4 0F 00 00 01 00 00 00
DD 89 87 40 39 76 87 40  D8 01 00 00 41 0F 00 00
07 00 00 00 4C 00 00 00  00 10 00 00 00 00 00 00
00 00 00 00 FF FF FF FF  FF FF FF FF 5C 00 00 00
CF 7E 4E 6D 4C 75 A4 65  A4 65 A1 8B 83 8F 00 00
64 00 00 00 64 00 00 00  64 00 00 00 64 00 00 00
64 00 00 00 64 00 00 00  64 00 00 00 4B 00 00 00
10 00 00 00 00 00 00 00  05 00 00 00 77 00 00 00
34 00 00 00 04 00 00 00  DB 14 0C E9 01 00 00 00
D4 87 3C 0A 03 00 00 00  35 46 E5 14 03 00 00 00
01 D0 22 88 01 00 00 00  00 00 00 00 00 00 00 00
54 00 00 00 6C 00 00 00  00 09 00 00 A8 18 00 00
5D 0A 00 00 0B 19 00 00  01 00 00 00 DD 89 87 40
39 76 87 40 00 09 00 00  A8 18 00 00 05 00 00 00
4C 00 00 00 00 10 00 00  00 00 00 00 00 00 00 00
FF FF FF FF FF FF FF FF  58 00 00 00 2C 7B 20 00
32 00 20 00 75 98 00 00  64 00 00 00 32 00 00 00
32 00 00 00 32 00 00 00  64 00 00 00 0E 00 00 00
14 00 00 00 00 00 00 00  10 00 00 00 14 00 00 00
0E 00 00 00 08 00 00 00  50 05 00 00 00 00 00 00

dwVersion:00010000-00000003
cjSize:0000003C-00000007
dpszDocName:00000010-0000000B
dpszOutput:0000002A-0000000F
新建文本文档 - 记事本
ulID:0000000C-0000003F
cjSize:0000069C-00000043
Type:00000001-00000047
Size:00000084-0000004B
Bounds1:000001D8-0000004F
Bounds2:0000024F-00000053
Bounds3:00000ADA-00000058
Bounds4:0000190B-0000005C
Frame1:00000000-00000060
Frame2:00000000-00000064
Frame3:00005208-00000068
Frame4:00007404-0000006C
Signature:464D4520-00000070
Version:00010000-00000074
Bytes:0000069C-00000078
Records:00000020-0000007C
HandlesReserved:00000002-00000080
nDescription:0000000C-00000084
offDescription:0000006C-00000088
nPalEntries:00000000-0000008C
Device1:0000135E-00000090
Device2:00001B68-00000094
Millimeters1:000000D2-00000098
Millimeters2:00000129-0000009C
cbPixelFormat:00000000-000000A0
offPixelFormat:00000000-000000A4
bOpenGL:00000000-000000A8
MicrometersX:000333EF-000000AC
MicrometersY:00048828-000000B0
EmfDescription:Print test
This is record0
Type:00000025-000000CC
Size:0000000C-000000D0
RecordContent:耀

This is record1
Type:00000025-000000D8
Size:0000000C-000000DC
RecordContent:

This is record2
Type:00000052-000000E4
Size:00000170-000000E8
RecordContent:???宋体体ida Consoleda Consolea Console ConsoleConsoleonsolensolesoleolelee????????ъ蓀睭睭由睭睭??? 蓀睭睭????鳀?毭睭睭ъъъ?眑眑角??????????????????︴?︴???眑眑??癤??癤?癤?

This is record3
Type:00000025-00000243
Size:0000000C-00000247
RecordContent:

This is record4
Type:00000012-0000024F
Size:0000000C-00000253
RecordContent:

This is record5
Type:0000001B-0000025B
Size:00000010-0000025F
RecordContent:

This is record6
Type:0000000D-0000026B
Size:00000010-0000026F
RecordContent:

This is record7
Type:00000062-0000027B
Size:0000000C-0000027F
RecordContent:

This is record8
Type:00000064-00000287
Size:0000000C-0000028B
RecordContent:耀

This is record9
Type:0000006D-00000293
Size:00000010-00000297
RecordContent:???

This is record10
Type:00000077-000002A3
Size:00000034-000002A7
RecordContent:???蟔??????蠢蠢

This is record11
Type:00000054-000002D8
Size:00000070-000002DC
RecordContent:????觝?瘹???瘹??瘹??????L?????X???X??X?XX新建文本文档d建文本文档d文本文档d本文档d文档d档dddddd

This is a content record.
Bounds1:00000883
Bounds2:0000024F
Bounds3:00000ADA
Bounds4:000002B2
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:00000883
Reference2:0000024F
Chars:00000006
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:新建文本文档d
This is record12
Type:0000001E-00000349
Size:00000018-0000034D
RecordContent:ǘ??

This is record13
Type:00000016-00000361
Size:0000000C-00000365
RecordContent:

This is record14
Type:00000012-0000036D
Size:0000000C-00000371
RecordContent:

This is record15
Type:0000001B-00000379
Size:00000010-0000037D
RecordContent:

This is record16
Type:00000077-00000389
Size:00000034-0000038D
RecordContent:???蟔??????蠢蠢

This is record17
Type:00000054-000003BE
Size:00000054-000003C2
RecordContent:??????????觝?瘹?ǘ?瘹?ǘ瘹?ǘ?ǘǘ?L?P

This is a content record.
Bounds1:00000000
Bounds2:00000000
Bounds3:0000FFFF
Bounds4:0000FFFF
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:000001D8
Reference2:000002C1
Chars:00000001
offString:0000004C
Options:00001004
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:00000000
Rectangle4:00000000
offDx:00000050
Content:
This is record18
Type:00000016-00000412
Size:0000000C-00000416
RecordContent:

This is record19
Type:00000077-0000041E
Size:00000034-00000422
RecordContent:???蟔??????蠢蠢

This is record20
Type:00000054-00000453
Size:00000060-00000457
RecordContent:ǘ???觝?瘹?ǘ?瘹?ǘ瘹?ǘ?ǘǘ?L?????T???T??T?TThguguu22

This is a content record.
Bounds1:000001D8
Bounds2:000002C1
Bounds3:0000026D
Bounds4:00000324
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:000001D8
Reference2:000002C1
Chars:00000003
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000054
Content:hgu
This is record21
Type:00000077-000004B3
Size:00000034-000004B7
RecordContent:???蟔??????蠢蠢

This is record22
Type:00000054-000004E8
Size:0000006C-000004EC
RecordContent:??Я?觝?瘹???瘹??瘹??????L?????X???X??X?XX隐隐约约0隐约约0约约0约00dddd

This is a content record.
Bounds1:0000026E
Bounds2:000002C1
Bounds3:0000042F
Bounds4:00000324
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:0000026E
Reference2:000002C1
Chars:00000005
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:隐隐约约0
This is record23
Type:0000001B-00000554
Size:00000010-00000558
RecordContent:

This is record24
Type:00000016-00000564
Size:0000000C-00000568
RecordContent:

This is record25
Type:00000077-00000570
Size:00000034-00000574
RecordContent:???蟔??????蠢蠢

This is record26
Type:00000054-000005A5
Size:00000070-000005A9
RecordContent:ǘ?Я?觝?瘹?ǘ?瘹?ǘ瘹?ǘ?ǘǘ?L?????X???X??X?XX经济界经济界d济界经济界d界经济界d经济界d济界d界dddddd

This is a content record.
Bounds1:000001D8
Bounds2:000007D5
Bounds3:0000042F
Bounds4:00000838
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:000001D8
Reference2:000007D5
Chars:00000006
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:经济界经济界d
This is record27
Type:0000004B-00000615
Size:00000010-00000619
RecordContent:

This is record28
Type:00000077-00000625
Size:00000034-00000629
RecordContent:???蟔??????蠢蠢

This is record29
Type:00000054-0000065A
Size:0000006C-0000065E
RecordContent:????觝?瘹???瘹??瘹??????L?????X???X??X?XX第 1 页 1 页1 页 页页d222

This is a content record.
Bounds1:00000900
Bounds2:000018A8
Bounds3:00000A5D
Bounds4:0000190B
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:00000900
Reference2:000018A8
Chars:00000005
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:第 1 页
This is record30
Type:0000000E-000006C7
Size:00000014-000006CB
RecordContent:

This is record31
Type:0000000E-000006DB
Size:00000008-000006DF
RecordContent:
tail1:000006A4-000006E3
tail2:00000000-000006E7
ulID:0000000C-000006EB
cjSize:00000548-000006EF
Type:00000001-000006F3
Size:00000084-000006F7
Bounds1:000001D8-000006FB
Bounds2:0000024F-000006FF
Bounds3:00000ADA-00000704
Bounds4:0000190B-00000708
Frame1:00000000-0000070C
Frame2:00000000-00000710
Frame3:00005208-00000714
Frame4:00007404-00000718
Signature:464D4520-0000071C
Version:00010000-00000720
Bytes:00000548-00000724
Records:00000016-00000728
HandlesReserved:00000002-0000072C
nDescription:0000000C-00000730
offDescription:0000006C-00000734
nPalEntries:00000000-00000738
Device1:0000135E-0000073C
Device2:00001B68-00000740
Millimeters1:000000D2-00000744
Millimeters2:00000129-00000748
cbPixelFormat:00000000-0000074C
offPixelFormat:00000000-00000750
bOpenGL:00000000-00000754
MicrometersX:000333EF-00000758
MicrometersY:00048828-0000075C
EmfDescription:Print test
This is record0
Type:00000025-00000778
Size:0000000C-0000077C
RecordContent:耀

This is record1
Type:00000025-00000784
Size:0000000C-00000788
RecordContent:

This is record2
Type:00000052-00000790
Size:00000170-00000794
RecordContent:???宋体体ida Consoleda Consolea Console ConsoleConsoleonsolensolesoleolelee????????ъ蓀睭睭由睭睭??? 蓀睭睭????鳀?毭睭睭ъъъ?眑眑角??????????????????︴?︴???眑眑??癤??癤?癤?

This is record3
Type:00000025-00000900
Size:0000000C-00000904
RecordContent:

This is record4
Type:00000012-0000090C
Size:0000000C-00000910
RecordContent:

This is record5
Type:0000001B-00000918
Size:00000010-0000091C
RecordContent:

This is record6
Type:0000000D-00000928
Size:00000010-0000092C
RecordContent:

This is record7
Type:00000062-00000938
Size:0000000C-0000093C
RecordContent:

This is record8
Type:00000064-00000944
Size:0000000C-00000948
RecordContent:耀

This is record9
Type:0000006D-00000950
Size:00000010-00000954
RecordContent:???

This is record10
Type:00000077-00000960
Size:00000034-00000964
RecordContent:???蟔??????蠢蠢

This is record11
Type:00000054-00000995
Size:00000070-00000999
RecordContent:????觝?瘹???瘹??瘹??????L?????X???X??X?XX新建文本文档d建文本文档d文本文档d本文档d文档d档dddddd

This is a content record.
Bounds1:00000883
Bounds2:0000024F
Bounds3:00000ADA
Bounds4:000002B2
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:00000883
Reference2:0000024F
Chars:00000006
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:新建文本文档d
This is record12
Type:0000001E-00000A06
Size:00000018-00000A0A
RecordContent:ǘ??

This is record13
Type:00000077-00000A1E
Size:00000034-00000A22
RecordContent:???蟔??????蠢蠢

This is record14
Type:00000054-00000A53
Size:0000007C-00000A57
RecordContent:ǘ???觝?瘹?ǘ?瘹?ǘ瘹?ǘ?ǘǘL?????\???\??\?\\经济界经济界经济d济界经济界经济d界经济界经济d经济界经济d济界经济d界经济d经济d济dddddddd

This is a content record.
Bounds1:000001D8
Bounds2:000009C9
Bounds3:000004F7
Bounds4:00000A2C
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:000001D8
Reference2:000009C9
Chars:00000008
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:0000005C
Content:经济界经济界经济d
This is record15
Type:00000077-00000AD0
Size:00000034-00000AD4
RecordContent:???蟔??????蠢蠢

This is record16
Type:00000054-00000B05
Size:00000078-00000B09
RecordContent:ǘ???觝?瘹?ǘ?瘹?ǘ瘹?ǘ?ǘǘ?L?????\???\??\?\\经济界斤斤计较济界斤斤计较界斤斤计较斤斤计较斤计较计较较dddddd

This is a content record.
Bounds1:000001D8
Bounds2:00000F41
Bounds3:00000493
Bounds4:00000FA4
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:000001D8
Reference2:00000F41
Chars:00000007
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:0000005C
Content:经济界斤斤计较
This is record17
Type:0000004B-00000B7D
Size:00000010-00000B81
RecordContent:

This is record18
Type:00000077-00000B8D
Size:00000034-00000B91
RecordContent:???蟔??????蠢蠢

This is record19
Type:00000054-00000BC2
Size:0000006C-00000BC6
RecordContent:????觝?瘹???瘹??瘹??????L?????X???X??X?XX第 2 页 2 页2 页 页页d222

This is a content record.
Bounds1:00000900
Bounds2:000018A8
Bounds3:00000A5D
Bounds4:0000190B
iGraphicsMode:00000001
exScale:000089DD
eyScale:00007639
Reference1:00000900
Reference2:000018A8
Chars:00000005
offString:0000004C
Options:00001000
Rectangle1:00000000
Rectangle2:00000000
Rectangle3:0000FFFF
Rectangle4:0000FFFF
offDx:00000058
Content:第 2 页
This is record20
Type:0000000E-00000C2F
Size:00000014-00000C33
RecordContent:

This is record21
Type:0000000E-00000C43
Size:00000008-00000C47
RecordContent:
tail1:00000550-00000C4B
tail2:00000000-00000C4F

此文原创,引用请标明出处

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: spl文件通常指的是Splunk的文件格式,Splunk是一种用于从大量数据中获取有价值的信息和洞察力的软件平台。 Splunk通过分析和解析各种类型的数据,例如日志文件、网络数据和系统指标,使企业能够实时监控和分析应用程序、基础设施和业务数据。 在Splunk中,spl文件是一种由Splunk搜索语言(SPL)编写的查询或报告的存储格式。SPL是一种基于搜索和过滤的查询语言,它可以让用户对数据进行实时搜索、过滤和分析,并生成可视化的结果。 解析spl文件通常意味着读取和理解其中的查询或报告内容。这可以通过打开spl文件,查看其中的搜索语句和其他设置,来了解该查询或报告所针对的数据和目的。 一旦spl文件解析,用户可以进行相应的操作,例如在Splunk中执行查询、修改查询参数或导出查询结果。 总而言之,spl文件解析是指读取和理解Splunk搜索语言(SPL)编写的查询或报告的内容,以便在Splunk软件中进行相应的数据分析和操作。通过spl文件解析,用户可以利用Splunk功能来处理和分析大量的数据,并从中获得更多有用信息和见解。 ### 回答2: Spl文件是一种通用的日志文件格式,它通常用于记录网络设备和服务的系统日志。解析Spl文件是将其内容以可读的方式展示出来,方便用户查看和分析。 要解析Spl文件,首先需要了解Spl文件的数据结构。Spl文件通常包含多个事件(Event),每个事件记录了一个特定的系统操作或事件。每个事件由不同的字段组成,常见的字段有时间戳、日志级别、消息内容等。解析Spl文件的关键是识别和提取这些字段。 解析Spl文件的方法可以有多种。一种简单的方法是使用文本处理工具,如脚本语言或命令行工具,逐行读取Spl文件解析其中的字段信息。对于每一行,可以使用正则表达式或字符串分割等方式提取所需字段的值,并将其保存到一个数据结构中。然后可以根据需要,将解析后的数据进行过滤、统计或可视化。 另一种更复杂的方法是使用专门的日志解析工具。这些工具通常具有更高级的功能,如自动提取字段、支持多种日志格式、支持大规模日志数据等。通过配置文件或可视化界面,用户可以灵活地定义解析规则和数据输出格式,以满足不同需求。一些常见的日志解析工具包括ELK Stack(Elasticsearch, Logstash, Kibana)、Splunk和Graylog等。 总之,Spl文件解析是将其内容转换成可读格式的过程。通过了解Spl文件的数据结构和采用合适的解析工具,可以提高对Spl文件数据的分析和利用效率,帮助用户理解和排查系统问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值