【问题标题】:PDFBox PDFTextStripperByArea region coordinatesPDFBox PDFTextStripperByArea 区域坐标
【发布时间】:2012-01-20 22:40:36
【问题描述】:

中的矩形是什么尺寸和方向

PDFTextStripperByArea的函数addRegion(String regionName, Rectangle2D rect)

换句话说,矩形R从哪里开始,它有多大(原点值的尺寸,矩形的尺寸)在什么位置如果将new Rectangle(10,10,100,100) 作为第二个参数给出,它的方向是(图中蓝色箭头的方向)?

【问题讨论】:

    标签: pdfbox


    【解决方案1】:
    Code in java using PDFBox.
    
     public String fetchTextByRegion(String path, String filename, int pageNumber) throws IOException {
            File file = new File(path + filename);
            PDDocument document = PDDocument.load(file);
            //Rectangle2D region = new Rectangle2D.Double(x,y,width,height);
            Rectangle2D region = new Rectangle2D.Double(0, 100, 550, 700);
            String regionName = "region";
            PDFTextStripperByArea stripper;
            PDPage page = document.getPage(pageNumber + 1);
            stripper = new PDFTextStripperByArea();
            stripper.addRegion(regionName, region);
            stripper.extractRegions(page);
            String text = stripper.getTextForRegion(regionName);
            return text;
        }
    

    【讨论】:

    • 你没有回答这个问题。这个问题清楚地要求解释区域矩形值的语义,而不是一些代码。请尊重您回答的问题。
    【解决方案2】:
    new Rectangle(10,10,100,100)
    

    表示矩形的左上角位于 (10, 10) 位置,因此距离 PDF 文档的左侧和顶部 10 个单位。这里的“单位”是 1 pt = 1/72 英寸。

    第一个 100 代表矩形的宽度,第二个代表高度。 综上所述,右图是第一张。

    我编写了这段代码来提取页面的某些区域作为函数的参数:

    Rectangle2D region = new Rectangle2D.Double(x, y, width, height);
    String regionName = "region";
    PDFTextStripperByArea stripper;
    
    stripper = new PDFTextStripperByArea();
    stripper.addRegion(regionName, region);
    stripper.extractRegions(page);
    

    所以,x 和 y 是 Rectangle 左上角的绝对坐标,然后你指定它的宽度和高度。 page 是一个 PDPage 变量,作为该函数的参数。

    【讨论】:

    • 但是如何确定一个PDF文件的总width/height呢?即width(height) 对于 PDF 文件可以有多大?
    • 我会建议我们为所有 4 个数字使用不同的数字,例如 15、10、50、100,这样更容易描述每个数字所指的内容。
    • 如果你打开 Adob​​e Reader,你可以去编辑 -> 分析 -> 测量工具,并用它来测量文档的各个部分
    【解决方案3】:

    正在考虑做这样的事情,所以我想我会传递我发现的东西。

    这是使用 itext 创建我的原始 pdf 的代码。

    import com.lowagie.text.Document
    import com.lowagie.text.Paragraph
    import com.lowagie.text.pdf.PdfWriter
    
    class SimplePdfCreator {
        void createFrom(String path) {
            Document d = new Document()
            try {
                PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream(path))
                d.open()
                d.add(new Paragraph("This is a test."))
                d.close()
            } catch (Exception e) {
                e.printStackTrace()
            }
        }
    }
    

    如果你打开 pdf,你会在左上角看到文本。这是显示您正在寻找的内容的测试。

    @Test
    void createFrom_using_pdf_box_to_extract_text_targeted_extraction() {
        new SimplePdfCreator().createFrom("myFileLocation")
        def doc = PDDocument.load("myFileLocation")
        Rectangle2D.Double d = new Rectangle2D.Double(0, 0, 120, 100)
        def stripper = new PDFTextStripperByArea()
        def pages = doc.getDocumentCatalog().allPages
        stripper.addRegion("myRegion", d)
        stripper.extractRegions(pages[0])
        assert stripper.getTextForRegion("myRegion").contains("This is a test.")
    }
    

    位置 (0, 0) 是文档的左上角。宽度和高度是向下和向右。我能够将范围缩小到 (35, 52, 120, 3) 并且仍然可以通过测试。

    所有代码都是用 groovy 编写的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      相关资源
      最近更新 更多