Ugrás a fő tartalomra

CorelDraw és a makrozás

 CorelDraw és a makrozás


A CorelDRAW az egyik legjobban automatizálható vektoros program. Gyakorlatilag mindent meg tudsz írni kódból, amit kézzel is rajzolnál.


3 szinten lehet automatizálni


**1. VBA - a beépített megoldás**

Ez a klasszikus. Van saját makró szerkesztője, recorder-e, és a legtöbb példakód is ebben van írva.

`Tools > Macros > Macro Manager` alatt találod.






**2. VSTA - C# és VB.NET**

Ugyanaz az objektum modell, csak Visual Studio-val. Akkor érdemes, ha nagyobb bővítményt írnál. A Corel leírása szerint is ezt a kettőt támogatja hivatalosan: VBA vagy VSTA.


**3. Külső COM automatizálás - pl. Python**

A CorelDRAW COM objektumként fut a Windowsban, tehát kívülről is vezérelheted Pythonból, C#-ból, stb. `CorelDRAW.Application` néven éred el.


A teljes objektum modellhez van részletes referencia, diagramok, mintakódok a Developer oldalon.


Mit tudsz így rajzolni?


Az objektum modell: `Application > Document > Page > Layer > Shape > Curve > Node`


Minden alakzatot tudsz kódból létrehozni. A legalapabb parancs például:


> `Set s1 = ActiveLayer.CreateRectangle`... ez hozza létre a téglalapot, az első 4 paraméter a bal, alsó, jobb, felső koordináta.


De van `CreateEllipse`, `CreatePolygon`, `CreateCurve`, `CreateArtisticText` is.


Mire használják a legtöbben:


* rácsok, perforációk, 1000+ furat / címke paraméteresen

* CSV / Excel-ből adatvezérelt rajzolás - pl. 500 névjegykártya, árcímke, sorszámozás

* lézer / CNC előkészítés: kontúrok rendezése, hézag zárás, DXF cleanup

* batch export, PDF generálás, vonalkód / QR


Példa 1: VBA makró - rács rajzolás


Másold be a Macro Editorbe (`Tools > Macros > Visual Basic Editor`):


```vba

Sub RajzolRacs()

    Dim x As Double, y As Double

    Dim doc As Document: Set doc = ActiveDocument

    doc.Unit = cdrMillimeter ' állítsd mm-re, alapból inch


    For x = 0 To 200 Step 20

        For y = 0 To 200 Step 20

            ' téglalap bal, fent, jobb, lent

            ActiveLayer.CreateRectangle x, y, x + 10, y + 10

        Next y

    Next x

End Sub

```


Felvétel is működik:
`Tools > Macros > Start Recording`, rajzolsz kézzel, Stop, és megnézheted milyen kódot generált. 

Csak a recorder elég buta, kézzel érdemes letisztítani.






Példa 2: Görbe pontokkal


```vba

Sub RajzolGorbe()

    Dim crv As Curve

    Dim seg As Segment

    Set crv = ActiveLayer.CreateCurve

    ' 2 pont közötti vonal

    crv.CreateSubPath 0, 0

    crv.AppendLineSegment 50, 50

    crv.AppendLineSegment 100, 0

    ActiveLayer.CreateCurve crv

End Sub

```


Példa 3: Pythonból vezérelve


Ha nem akarsz VBA-zni:


```python

import win32com.client


app = win32com.client.Dispatch("CorelDRAW.Application")

app.Visible = True

doc = app.ActiveDocument

layer = doc.ActivePage.ActiveLayer


# 10x10-es négyzet 20,20-nál

layer.CreateRectangle 20, 20, 30, 30

```


Gyors tippek


* **Koordináta rendszer:** alapból a bal alsó sarok a 0,0 és inch-ben mér. Az első dolgod legyen `ActiveDocument.Unit = cdrMillimeter`.

* **GMS fájl:** a makróidat ide menti: `...AppData\Roaming\Corel\CorelDRAW Graphics Suite\GMS`

* **Biztonság:** ha nem fut a makró, `Tools > Options > Workspace > Macros` alatt engedélyezd.





Könyvtárban levő összes képállományok logo hozzáadása



Másik klasszikus kötegelt feladat CorelDRAW-ban. Ez a legstabilabb verzió - végigmegy egy mappán, és minden képre jobb alul ráteszi a logót.


PNG logót javaslok logo.png néven átlátszó háttérrel, de működik JPG-vel is.


A makró - másold egyben

Tools > Macros > Visual Basic Editor > GlobalMacros > Modules > New Module és illeszd be:


Sub LogoBatch_2025_OK()

    Dim fso As Object, file As Object

    Dim sourceFolder As String, logoPath As String, outFolder As String

    

    sourceFolder = "C:\Users\User\Downloads\__html\kep\foto"

    logoPath = "C:\Users\User\Downloads\__html\kep\logo.png"

    outFolder = "C:\Users\User\Downloads\__html\kep\foto\keszen"

    

     Set fso = CreateObject("Scripting.FileSystemObject")

    If Not fso.FolderExists(outFolder) Then fso.CreateFolder outFolder

    

    For Each file In fso.GetFolder(sourceFolder).Files

        If LCase(fso.GetExtensionName(file.Name)) = "jpg" Or LCase(fso.GetExtensionName(file.Name)) = "png" Then

            WatermarkOne_Open file.Path, logoPath, outFolder & "\" & fso.GetBaseName(file.Name) & "_logo.jpg"

        End If

    Next file

    

    MsgBox "Kész!"

End Sub


Private Sub WatermarkOne_Open(imgPath As String, logoPath As String, savePath As String)

    Dim doc As Document

    Dim bg As Shape, lg As Shape

    Dim w As Double, h As Double

    Dim logoLayer As Layer

    

    Set doc = Application.OpenDocument(imgPath)

    doc.Unit = cdrMillimeter

    

    Set bg = doc.ActivePage.ActiveLayer.Shapes(1)

    w = bg.SizeWidth

    h = bg.SizeHeight

    

    ' 2025-ben így kell lapméretet állítani:

    doc.ActivePage.SetSize w, h

    

    bg.LeftX = 0

    bg.BottomY = 0

    bg.OrderToBack

    

    ' Új réteg és aktiválás 2025-ös módszerrel

    Set logoLayer = doc.ActivePage.CreateLayer("LOGO")

    logoLayer.Activate

'---

'    doc.ActiveLayer.Import logoPath

'    Set lg = doc.ActiveLayer.Shapes(1)

'

'    lg.SetSize w * 0.2, w * 0.2 * (lg.SizeHeight / lg.SizeWidth)

'    lg.RightX = w - 3

'    lg.BottomY = 3

'---

doc.ActiveLayer.Import logoPath

Set lg = doc.ActiveLayer.Shapes(1)

    

' --- JAVÍTÁS: fix méret + aránytartás ---

Dim origW As Double, origH As Double

origW = lg.SizeWidth

origH = lg.SizeHeight

    

' Ha négyzetes a logód, ez 15mm lesz, nem fog torzulni

Dim finalSize As Double: finalSize = 10 ' mm

If origW > origH Then

    lg.SizeWidth = finalSize

    lg.SizeHeight = finalSize * origH / origW

Else

    lg.SizeHeight = finalSize

    lg.SizeWidth = finalSize * origW / origH

End If

    

lg.RightX = w - 3

lg.BottomY = 3

    

    doc.Export savePath, cdrJPEG

    doc.Close

End Sub


Hogyan használd

  1. Tedd a logo.png-t egy fix helyre.
  2. A kódban felül írd át a 3 útvonalat: sourceFolder, logoPath, outFolder.
  3. Futtatás: Tools > Macros > Macro Manager > LogoBatchWatermark > Run.

Mit csinál pontosan:

  1. Létrehoz egy új dokumentumot minden képhez.
  2. A lapot a kép méretére állítja.
  3. Importálja a logót, átméretezi a kép szélességének 15%-ára hogy minden képen arányos legyen.
  4. RightX és BottomY alapján betolja jobb alsó sarokba 5mm margóval.
  5. Exportálja kepneve_logo.jpg néven és bezárja.

Megjegyzések