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;
}

posted @ 2011-03-09 14:11  wangshuming  阅读(5320)  评论(4编辑  收藏  举报