Wie Vektor-Grafik in die Zwischenablage kopieren?

inflamer

Bekanntes Mitglied
Hallo zusammen,

wie stellt man das am Besten an, und zwar so, dass gängige Grafikbearbeitungsprogramme (Adobe Illustrator, Inkscape, MS Office usw.) mit dem Inhalt der Zwischenablage anschließend auch etwas anfangen können?

Am einfachsten wäre in meinem konkreten Fall, die Daten entweder im EPS oder im SVG-Format in ein ByteArray zu schreiben. Falls das eine gute Lösung ist, müsste ich dieses ByteArray ja wohl anschließend in ein Transferrable packen. Wie müsste der Code (mit DataFlavor und allem Pipapo) dazu in etwa aussehen?

Die (für mich erst einmal) schlechtere Alternative wäre EMF. Nachdem, was ich bis jetzt gelesen habe ist unter Windows EMF zwar das Format der Wahl, wenn es um das "Copypasten" von Vektorgrafiken geht, allerdings mutet die einzige Bibliothek Namens "FreeHEP", die ich bisher gefunden habe und die das macht, etwas merkwürdig an; mitunter erwartet sie eine Component-Instanz als Argument:
https://github.com/freehep/freehep-...e/util/export/VectorGraphicsTransferable.java

Ein weiterer Nachteil von EMF ist eben die Betriebssystemabhängigkeit. Ich schätze mal unter MacOS gibt es dafür einen anderen Standard?

Danke!
 
Zuletzt bearbeitet:
wie stellt man das am Besten an
Gute Frage.
Java:
import javax.activation.DataHandler;
import java.net.URL;
import java.io.*;
import java.awt.Toolkit; 
import java.awt.datatransfer.*; 

import static java.util.stream.Collectors.*;

public class SvgClipboard {

    public static void main(String[] args) throws Exception {
        Clipboard systemClipboard;
        systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); 

        try(InputStreamReader in = new InputStreamReader(new URL(args[0]).openStream());
                BufferedReader reader = new BufferedReader(in)) {
            String svg = reader.lines().collect(joining());
            DataHandler contents  = new DataHandler(svg.getBytes("UTF-8"), "image/svg+xml");
            systemClipboard.setContents(contents, null);
        }

        System.out.println("Press ENTER to leave (clipboard content will be lost)");
        System.in.read();
    }
}

Aufruf z. B. mit java -cp . SvgClipboard "https://upload.wikimedia.org/wikipedia/commons/7/72/Variable_Resistor.svg"

Funktioniert zumindest unter Linux - danach kann man das Bild in z. B. Inkscape einfügen.
 

Zurück
Oben