react-pdf:异步使用 PDFDownloadLink 而不会阻塞应用程序的其余部分

问题描述

我正在使用 private void clickConfirmWindow(WebDriver driver,String element_id,String name) { // We check if warning window is displayed using button ID System.out.println("Searching " + name + " using " + element_id); if (isClickable(element_id,10)) { System.out.println("Found " + name + " using " + element_id); driver.findElement(By.id(element_id)).click(); } } private void waitForProgressBar() { new webdriverwait(driver,30).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@class='ngx-loading-text center-center' and starts-with(.,'Loading')]"))); } private Boolean isClickable(String element_id,int timeOut) { try { new webdriverwait(driver,timeOut).until(ExpectedConditions.visibilityOfElementLocated(By.id(element_id))); return true; } catch (TimeoutException e) { return false; } } 包中的 PDFDownloadLink 在我的应用程序中动态生成 PDF,并允许用户根据传递给生成 PDF 的组件的数据下载报告文档。但是这个PDF有400多页需要渲染,这个操作会阻塞主线程几秒钟。有什么方法可以使此操作异步,以便在生成 PDF 时应用程序的其余部分将继续运行?此外,我希望能够缓存结果,因为传递给组件的数据可能来自大约 8 个不同的数据数组,这些数组变化不大,因此我宁愿不必在这些数组之间切换如果给定数组的 PDF 之前已经生成过一次,则重新渲染 PDF...我猜 blob 数据需要存储在某个地方,也许是 localStorage?

react-pdf

解决方法

我终于在解决这个确切问题的 issue on github 中找到了答案:

您的功能请求是否与问题有关?请描述。 这是一种改进。目前,如果您使用“PDFDownloadLink”,则会在组件加载时生成 PDF。

描述您想要的解决方案 这不是强制性的,但准备好下载多个大型 PDF 并不是最好的方法,因为并非每个用户都需要它。

描述您考虑过的替代方案 我使用 EVP_Digest 函数生成 blob 和 pdf() lib 来下载它:

file-saver

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...