zoukankan      html  css  js  c++  java
  • 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;
    }
    

  • 相关阅读:
    android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3
    display:inline-block的运用
    图解单片机8位PWM、16位PWM中“位”的含义!
    UVA10006
    [置顶] CF 86D Powerful array 分块算法入门,n*sqrt(n)
    俗人解释 三维渲染 在工作过程
    HDU 4414 Finding crosses(dfs)
    Codeforces 35E Parade 扫描线 + list
    hdu 4374 单调队列
    LeetCode OJ平台Sort Colors讨论主题算法
  • 原文地址:https://www.cnblogs.com/gadfly/p/1978291.html
Copyright © 2011-2022 走看看