corelDraw 的CDR格式解析

Cdr格式是coreldraw软件的基本格式,但是他们不公开文件结构,如要对其解析,需要自己破解了。

目前有两种方式,第一种是直接一个个字节猜,目前有基于python的几个解析程序,unicovert,inkscape等,都是调用sk1包来完成,学习起来比较困难,并且支持的不全面,

另一种方式是模仿coreldraw的vba脚本来解析,使用C#或者C++可以以调用com组件的方式来进行解析。几点注意事项:

  1. 基本结构式cdr文件->页面->图层->图形。从上到下依次聚集了,这里需要注意的是,所有下标都是从1开始。
  2. 在调用各个接口的时候,注意变量类型,必须严格一致,比如Item[]的参数是long,决不能传入int,否则出错。

另外还需要掌握几个基本概念:

  1. 主页面:主页面可以在每页都显示出来,理解为底图吧
  2. 主图层。

待续...

参考资料:

http://forum.oberonplace.com/forumdisplay.php?f=16

VC开发的基本代码,仅供参考。

#include "stdafx.h"

#import "vgcoreauto.tlb" rename ("GetCommandLine", "vgGetCommandLine"), rename ("CopyFile", "vgCopyFile"), rename ("FindWindow", "vgFindWindow") no_namespace named_guids

#import "CorelDraw.tlb" rename ("FindWindow", "cdrFindWindow") named_guids



int _tmain(int argc, _TCHAR* argv[])

{

	CoInitialize(NULL);

	CorelDRAW::IDrawApplicationPtr pApp(L"CorelDRAW.Application.14");

	CorelDRAW::IDrawPagePtr pTargetPage = pApp->ActivePage;

	pTargetPage->ActiveLayer->CreateRectangle(1,1,2,2,0,0,0,0);

	try

	{

		pTargetPage->CreateLayer("testlayer");

	}

	catch (_com_error)

	{

	}

	CoUninitialize();

	return 0;

}

你可能感兴趣的:(core)