JXBrowser отображает Invalid Base 64, когда Canvas.toDataURL вызывается в режиме Headless в Linux - PullRequest
0 голосов
/ 12 июля 2020

Я использую 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); 
...