Insertando líneas en blanco en un archivo RTF con AppleScript

1

¿Puede alguien decirme cuál es la mejor manera de insertar automáticamente una línea en blanco en la parte superior e inferior de estos archivos .rtf recién creados, para estas dos piezas de código separadas?

Primer fragmento de código (para cuando el portapapeles contiene texto enriquecido):

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 theRichTextFilepath 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

Segundo fragmento de código (para cuando el portapapeles contiene HTML):

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 theRichTextFilepath
on error eStr number eNum
    display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with icon caution
end try

Las líneas en blanco no tienen que ser de un tipo de fuente o tamaño de fuente predeterminados; las líneas en blanco simplemente deben coincidir con el estilo del archivo .rtf circundante (es decir, el estilo del texto enriquecido en el portapapeles).

    
pregunta rubik's sphere 09.02.2017 - 20:48

1 respuesta

3

Puedes usar este Apple-Coco:

-- Cocoa-AppleScript-- you need these lines in your script
use framework "Foundation"
use scripting additions

on insertTextInRTFFile(f) -- the parameter must be the posix path of an existing file, example  --> "/Users/someName/Desktop/xyz.rtf"
    set myText to linefeed -- the text to insert in the rtf (a blank line as example)
    tell current application
        set fileURL to its (NSURL's fileURLWithPath:f)
        set myOption to its (NSDictionary's alloc()'s initWithObjectsAndKeys_(its NSRTFTextDocumentType, its NSDocumentTypeDocumentOption, missing value))
        set {attrString, docAttrib, err} to its ((NSMutableAttributedString's alloc())'s initWithURL:fileURL options:myOption documentAttributes:(reference) |error|:(reference)) -- get the attributed string from the RTF file
        if attrString is missing value then error err's localizedDescription() as text -- not a RTF file or not a valid path

        -- it use the string in the 'myText' variable to create an attributed string 
        set firstline to its ((NSAttributedString's alloc())'s initWithString:myText attributes:(attrString's attributesAtIndex:0 effectiveRange:(missing value))) --  create an attributed string with the style of the first character
        set lastline to its ((NSAttributedString's alloc())'s initWithString:myText attributes:(attrString's attributesAtIndex:((attrString's |length|()) - 1) effectiveRange:(missing value))) --  create an attributed string with the style of the last character
    end tell
    attrString's insertAttributedString:firstline atIndex:0 -- insert an attributed string (blank line) at the top
    attrString's appendAttributedString:lastline -- insert an attributed string (blank line) at bottom
    set rtfData to attrString's RTFFromRange:{0, attrString's |length|()} documentAttributes:docAttrib -- create the data from an attributed string
    rtfData's writeToFile:f atomically:true -- write the data to the RTF file
end insertTextInRTFFile

Después de que su script haya escrito en el archivo RTF:  simplemente llame al controlador insertTextInRTFFile() con la ruta posix del archivo RTF como parámetro.

    
respondido por el jackjr300 11.02.2017 - 21:59

Lea otras preguntas en las etiquetas