corelDraw 的CDR格式解析
Cdr格式是coreldraw软件的基本格式,但是他们不公开文件结构,如要对其解析,需要自己破解了。
目前有两种方式,第一种是直接一个个字节猜,目前有基于python的几个解析程序,unicovert,inkscape等,都是调用sk1包来完成,学习起来比较困难,并且支持的不全面,
另一种方式是模仿coreldraw的vba脚本来解析,使用C#或者C++可以以调用com组件的方式来进行解析。几点注意事项:
- 基本结构式cdr文件->页面->图层->图形。从上到下依次聚集了,这里需要注意的是,所有下标都是从1开始。
- 在调用各个接口的时候,注意变量类型,必须严格一致,比如Item[]的参数是long,决不能传入int,否则出错。
另外还需要掌握几个基本概念:
- 主页面:主页面可以在每页都显示出来,理解为底图吧
- 主图层。
待续...
参考资料:
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; }