我看过很多关于它的话题,但大部分都是旧的。
我是一个新的 Java 学习者,并尝试构建我的第一个项目,以便我可以应用我所学的知识,该项目的想法很简单,它是一个程序,它可以带来您拥有的所有 PDF 文件并为您显示它们并允许它们被打开和分类,并显示阅读百分比和许多其他内容。
我已经完成了与获取和处理 PDF 文件相关的部分,并将有关它们的信息添加到用于该 PDFBox 和 Derpy 库的数据库中,界面部分几乎完成了。
它是关于打开 PDF 文件的。我尝试使用 ICEpdf 并成功了,但是我在显示很多 PDF 文件时遇到了问题,因为字体没有清晰显示,没有很多图片没有出现,而且在阿拉伯 PDF 文件中,很多文本以以下形式出现盒子。
另外,ICEpdf格式不好,很难改变显示语言和格式。
我尝试使用 PDF.js 但未能这样做,可能是因为我缺乏经验。确实,我在这里看到了使用 PDF.js 的响应,但即使我根据我的程序编写了相同的代码,它也对我不起作用: https ://stackoverflow.com/a/42040344/12782195
此代码用于查看 ICEpdf 的 pdf 文件:
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();
});
}
}