Wie verwende ich AppleScript, um eine neue Rich-Text-Format-Datei aus Text aus der Zwischenablage zu erstellen?

Ich habe einen Automator-Dienst, der den aktuellen Text in der Zwischenablage nimmt und in eine neue TXT-Datei schreibt. Dies wird einfach mit dem folgenden Stück AppleScript-Code ausgeführt:

do shell script "pbpaste > /path/to/your/clipboard-file.txt"

Dieser Code stammt aus der folgenden Stack Overflow-Antwort:

AppleScript zum Einfügen von Text aus der Zwischenablage in eine Datei

Dieser Code konvertiert jedoch den Inhalt der Zwischenablage in reinen Text und entfernt die gesamte Formatierung des Textes.

Ist es möglich, AppleScript zu verwenden, um den Inhalt der Zwischenablage in eine .rtf- oder .rtfd-Datei zu schreiben, während die ursprüngliche Formatierung des Inhalts der Zwischenablage beibehalten wird? Mit Originalformatierung meine ich stilistische Angaben wie typografische Hervorhebungen (fett, kursiv, unterstrichen), Schriftgröße und Textfarbe.

Aus einer Laune heraus habe ich folgenden Befehl ausprobiert:

do shell script "pbpaste > /path/to/your/clipboard-file.rtf"

Dieser Befehl führte jedoch zu einer .rtf-Datei, die mein Computer nicht lesen oder öffnen konnte.

Ich habe meine Antwort so aktualisiert, dass sie sowohl mit RTF- als auch mit HTML-Zwischenablageinhalten funktioniert.
Hat meine aktualisierte Antwort für Sie funktioniert?

Antworten (3)

Diese Antwort wurde aktualisiert, um das Missverständnis von Rubiks Sphäre zwischen dem, was Rich Text ist (wonach ursprünglich gefragt wurde) und dem, womit tatsächlich von Google Chrome gearbeitet wird, widerzuspiegeln, nämlich HTML. (Siehe Kommentare, die in den Chat verschoben wurden .)

Ich belasse die ursprüngliche Antwort unverändert und unter diesem neuen Inhalt, da sie die ursprüngliche Frage technisch so beantwortet, wie sie gestellt wurde. Es enthält auch relevante Informationen zum Gesamtprozess des Umgangs mit Inhalten der Zwischenablage im Kontext der ursprünglichen und geänderten Frage.

Der folgende Code ist Beispielcode , der im (Apple) Script Editor getestet und ausgeführt werden soll, da abgesehen vom ersten Satz in der Frage noch keine explizite und spezifische Verwendung in Automator angegeben wurde. Der Code muss möglicherweise bearbeitet werden, damit er innerhalb der unbekannten Verwendung in Automator funktioniert. Das heißt, wie geschrieben, wenn das gesamte Skript unten in Automator von selbst in eine Run AppleScript-Aktion platziert wurde, funktioniert es so wie es ist. Wenn nur Segmente des Codes verwendet werden, müssen möglicherweise einige Änderungen am vorhandenen Code vorgenommen werden.

Der folgende Code enthält ausreichend Kommentare, um insgesamt zu verstehen, was das Skript tut.


--        # 
--        # Change the 'New RichText Filename.rtf' name to the wanted filename for the target file.
--        # Make sure you leave the double-quotes even if the filename does not contain spaces!
--        # Note that '(path to desktop as text)' can also be modified as needed, e.g. changed to,
--        # '(path to documents folder as text)' or the entire segment after 'set theRichTextFileName to'
--        # can be a fully qualified POSIX pathname, e.g.: set theRichTextFileName to "/path/to/filename.rtf"
--        #  

set theRichTextFileName to POSIX path of (path to desktop as text) & "New RichText Filename.rtf"


--    #        THE REMAINING CODE SHOULD NOT NEED TO BE MODIFIED.
--    # 
--    #     Note: This code, as is, works as written and intended when run from within (Apple) Script Editor.
--    #     Some AppleScript code when wrapped in Automator may not work the same as in (Apple) Script Editor.
--    #     In cases where is does not work from a Run AppleScript action in Automator, editing will be required.
--    # 
--    #     This AppleScript code preforms the following actions, sans errors caught during File I/O operations.
--    # 
--    # 1. See it the target file exists and prompts to be overwritten if it does. If yes is selected, it continues.
--    # 
--    # 2. If the Clipboard contains RTF content, writes it to the target file using plain AppleScript.
--    # 
--    # 3. If the Clipboard contains HTML content, writes it to the target file as RTF using a 'do shell script' command.
--    # 
--    # 4. If the Clipboard does not contain any RTF/HTML content, notify the user. 
--
--        #    Notes: The 'do shell script' makes use of the following:
--        #
--        #    'osascript' to get the HTML content from the Clipboard.
--        #    The content is a Hex stream within a data wrapper and
--        #    'awk' will be used to remove/replace the data wrapper.
--        #
--        #    'awk' to remove the data wrapper from 'osascript' output
--        #    replacing it with proper HTML opening/closing Tags to
--        #    ensure it actually gets processed by 'textutil' after 'xxd'.
--        #    Without the HTML opening/closing Tags 'textutil' does not 
--        #    properly, within limits, convert the HTML Clipboard content to RTF.
--        #
--        #    'xxd' to convert the Hex data from 'osascript/awk' to ASCII text.
--        #
--        #    'textutil' to convert the ASCII text HTML from 'xxd' to RTF
--        #    formatted data and write it to the target file.


tell application "Finder"

    if exists theRichTextFileName as POSIX file then
        tell current application
            display dialog "The file \"" & theRichTextFileName & "\" already exists!" & "\n\n" & "Do you want to overwrite the file?" buttons {"No", "Yes"} default button 1 with title "File Already Exists..." with icon caution

            if the button returned of the result is "No" then
                return
            else
                tell application "Finder"
                    delete the file (theRichTextFileName as POSIX file)
                end tell
            end if
        end tell
    end if

    tell current application

        --    # Find out what class types are available for the Clipboard content
        --    # and use this information to determine which action will be taken.

        set cbInfo to get (clipboard info) as string

        if cbInfo contains "RTF" then

            try
                set richTextfromClipboard to get the clipboard as «class RTF »
            on error eStr number eNum
                display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
                return
            end try
            try
                set fileHandle to open for access theRichTextFileName with write permission
                write richTextfromClipboard to fileHandle
                close access fileHandle
            on error eStr number eNum
                display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
                try
                    close access fileHandle
                end try
            end try

        else if cbInfo contains "HTML" then

            try
                do shell script "osascript -e 'try' -e 'get the clipboard as «class HTML»' -e 'end try' | awk '{sub(/«data HTML/, \"3C68746D6C3E\") sub(/»/, \"3C2F68746D6C3E\")} {print}' | xxd -r -p | textutil -convert rtf -stdin -stdout > " & quoted form of theRichTextFileName
            on error eStr number eNum
                display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
            end try

        else

            display dialog "The Clipboard does not contain\nany usable RTF/HTML content!" buttons {"OK"} default button 1 with title "No RTF/HTML Content on Clipboard..." with icon caution

        end if

    end tell

end tell

Ursprüngliche Antwort auf die ursprünglich gestellte Frage:

Rich-Text- Inhalte aus der Zwischenablage mit AppleScript in eine Datei zu übertragen , ist etwas komplexer als ein einfacher Befehl .do shell script

Der Beispiel- AppleScript- Code unten schreibt, wenn die Zieldatei noch nicht existiert und Rich-Text- Inhalte in der Zwischenablage vorhanden sind , sie in eine Datei . Es hat alle Attribute wie der RichText- Inhalt in der Zwischenablage , wie er es beim Kopieren in die Zwischenablage hatte .

Öffnen Sie den Skript-Editor , kopieren Sie den folgenden Code und fügen Sie ihn in ein neues Dokument ohne Titel ein. Führen Sie ihn dann im Skript-Editor aus und überprüfen Sie die Ausgabe in Events/Replies . Führen Sie es ein paar Mal aus, mit und ohne Rich-Text- Inhalt in der Zwischenablage und mit und ohne Existenz der Datei auf der Festplatte, definiert durch set theRichTextFileName ...zu Beginn des Skripts .

Sie werden sehen, dass der Code sicherstellt, dass die Datei nicht existiert, um eine bestehende Datei mit dem Zielnamen und -speicherort nicht zu überschreiben, und wenn die Zwischenablage keinen Rich-Text- Inhalt enthält , wird auch dafür eine Meldung angezeigt.

Wenn Sie dies nun in einem Automator-Dienst verwenden , z. B. wenn der Dienst ausgewählten Rich-Text erhält , kann der Code so geändert werden, dass er keinen Fehler abfängt, wenn sich Rich-Text- Inhalte nicht in der Zwischenablage befinden , da der Dienst nicht im Menü Dienste angezeigt wird, wenn dies der Fall ist Rich-Text ist in einem Dokument nicht ausgewählt. Auch wenn Sie die Zieldatei an der vorgesehenen Stelle überschreiben möchten, kann der Code um sie herum ebenfalls entfernt werden. Ich werde diese Codebeispiele auch geben.


Beispielcode zum Einfügen in den Skripteditor zum Testen und Überprüfen:

set theRichTextFileName to POSIX path of (path to documents folder as text) & "New RichText Filename.rtf"

tell application "Finder"
    if exists theRichTextFileName as POSIX file then
        tell current application
            display dialog "The file \"" & theRichTextFileName & "\" already exists!" buttons {"OK"} default button 1 with title "File Already Exists..." with icon caution
        end tell
    else
        tell current application
            try
                set richTextfromClipboard to get the clipboard as «class RTF »
            on error eStr number eNum
                display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "No Rich Text Content on Clipboard..." with icon caution
                return
            end try
            try
                set fileHandle to open for access theRichTextFileName with write permission
                write richTextfromClipboard to fileHandle
                close access fileHandle
            on error eStr number eNum
                display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
                try
                    close access fileHandle
                end try
                return
            end try
        end tell
    end if
end tell

Beispielcode zur Verwendung in einem Automator - Dienst , z. B. wenn der Dienst ausgewählten Rich-Text erhält :

set theRichTextFileName to POSIX path of (path to documents folder as text) & "New RichText Filename.rtf"

tell application "Finder"
    if exists theRichTextFileName as POSIX file then
        tell current application
            display dialog "The file \"" & theRichTextFileName & "\" already exists!" buttons {"OK"} default button 1 with title "File Already Exists..." with icon caution
        end tell
    else
        tell current application
            set richTextfromClipboard to get the clipboard as «class RTF »
            set fileHandle to open for access theRichTextFileName with write permission
            write richTextfromClipboard to fileHandle
            close access fileHandle
        end tell
    end if
end tell

Beispielcode zur Verwendung in einem Automator-Dienst , z. B. wenn der Dienst ausgewählten Rich-Text erhält und die vorhandene Zieldatei überschreibt :

set theRichTextFileName to POSIX path of (path to documents folder as text) & "New RichText Filename.rtf"

tell current application
    set richTextfromClipboard to get the clipboard as «class RTF »
    set fileHandle to open for access theRichTextFileName with write permission
    write richTextfromClipboard to fileHandle
    close access fileHandle
end tell

Das folgende Bild zeigt einen beispielhaften Automator-Dienst , der die Datei „Neuer RichText-Dateiname.rtf“ aus ausgewähltem Rich-Text aus dem Dienst „Rich-Text-Datei aus Zwischenablage erstellen“ im Kontextmenü „Dienste“ (per Rechtsklick) oder Anwendungsname > Dienste > Menü erstellt , wenn Rich-Text ist in einem Dokument ausgewählt.

Automator-Dienst - Erstellen Sie eine Rich-Text-Datei aus der Zwischenablage


Jetzt sind dies nur Beispiele und es kann zusätzliche Logik codiert werden, um sie an die eigenen Bedürfnisse anzupassen. Beispielsweise könnte Code hinzugefügt werden, um den Namen einer vorhandenen Datei automatisch zu erhöhen, damit er nicht überschrieben wird, oder zur Eingabe eines neuen Dateinamens auffordern und den Vorgang abschließen oder mit einer Meldung abbrechen, dass die Datei bereits vorhanden ist usw.


Update zur Verwendung mit einem do shell script Befehl :

do shell script Wenn Sie dies wirklich mit einem Befehl tun möchten , verwenden Sie den folgenden Code/path/to/new rich text file.rtf , während Sie ihn durch einen gültigen Pfaddateinamen zu einem Speicherort ersetzen , für den Sie Schreibberechtigungen haben. \"Beachten Sie, dass Sie das Vorher und Nachher /path/to/new rich text file.rtfim eigentlichen Befehl nicht entfernen, da dies den Pfaddateinamen behandelt , wenn er Leerzeichen enthält. Wenn der Dateiname des Pfads keine Leerzeichen enthält, müssen \"Vorher und Nachher nicht verwendet werden./path/to/new rich text file.rtf

do shell script "osascript -e 'try' -e 'get the clipboard as «class RTF »' -e 'end try' | awk '{print substr($0, 12, length($0)-13)}' | xxd -r -p > \"/path/to/new rich text file.rtf\""

Hier ist die Befehlszeile , die zur einfacheren Anzeige als umbrochener Text angezeigt wird:

do shell script "osascript -e 'try' -e 'get the clipboard as «class RTF »' -e 'end try' | awk '{print substr($0, 12, length($0)-13)}' | xxd -r -p > \"/path/to/new rich text file.rtf\""

  • Während man den Code kopieren und einfügen kann (empfohlen) , wird hier trotzdem beschrieben, wie man die doppelten spitzen Anführungszeichen eingibt, die auch unter Klammern in (Sonder-)Zeichen verfügbar sind, z. B. optioncommandTin TextEdit.

    Hinweis: Denken Sie daran, dass der Abstand in «class RTF »in diesem Anwendungsfall versetzt werden soll.

    • Eingabe von Anführungszeichen mit doppeltem Winkel

      • « Linkes doppeltes spitzes Anführungszeichen, drücken Sie:option\
      • » Rechtes doppeltes Anführungszeichen, drücken Sie:shiftoption\

do shell script Beachten Sie, dass dieser Befehl wie geschrieben die Ausgabedatei überschreibt, falls sie bereits vorhanden ist, ohne dass Sie dazu aufgefordert werden! Es handelt sich entweder um eine Datei der Länge Null, wenn die Zwischenablage keinen Rich-Text-Inhalt enthält, andernfalls hat die Datei die erforderliche Länge, um den Rich-Text-Inhalt aus der Zwischenablage aufzunehmen. Offensichtlich könnte zusätzliche Logik in den osascript Befehl codiert werden . Wenn Sie jedoch mehr Komplexität benötigen, verwenden Sie besser die Methode, die zuerst in dieser Antwort vorgestellt wird. do shell script Oder die Verwendung eines externen Skripts, das per Befehl aufgerufen wird und die gesamte erforderliche Logik und Fehlerbehandlung basierend auf der Komplexität der Gesamtbedingungen, unter denen dies angewendet wird, übernimmt.

  • Warum diese Komplexität do shell script "pbpaste > /path/to/clipboard-file.rtf"vs.

Das ist eine gute Frage, und obwohl es die Option pbpastegibt , wird möglicherweise dennoch kein Rich-Text ausgegeben, selbst wenn er in der Zwischenablage vorhanden ist. Oder was ausgegeben wird, wenn es sich nicht um ASCII-Text handelt, ist keine Form von Rich-Text, die beispielsweise von TextEdit verstanden wird, und enthält nicht alle Rich-Text- Attribute , falls vorhanden, die der Inhalt der Zwischenablage enthält.-Prefer {txt | rtf | ps}pbpaste -Prefer rtf

Dies macht es erforderlich, den Rich-Text-Inhalt auf andere Weise in die Zwischenablage zu bekommen und warum get the clipboard as «class RTF »stattdessen verwendet wird. Wenn Sie einen do shell script Befehl mit this verwenden, ist eine zusätzliche Verarbeitung erforderlich, um die zurückgegebenen Daten zu verwenden , da sie sich bei der Rückgabe in einem Daten-Wrapper befinden und nicht sofort verwendbar sind und daher eine weitere Verarbeitung erfordern.

Beispielsweise Hello World!kann in Rich Text on the Clipboard in ASCII-Text so aussehen:

{\rtf1\ansi\ansicpg1252\cocoartf1187\cocoasubrtf400
{\fonttbl\f0\fnil\fcharset0 ComicSansMS;}
{\colortbl;\red255\green255\blue255;}
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural

\f0\b\fs36 \cf0 Hello World!}

Das obige Format ist leider, wenn überhaupt, in AppleScript nicht einfach zu verwenden, und ich glaube, dass das der Grund dafür ist, dass es als Hex-codierte Daten erfasst werden muss.

  • get clipboard info Ich begründe dies auf der Tatsache, dass der Befehl für den Inhalt der Zwischenablage in diesem Beispiel zwar {«class RTF », 265}unter den zurückgegebenen Informationen zurückgegeben wird, die ASCII-Textform dieses Rich-Text-Inhalts jedoch 265 Byte lang ist, aber mehr als zweimal im Hex-Format zurückgegeben wird die Bytes mit dem Data Wrapper . Die Tatsache, dass es get the clipboard as «class RTF »sowohl im Skripteditor als auch bei der Verwendung in Hex zurückgegeben wird osascript, unterstützt diese Vermutung.

Hier ist dasselbe Hello World!in Rich Text in der Zwischenablage in Hex:

7B5C727466315C616E73695C616E7369637067313235325C636F636F61727466313138375C636F636F617375627274663430300A7B5C666F6E7474626C5C66305C666E696C5C66636861727365743020436F6D696353616E734D533B7D0A7B5C636F6C6F7274626C3B5C7265643235355C677265656E3235355C626C75653235353B7D0A5C706172645C74783732305C7478313434305C7478323136305C7478323838305C7478333630305C7478343332305C7478353034305C7478353736305C7478363438305C7478373230305C7478373932305C7478383634305C7061726469726E61747572616C0A0A5C66305C625C66733336205C6366302048656C6C6F20576F726C64217D

get the clipboard as «class RTF »Was jedoch für das Hello World!obige Beispiel zurückgegeben wird, ist:

«data RTF 7B5C727466315C616E73695C616E7369637067313235325C636F636F61727466313138375C636F636F617375627274663430300A7B5C666F6E7474626C5C66305C666E696C5C66636861727365743020436F6D696353616E734D533B7D0A7B5C636F6C6F7274626C3B5C7265643235355C677265656E3235355C626C75653235353B7D0A5C706172645C74783732305C7478313434305C7478323136305C7478323838305C7478333630305C7478343332305C7478353034305C7478353736305C7478363438305C7478373230305C7478373932305C7478383634305C7061726469726E61747572616C0A0A5C66305C625C66733336205C6366302048656C6C6F20576F726C64217D»

Die hexadezimal codierte Zeichenfolge befindet sich in einem «data RTF » Wrapper , der entfernt werden muss, bevor der hexadezimal codierte Inhalt in ASCII-Text konvertiert wird, der mithilfe der E/A-Umleitung in eine Festplattendatei geschrieben werden soll, z. B. >im obigen do shell script Befehlsbeispiel .

Die Ausgabe von wird also dorthin osascript -e 'try' -e ' get the clipboard as «class RTF »' -e 'end try'geleitet ( |) awk, wo eine Teilzeichenfolge erstellt wird, wobei nur der Hex-codierte Inhalt selbst gedruckt wird, nicht der Daten-Wrapper-xxd Teil, da dieser im nächsten Schritt des Prozesses nicht ordnungsgemäß verarbeitet würde .

Es muss dann per Pipe ( |) an xxdzur Konvertierung ASCII Textin eine Plattendatei mit I/O-Umleitung geschrieben werden, z. B. >an den Zielpfad filename .

Das folgende Bild zeigt den Zwischenablage-Viewer, der zwischen ASCII-Text- und Hex-Codierungsansichten umschaltet, und zeigt Hello World!das Kopieren aus einem Rich-Text-Dokument, das in diesem Beispiel verwendet wird.

Zwischenablage-Viewer


Ich hoffe, dies vermittelt ein besseres Verständnis dafür, wie AppleScript mit Rich-Text-Inhalten in der Zwischenablage arbeitet, da in beiden Fällen eine Konvertierung von einer Hex-codierten Zeichenfolge in ASCII-Text stattfinden muss und dies im ursprünglichen Beispielcode transparent erfolgt, während eine zusätzliche Verarbeitung erforderlich ist außerhalb des AppleScript- Codes, der verarbeitet wird, osascriptwenn der do shell script Befehl in diesem Kontext verwendet wird.

Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .
@rubik's sphere, Dieser Code hatte den gleichen Fehler wie in Ihrer anderen Frage, da die Zieldatei intern überschrieben und nicht gelöscht wurde. Ich habe den Fehler korrigiert , indem ich delete the file (theRichTextFileName as POSIX file)einen Finder- tell Block in den hinzugefügten else- Zweig der if the button returned of the result is "No" then Anweisung eingefügt habe .
@rubik's sphere, Was die Änderung angeht, um die Sie gebeten haben, muss ich den Code überprüfen und sehen, was getan werden kann, aber da diese Antwort, jetzt wie sie ist, tatsächlich die ursprünglich gestellte Frage beantwortet, denke ich, dass jede Änderung sollte zuerst von Ihnen versucht und dann als separate Frage gepostet werden, wenn Sie Ihr Ziel nicht erreichen können. IMO Es ist nicht gerade fair, Monate später wiederzukommen und Änderungen an einer bereits akzeptierten und positiv bewerteten Antwort zu verlangen, die der ursprünglichen Frage zusätzliche, zuvor nicht gestellte Parameter hinzufügt.
Ich entschuldige mich. Sie haben Recht. Ich werde eine neue Frage erstellen.
Ich habe herausgefunden, wie ich der Datei Leerzeilen hinzufügen kann, wenn ich eine Nur-Text-Zwischenablage und damit eine TXT-Datei habe, aber ich konnte nicht herausfinden, wie es mit einer HTML- oder RTF-Zwischenablage geht. Hier ist diese Frage.

RTF-Dateien sind im Gegensatz zu TXT-Dateien nicht nur einfacher Text, sondern haben eine grundlegende Struktur. Um eine RTF-Datei zu erstellen, verwenden Sie die folgende Struktur (anstatt nur den reinen Text von Ihrer Tastatur):

{\rtf1\ansi\deff0 {\fonttbl {\f0 Verdana;}}
\f0\fs16
Hello World!
}

Quelle: https://www.safaribooksonline.com/library/view/rtf-pocket-guide/9781449302047/ch01.html

Ich habe meine Frage bearbeitet, damit sie klarer ist. Haben Sie eine Idee, wie ich den Text aus der Zwischenablage in die RTF-Datei einfügen kann und die RTF-Datei mit Schriftart, Größe, Farbe usw. des Texts aus der Zwischenablage übereinstimmen kann?
Ziemlich sicher, was er sagt, ist, dass Sie eine gültige .rtf-Datei haben, wenn Sie diese Metadaten in eine einfache Textdatei einfügen und dieser die Erweiterung .rtf geben.
@JonathanWarner bin ich in der Tat.
@rubik'ssphere Ersetzen Sie einfach Hello World durch Ihren Zwischenablagetext und erstellen Sie die Datei. Die Schriftart des kopierten Textes sollte die Vorgabe von Verdana dort überschreiben.
@John Ramos, in Ihrem Kommentar sagten Sie zu JonathanWarners Kommentar "... ich bin es in der Tat", aber wie Ihre Antwort geschrieben ist, das ist wirklich nicht gut impliziert, geschweige denn gibt es kein praktisches Beispiel dafür, wie man es in codiert anwendet Format, das eine bessere Antwort gewesen wäre, als es war, und keine Zweideutigkeit darüber, was Sie meinten.Rubiks Sphäre möchte jedoch keinen einfachen Text aus der Zwischenablage nehmen und daraus Rich-Text machen, er möchte den Rich-Text, der dort ist, geschrieben haben in eine Festplattendatei, sodass alle bereits vorhandenen Rich-Text-Attribute beibehalten werden und nicht diejenigen, die Sie manuell codieren müssten, um Ihre Antwort zu verwenden.
@ user3439894 Meine Antwort war nur ein guter Ausgangspunkt, vielleicht keine vollständige Antwort, da ich keine Applescripts mache. Meine beste Vermutung ist, dass die Rich-Text-Attribute des Zwischenablagetexts die gewählten Schriftart-, Farb- und Größeneinstellungen überschreiben und genau so funktionieren, wie es das OP will. Wenn meine Antwort nicht zufriedenstellend ist, kann Applescript dies möglicherweise nicht erreichen, und es ist möglicherweise erforderlich, eine App in Xcode zu erstellen. Wenn das der Fall ist, ist Stack Overflow ein guter Ort für diese Frage.
Also hoffe ich nur, dass @rubik'ssphere zumindest versucht, was ich hier habe.
@John Ramos, Sie sagten: „ Wenn meine Antwort nicht zufriedenstellend ist, denke ich, dass Applescript dies möglicherweise nicht erreichen kann, und es könnte erforderlich sein, eine App in Xcode zu erstellen. “ Haben Sie meine Antwort gelesen? Natürlich kann dies in AppleScript erfolgen, da ich die AppleScript-Antwort, die ich gegeben habe, nicht bereitgestellt hätte, wenn dies nicht möglich wäre. Ich denke, das Problem ist, wie Sie sagten, " da ich keine Applescripts mache ", und hier liegt das Problem, da Sie nie erkennen oder verstehen, warum das, was Sie für eine Antwort geschrieben haben, im Kontext der präsentierten Informationen nicht verwendbar ist innerhalb des OP. Fortsetzung im nächsten Kommentar...
Zu " Also hoffe ich nur, dass @rubik'ssphere zumindest versucht, was ich hier habe . Wenn Sie das Thema, in diesem Fall AppleScript, und seine Funktionsweise nicht verstehen, insbesondere in Bezug auf den angeforderten Kontext, ist es möglicherweise am besten, die Frage nicht zu beantworten. Ich versuche wirklich nicht, hart zu Ihnen zu sein oder Sie mit dem, was ich gesagt habe, zu verärgern, und ich glaube, wenn Sie AppleScript und den Kontext seiner Anwendung auf die im OP präsentierten Informationen verstehen würden, würden Sie es verstehen und nicht haben poste was du am anfang gemacht hast.
@ user3439894 OK, ich wollte nur ein paar Informationen zur Struktur von RTF-Dateien geben, denn das scheint eher das zu sein, was hier gefragt wird, als speziell AppleScript.

Hier sind Funktionen, die auf der Antwort von user3439894 zum Drucken der in HTML konvertierten Rich-Text-Version der Zwischenablage oder der HTML-Version der Zwischenablage basieren. Die HTML-Version der Zwischenablage ist für Text enthalten, der aus einer Webansicht kopiert wurde.

ppr(){ osascript -e'the clipboard as"RTF "'|sed 's/«data RTF //;s/»//'|xxd -r -p|textutil -convert html -stdin -stdout; }

pph(){ osascript -e'the clipboard as"HTML"'|sed 's/«data HTML//;s/»//'|xxd -r -p; }

Die sedobigen Befehle können auch durch ersetzt werden ruby -lpe'$_=$_[10..-2]'(obwohl dies die falschen Byte-Positionen im C-Gebietsschema auswählt).

In älteren Versionen von OS X pbpaste -Prefer rtfwurde die RTF-Version der Zwischenablage gedruckt, aber jetzt scheint es nur noch reinen Text zu drucken.