Я использую JXBrowser 6.2. У меня есть требование создать базу 64 из Canvas как в Windows, так и в Linux. Мне удалось сгенерировать правильный текст Base64 в windows, но когда я использовал тот же код в RedHat Linux, я получил неправильный текст Base 64. X-сервер работает в Linux. Ниже мой код.
Кто-нибудь, пожалуйста, дайте мне знать, как это исправить?
String linuxBrowserDirectory = "/tmp/";
String chartReportPath = "test.html"
String base64Text = null;
// Configure JX Browser
BrowserPreferences.setChromiumSwitches("--disable-web-security", "--allow-file-access-from-files");
BrowserContext context;
context = new BrowserContext(new BrowserContextParams(linuxBrowserDirectory));
browser = new Browser(BrowserType.LIGHTWEIGHT, context);
LOGGER.info(
"Browser Files Created : " + browser + " inside folder : " + linuxBrowserDirectory);
Thread.sleep(1000);
browser.setSize(1280, 1024);
Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>() {
@Override
public void invoke(Browser browser) {
browser.loadURL("file://" + chartReportPath);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
LOGGER.error(e.getMessage(), e);
}
String js = "var instanceData = " + jsonSeries + ";\n";
js += "drawChart(instanceData);";
browser.executeJavaScript(js);
}
});
Thread.sleep(1000);
DOMDocument document = browser.getDocument();
DOMElement element = document.getDocumentElement();
Map<String,String> attributes = element.findElement(By.id("canvasImage")).getAttributes();
base64Text = attributes.get("src"); // base 64 text is incorrect
// Clearing browser cache and disposing it
browser.getCacheStorage().clearCache();
browser.dispose();
HTML Скрипт для получения Base 64
setTimeout(function(){
var canvas = document.getElementById("canvasId");
var img = new Image();
img.id = "canvasImage";
img.src = canvas.toDataURL("image/png");
img.crossOrigin = "anonymous";
document.body.appendChild(img);
},1000);