平时写教程到word文档会需要图文并茂的方式,所以会截很多图片,但是截取的图片都是png格式的,所以会造成word文档可能截几张图片就很大了,所以如何把截的图片以jpg形式拷贝进word呢。方法就是写一个程序把屏幕截图保存为jpg,然后再把jpg图片拷贝到剪切板。这样子word文档的体积大大减少,非常得方便
package test;
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
/**
* 测试拷贝文件到剪切板
*
* 参考:https://stackoverflow.com/questions/31798646/can-java-system-clipboard-copy-a-file
*/
public class fileToClipboard {
public static void main(String[] args) {
File file1 = new File("C:\\Users\\Administrator\\Desktop\\垃圾桶\\a.docx");
File file2 = new File("C:\\Users\\Administrator\\Desktop\\垃圾桶\\无标题.png");
ArrayList<File> fList = new ArrayList<>();
fList.add(file1);
fList.add(file2);
FileTransferable ft = new FileTransferable(fList);
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ft, new ClipboardOwner() {
@Override
public void lostOwnership(Clipboard clipboard, Transferable contents) {
//ClipboardOwner唯一的功能就是当(剪贴板)拥有者的数据被其它类覆盖时通知它.同时它可以用用通知应用程序释放关联到数据的资源的信号。
System.out.println("剪切板数据被覆盖,可以去释放资源");
}
});
}
//实现了Transferable接口的文件传输类
public static class FileTransferable implements Transferable {
private ArrayList<File> fList;
public FileTransferable(ArrayList<File> listOfFiles) {
this.fList = listOfFiles;
}
@Override
public DataFlavor[] getTransferDataFlavors() {
return new DataFlavor[]{DataFlavor.javaFileListFlavor};
}
@Override
public boolean isDataFlavorSupported(DataFlavor flavor) {
return DataFlavor.javaFileListFlavor.equals(flavor);
}
@Override
public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
return fList;
}
}
}