#javascript #java #pdf #webview #pdf.js
#javascript #java #PDF #webview #pdf.js
Вопрос:
Я пытаюсь интегрировать pdf.js в приложение Javafx. Я использую образец viewer.html от https://mozilla.github.io/pdf.js/getting_started /. Поэтому я загружаю viewer.html с пустым параметром file (поэтому сначала страница не отображается) в WebView. Затем я запускаю PDFViewerApplication.открыть из кода. При этом требуемый PDF-файл отображается нормально. Теперь, если я что-то изменю в PDF-файле и запущу PDFViewerApplication.откройте программу просмотра, которая перезагружается, но снова показывает старую версию PDF-файла.
Минимальный пример того, чего я пытаюсь достичь:
public class Test extends Application {
@Override
public void start(Stage stage) throws Exception {
HBox root = new HBox();
Scene scene = new Scene(root);
WebView webView = new WebView();
root.getChildren().add(webView);
Button btn = new Button("load");
btn.setOnAction(event -> {
try {
webView.getEngine().executeScript("PDFViewerApplication.open("" new File("latex/invoice.pdf").toURI().toURL().toString() "");");
} catch (MalformedURLException e) {
e.printStackTrace();
}
});
root.getChildren().add(btn);
stage.setScene(scene);
stage.show();
webView.getEngine().load(new File("js/web/viewer.html").toURI().toURL().toString());
}
public static void main(String[] args) {
launch(args);
}
}
Есть 2 проблемы, которые, как я подозреваю, могут возникнуть:
- Существует проблема с CORS, которая крайне маловероятна, поскольку PDF загружается один раз
- PDF-файл кэшируется любым способом в pdf.js
Поскольку я подозреваю, что проблема 2 более вероятна, мои вопросы: есть ли pdf.js кэшировать PDF-файлы, и если да, то как я могу заставить его прекратить кэширование файлов? Если он не кэширует файлы PDF, что еще может быть причиной моей проблемы?
Ответ №1:
как я могу заставить его прекратить кэширование файлов?
Вопрос старый, но я добавляю ответ, поскольку недавно столкнулся с той же проблемой, и чтобы остановить кэширование файлов, я просто добавил случайную строку после URL-адреса pdf, например:
{url}/100207300003.pdf?v678281
Это решило проблему с повторной загрузкой одного и того же файла снова и снова.
Ответ №2:
Вы говорите, что изменяете содержимое PDF, но неясно, как используется редактор PDF для сохранения изменений в полностью открытом файле.
Для редактирования требуется кэширование всего файла, чтобы вычислить внутреннюю длину файла между объектами PDF, если они добавляются или удаляются.
Естественно, мы можем добавить аннотацию в браузере, и тогда полная длина кэша с изменениями в конце может быть записана как новое имя файла.
Затем кэш можно закрыть, чтобы открыть с использованием нового имени файла. Открытие старого имени файла не будет включать никаких изменений.