Просмотр PDF-файлов в приложении JavaFX с ICEpdf? - PullRequest
0 голосов
/ 10 февраля 2020

Я видел много тем об этом, но большинство из них старые.

Я - новый ученик Java и попытался построить свой первый проект, чтобы я мог применить то, что я изучил, Идея проекта проста, и это программа, которая приносит все PDF-файлы, которые у вас есть, отображает их для вас, позволяет открывать и классифицировать их, показывает процент чтения и многое другое.

Я закончил раздел, касающийся извлечения и обработки файлов PDF и добавления информации о них в базу данных, которая использовалась для этой библиотеки PDFBox и Derpy, интерфейсная часть почти завершена.

И речь идет об открытии файлов PDF. Я попытался использовать ICEpdf и преуспел в этом, но у меня были проблемы с отображением большого количества файлов PDF, так как шрифт не отображался четко, и не было много изображений, которые не появлялись, а в файлах Arabi c PDF много текста появлялось в форма прямоугольников.

Кроме того, формат ICEpdf плох и трудно изменить язык и формат отображения.

Я пытался использовать PDF. js, но не смог, возможно из-за моего отсутствия опыта. Действительно, я видел ответ, используя PDF. js, но он не работал для меня, хотя я написал тот же код в соответствии с моей программой: { ссылка }

Это код, который вы использовали для просмотра PDF-файлов с ICEpdf:

import javafx.embed.swing.SwingNode;
import javafx.scene.layout.BorderPane;
import org.icepdf.ri.common.SwingController;
import org.icepdf.ri.common.SwingViewBuilder;
import org.icepdf.ri.util.FontPropertiesManager;
import org.icepdf.ri.util.PropertiesManager;

import javax.swing.*;
import java.lang.reflect.InvocationTargetException;
import java.util.ResourceBundle;

public class PDFFXMLController {

    private SwingController swingController;
    private JComponent viewerPanel;


    public void createViewer(BorderPane borderPane) {
        try {
            SwingUtilities.invokeAndWait(() -> {
                swingController = new SwingController();
                swingController.setIsEmbeddedComponent(true);
                PropertiesManager properties = new PropertiesManager(System.getProperties(),
                        ResourceBundle.getBundle(PropertiesManager.DEFAULT_MESSAGE_BUNDLE));
                properties.set(PropertiesManager.PROPERTY_SHOW_TOOLBAR_FIT, "true");
                properties.set(PropertiesManager.PROPERTY_SHOW_TOOLBAR_ROTATE, "true");
                properties.set(PropertiesManager.PROPERTY_SHOW_TOOLBAR_TOOL, "true");
                properties.set(PropertiesManager.PROPERTY_DEFAULT_ZOOM_LEVEL, "1.25");
                properties.setBoolean(PropertiesManager.PROPERTY_SHOW_STATUSBAR_VIEWMODE, Boolean.FALSE);
                properties.set(PropertiesManager.PROPERTY_SHOW_TOOLBAR_PAGENAV, "true");
                ResourceBundle messageBundle = ResourceBundle.getBundle(PropertiesManager.DEFAULT_MESSAGE_BUNDLE);
                new FontPropertiesManager(properties, System.getProperties(), messageBundle);
                swingController.getDocumentViewController().setAnnotationCallback(
                        new org.icepdf.ri.common.MyAnnotationCallback(swingController.getDocumentViewController()));
                SwingViewBuilder factory = new SwingViewBuilder(swingController, properties);
                viewerPanel = factory.buildViewerPanel();
                viewerPanel.revalidate();
                SwingNode swingNode = new SwingNode();
                swingNode.setContent(viewerPanel);
                borderPane.setCenter(swingNode);

                swingController.setToolBarVisible(false);
                swingController.setUtilityPaneVisible(false);
            });
        } catch (InterruptedException | InvocationTargetException ignored) {
        }
    }

    public void openDocument(String document) {
        SwingUtilities.invokeLater(() -> {
            swingController.openDocument(document);
            viewerPanel.revalidate();
        });
    }
}
...