从NSPasteboard复制并粘贴文本+图像

时间:2012-02-07 14:27:41

标签: macos copy-paste nspasteboard

我们正在开发一个C ++ Qt applciation,它可以复制外部应用程序中的选定文本和/或图像,对其进行修改然后将其粘贴回来。由于我们在Mac上,我们正在使用Objective-C做这一部分。

我们在尝试从粘贴板获取图像时遇到问题。它适用于文本,但我们不确定如何处理图像或文本+图像的组合。 由于我们不知道用户可能选择什么,我们应该能够对粘贴板的内容进行通用检索以对其进行修改并将其放回到粘贴板中。

我们试试这个:

//we thought about retrieving some generic item from pasteboard, using NSPasteboardItem
NSArray *classes = [[NSArray alloc] initWithObjects:[NSPasteboardItem class], nil];
NSDictionary *options = [NSDictionary dictionary];
NSArray *auxArray = [[NSPasteboard generalPasteboard] readObjectsForClasses:classes options:options];
NSData *archived_data = [auxArray objectAtIndex:0];

我们处理文字的解决方案是:

NSString *text = [[NSPasteoard generalPasteboard] stringForType:NSStringPboardType];
string text_str = string([text UTF8String]);

它没有用,所以,我们如何从粘贴板中获取用户选择? 我们需要获取原始字节或rtf内容,以便根据需要对其进行修改,然后将其放回粘贴板并粘贴回来替换原始用户选择。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为这个功能可以帮到你

    /* Force table to not be like tables anymore */
    table.CSSTableGenerator,.CSSTableGenerator thead,.CSSTableGenerator tbody,.CSSTableGenerator th,.CSSTableGenerator td,.CSSTableGenerator tr { 
        display: block; 
    }

    /* Hide table headers (but not display: none;, for accessibility) */
    .CSSTableGenerator thead tr { 
        position: absolute;
        top: -9999px;
        left: -9999px;
    }

    .CSSTableGenerator tr { border: 1px solid #ccc; }

    .CSSTableGenerator td { 
        /* Behave  like a "row" */
        border: none;
        border-bottom: 1px solid #eee; 
        position: relative;
        padding-left: 50%; 
    }

    .CSSTableGenerator td:before { 
        /* Now like a table header */
        position: absolute;
        /* Top/left values mimic padding */
        top: 6px;
        left: 6px;
        width: 45%; 
        padding-right: 10px; 
        white-space: nowrap;
    }       

}

/* Smartphones (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px) {
    body { 
        padding: 0; 
        margin: 0; 
        width: 320px; }
    }

/* iPads (portrait and landscape) ----------- */
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
    body { 
        //width: 495px; 
    }
}