CorelDrawのCDRフォーマット解析

1478 ワード

Cdrフォーマットはcoreldrawソフトウェアの基本フォーマットですが、ファイル構造は公開されておらず、解析するには自分で解読する必要があります.
現在2つの方法があり、1つ目は直接1バイト推測で、現在pythonベースのいくつかの解析プログラム、unicovert、inkscapeなどがあり、sk 1パッケージを呼び出して完成し、学習が困難で、サポートが全面的ではありません.
もう1つの方法は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;
    
    }