当前位置: 首页 > 知识库问答 >
问题:

用鼠标在PDF上选择(用户输入)

白嘉石
2023-03-14

我目前正在使用PDFBox,我正在尝试打开PDF,以便用户可以用鼠标选择要裁剪的区域,我不知道如何继续制作PDF查看器

PDPage#setCropBox(PDRectangle cropBox)

https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/pdmodel/PDPage.html#setCropBox(org.apache.pdfbox.pdmodel.common.PDRectangle)https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/pdmodel/common/PDRectangle.html

这里我唯一缺少的是用户如何决定要裁剪到哪一点(我正在考虑鼠标选择

package uk.mushow.pdftoexcel;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;

import java.io.File;
import java.io.IOException;

public class PDFToExcel extends Application {

    public static void main(String[] args) {
        launch();
    }

    @Override
    public void start(final Stage stage) {
        stage.setTitle("PDF Test");

        final FileChooser fileChooser = new FileChooser();
        final Button openButton = new Button("Select pdf");

        openButton.setOnAction(event -> {
            configureFileChooser(fileChooser);
            File file = fileChooser.showOpenDialog(stage);
            if (file != null) {
                try {
                    openFile(file);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });

        final GridPane inputGridPane = new GridPane();

        GridPane.setConstraints(openButton, 0, 1);
        inputGridPane.setHgap(6);
        inputGridPane.setVgap(6);
        inputGridPane.getChildren().add(openButton);

        final Pane rootGroup = new VBox(60);
        rootGroup.getChildren().add(inputGridPane);
        rootGroup.setPadding(new Insets(60, 60, 60, 60));

        stage.setScene(new Scene(rootGroup));
        stage.show();
    }

    private void configureFileChooser(final FileChooser fileChooser) {
        fileChooser.setTitle("pdf selector");
        fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("PDF", "*.pdf"));
    }

    private void openFile(File file) throws IOException {
        PDDocument pdDocument = PDDocument.load(file);
        //This is where I don't know how to handle the file
        PDPage pdPage = pdDocument.getPage(0);
        //Need the user to select his own cropbox but can't be just values from his head otherwise it wouldn't be accurate);
    }
}

谢啦!

编辑:添加的图像

用户如何知道选择该绿色矩形的坐标?

共有1个答案

竺承望
2023-03-14

在大多数pdf视图/注释器中获取坐标的最佳方法是添加高亮显示。这通常会提供一些用户反馈,因此这个重缩放示例的左上角距离左侧45 mm,距离顶部111.7mm(然而,这并不是全图,因为实际单位已转换为mm,所以您需要将高光数据导出到不同的单位集,不同的查看器可能会使用不同的单位集。两者都是正确的,但只是通过不同的输出显示值。

你需要“摆平”这些差异,导出评论通常可以做到这一点,然而数学可能是一个挑战,因为它是在PDF页面坐标中完成的。

    "rect": [
      227.495148,
      351.695496,
      386.449585,
      430.445496
    ],
    "subtype": "Popup",
    "annotationType": 16,
    "parentType": "Square",
    "parentId": "6R",
    "parentRect": [
      128.322571,
      24.175232,
      210.179276,
      485.779327
    ],

您将需要使用所选的库进行实验,以确定哪种库最简单,就我个人而言,我希望使用milking命令行实用程序来为我完成数学和文本输出。

 类似资料:
  • 问题内容: 我想将新的Jenkinsfile用于新工作。 我在单独的存储库中有jenkinsfile: 我在bash中通过git ls-remote从另一个gitlab存储库获得分支。然后将它们存储在变量中:branch1,branch2,brach3…。 然后我想在用户输入选择中使用这些变量 然后,我将使用git部署选定的分支。 问题是我无法在用户选择的变量中使用它。 我只需要让用户从另一个gi

  • 我想让程序根据我的扫描仪输入从ArrayList中进行选择。比如,我写早餐和甜食,它必须随机列出早餐甜食,并打印随机索引。 我还在学习Java,我只是在玩,并试图编码小项目来训练它。 下面是我已经写过的课程: 我是否可以将列表存储在变量中,可能是这样的: 我知道很难理解我,但英语不是我的主要语言,希望它能被理解。

  • 我是JavaFX的新手,我似乎找不到如何做到这一点。 我在Vbox中有一个ListView,我用一个可见的字符串列表填充它。我已经将ListView的SelectionMode设置为MULTIPLE,这允许我在按住Ctrl或Shift键的同时选择多个项目。 我希望能够单击一行并向下拖动鼠标并选择多行,但我不知道该怎么做。我已经尝试了几次搜索,似乎只找到了拖放,这不是我需要的。

  • 我正在实现一个游戏,我想让玩家点击一个特定的视图。 我希望我的控制线程等到我得到一个值回来(我已经单击了视图并处理了结果)。目前,我正在通过创建一个线程、运行一个要求它们单击的方法来执行此操作,然后进入一个当鼠标单击事件更改在time循环中使用的变量时终止的time循环。 我正在写一个游戏,其中我有一个线程不断接收事件。对于一个特定事件,我想提示用户做出响应,但要做到这一点,我需要使用JavaFX

  • 在ListView中,我可以按下< kbd>Ctrl Shift并单击项目进行选择。但是,我想拖动鼠标来选择项目(如DataGridView)。我尝试了下面的代码,我遇到了这样的问题: 我的代码:

  • 问题内容: 我从bootswatch下载了主题,并试图允许用户切换主题。切换主题后,所有引导CSS都会暂时消失,直到加载新主题为止。在加载CSS之前如何防止更改,或者在加载新主题之前切换回默认主题? index.ejs(在头) 选拔 索引控制器 选择控制器 任何帮助表示赞赏!谢谢 问题答案: 我认为这不是AngularJS的问题。我认为您的方法应该有所不同。 据我所知,主题功能通常按以下方式实现。