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

转载于:https://www.cnblogs.com/gadfly/archive/2011/03/09/1978291.html

主要功能:理论上,该程序可以解码任何基于BER编码的CDR文件。不过,由于我在工作中只接触到Ericsson的某些版本的CDR,而且,用于解析CDR文件的描述文件来源于供应商,我的程序也只能识别来自于这个供应商的描述文件,所以,移植到其它厂商的环境下可能会产生一些问题。希望大家试用过后能够把各种情况反馈给我,最好能够把BER编码的CDR样本及其描述文件发给我,这样我就能够作为依据,完善这个程序了。 主要特点: 1. 高速!该程序比目前我在网上见到过的所有能够使用的同类型程序都要快,甚至在同等条件下,比我所在公司的供应商提供的程序还要快15%到20% 2. 支持关键字搜索。不需要把整个CDR文件的记录全部翻译成文本记录再逐个查找,而是在解码的过程中顺便完成搜索,节省时间和空间 3. 直接支持压缩格式。通常CDR文件都是经过压缩后保存在磁盘的,该程序可以直接读取经过压缩后的CDR文件,不需要把它首先解压缩,然后再解码,进一步提供效率。同时,这个程序也支持压缩输出文件,为用户提供方便。目前支持的压缩格式有gzip和bzip2 最新版本: 1. destroy 1.0.0 for Linux 2. destroy 1.0.0 for Solaris 3. destroy 1.0.0 for Tru64 依赖关系:由于该程序支持压缩格式,因此它依赖于libz和libbz2 使用方法:键入./destroy –h可以获得所有帮助信息 $./destroy -h ./destroy 1.0.0 (2010-06-28) This is a program decoding a BER encoded CDR file Author: Roy Liang Blog: http://blog.csdn.net/yui/ Usage: ./destroy -f <file_name> -o <output_name> [-c <config_name>] [-k <keyword>] [-z] [-j] -f --file the CDR file to be decoded -o --output the output file in plain text format -c --config the description file of the CDR file, if not given, use default configuration -k --keyword the keyword to search, if not given, all records will be written into output file -z --gzip gzip the result -j --bzip2 bzip2 the result -h --help print this page
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值