問題の説明: ユーザーが印刷画面ボタンを押してから、アプリケーションの貼り付けボタンをクリックします。その画像はサーバーに保存されます。
スタックオーバーでグーグル検索して答えを見つけ、次のコードを使用しました
public Image getImageFromClipboard()
{
Clipboard systemClipboard = (Clipboard) AccessController.doPrivileged(new PrivilegedAction() {
public Object run()
{
Clipboard tempClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
return tempClipboard;
}
});
// get the contents on the clipboard in a
// Transferable object
Transferable clipboardContents = systemClipboard.getContents(null);
// check if contents are empty, if so, return null
if (clipboardContents == null)
return null;
else
try
{
// make sure content on clipboard is
// falls under a format supported by the
// imageFlavor Flavor
if (clipboardContents.isDataFlavorSupported(DataFlavor.imageFlavor))
{
// convert the Transferable object
// to an Image object
Image image = (Image) clipboardContents.getTransferData(DataFlavor.imageFlavor);
return image;
}
} catch (UnsupportedFlavorException ufe)
{
ufe.printStackTrace();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
/*try {
Robot robot;
robot = new Robot();
final GraphicsConfiguration config
= GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration();
final BufferedImage screenshot = robot.createScreenCapture(config.getBounds());
return screenshot;
} catch (AWTException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
return null;
}
アプリケーションが自分のマシンで実行されていて、Print Screen を押すと、このコードはうまく機能します。画像は利用可能で保存されます。
私の問題は、このアプリケーションを別のサーバーにデプロイし、別のマシンでアプリケーションを実行しているときです。ユーザーが印刷画面を押してから、アプリケーションのボタンをクリックすると。クリップボードを検索し、サーバーのクリップボードに画像がないため、サーバーは画像を見つけられません。画像はクライアントのデスクトップ クリップボードで利用できます。
JSF/primefaces を使用してサーバーからクライアントのクリップボードにアクセスするのを手伝ってください。または他の代替方法。
私はprimefaces 3.4を使用しています。サーバーはweblogic 10.3.5です。