A menos que necesites editar la imagen en Vista Previa, yo sugeriría dejarla fuera de la ecuación por completo.
Utilizo el siguiente script de Python que guarda cualquier imagen del portapapeles en un archivo PDF, utilizando un diálogo de guardado. (Si el archivo existe, añade la imagen como una nueva página). Puede incrustarlo en un flujo de trabajo de Automator con una acción Ejecutar Shell script, o añadirlo a la carpeta /Library/, y puede acceder a él utilizando el menulet . (Las Preferencias de script Editor.app habilitan el menulet).
#!/usr/bin/python
from AppKit import NSPasteboard, NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, NSImage, NSSavePanel, NSApp
from Foundation import NSURL
import Quartz as Quartz
import os, syslog
def save_dialog(directory, filename):
panel = NSSavePanel.savePanel()
print (panel)
panel.setTitle_("Save clipboard")
myUrl = NSURL.fileURLWithPath_isDirectory_(directory, True)
panel.setDirectoryURL_(myUrl)
panel.setNameFieldStringValue_(filename)
NSApp.activateIgnoringOtherApps_(True)
ret_value = panel.runModal()
if ret_value:
return panel.filename()
else:
return ''
def main():
destination = os.path.expanduser("~/Desktop/")
outfile = save_dialog(destination, "Clipboard.pdf")
myFavoriteTypes = [NSPasteboardTypePDF, NSPasteboardTypeTIFF, NSPasteboardTypePNG, NSTIFFPboardType, NSPICTPboardType, 'com.adobe.encapsulated-postscript']
pb = NSPasteboard.generalPasteboard()
best_type = pb.availableTypeFromArray_(myFavoriteTypes)
if best_type:
clipData = pb.dataForType_(best_type)
if clipData:
image = NSImage.alloc().initWithPasteboard_(pb)
if image:
page = Quartz.PDFPage.alloc().initWithImage_(image)
if os.path.exists(outfile):
pdfURL = NSURL.fileURLWithPath_(outfile)
myFile = Quartz.PDFDocument.alloc().initWithURL_(pdfURL)
if myFile:
pagenum = myFile.pageCount()
myFile.insertPage_atIndex_(page, pagenum)
print ("Image added to Clipboard file.")
else:
pageData = page.dataRepresentation()
myFile = Quartz.PDFDocument.alloc().initWithData_(pageData)
myFile.writeToFile_(outfile)
print ("Clipboard file created.")
else:
print ("No clipboard image data was retrieved.")
print ("These types were available:")
print (pb.types())
if __name__ == "__main__":
main()