java-PDF读取一页某一区域内容

2023-10-26

首先还是我的风格,先看效果

在某一页pdf中获取某一块区域的内容和图片

在这里插入图片描述
在这里插入图片描述

这样就能获取想要的东西了


上代码

这里需要注意maven 是两部分
在这里插入图片描述

	<!-- pdf转换 -->
        <dependency>
            <groupId>e-iceblue</groupId>
            <artifactId>spire.pdf</artifactId>
            <version>3.4.2</version>
        </dependency>
    
    <!-- pdf转换 -->
    <repositories>
        <repository>
            <id>com.e-iceblue</id>
            <url>http://repo.e-iceblue.cn/repository/maven-public/</url>
        </repository>
    </repositories>

一个完整的工具类

import com.spire.pdf.*;
import com.spire.pdf.exporting.PdfImageInfo;
import com.spire.pdf.graphics.PdfGraphicsUnit;
import com.spire.pdf.graphics.PdfUnitConvertor;

import javax.imageio.ImageIO;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;

/**
 * @author: 云
 * @date: 2020/8/24 20:01
 * @version: 1.0
 */
public class cs {

    public static void main(String[] args) throws IOException {
        //pdf位置
        String input = "C:\\Users\\zhangyunhao\\Desktop\\1231.pdf";

        //Load the PDF file
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile(input);

        //Create a new txt file to save the extracted text
        String result = "D:\\ExtractText.txt"; //存入txt
        File file = new File(result);
        if (!file.exists()) {
            file.delete();
        }
        file.createNewFile();
        FileWriter fw = new FileWriter(file, true);
        BufferedWriter bw = new BufferedWriter(fw);

        //Get the first page
        PdfPageBase page = pdf.getPages().get(0);

        /**
         * 这里是需要注意的
         * 这里的 磅 是pdf的 单位
         * 
         * 我们只能通过像素来转换  在测量的时候页面一样要100% 不然会有误差
         * 我们只能通过像素来转换  在测量的时候页面一样要100% 不然会有误差
         * 我们只能通过像素来转换  在测量的时候页面一样要100% 不然会有误差
         *
         * pdf的坐标是从pdf的左上角开始,而不是页面的左上角
         * pdf的坐标是从pdf的左上角开始,而不是页面的左上角
         * pdf的坐标是从pdf的左上角开始,而不是页面的左上角
         *
         */

        //磅  转 像素
//        PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
//        float pixelWidth = unitCvtr.convertUnits((float) 514, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
//        float pixelHeight = unitCvtr.convertUnits((float) 261, PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel);
        
        //像素 转 磅
        PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
        //                                           这里就是测量的像素
        float pointWidth = unitCvtr.convertUnits((float) 1116, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
        float pointHeight = unitCvtr.convertUnits((float) 831, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
        float x = unitCvtr.convertUnits((float) 0, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
        float y = unitCvtr.convertUnits((float) 1072, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);

        //Extract text from a specific rectangular area within the page
        // 需要 x y 宽度 高度 四个参数 来确定矩形位置
        String text = page.extractText(new Rectangle2D.Float(x, y, pointWidth, pointHeight));
        System.out.println(pointWidth + "*" + pointHeight);
        //这个可以获取到某个页面的图片的具体信息 输出的 x,y 都是左上角
        PdfPageBase firstPage = pdf.getPages().get(0);
        PdfImageInfo[] imageInfo = firstPage.getImagesInfo();
        //循环 比较
        Rectangle2D bounds = null;
        for (int i = 0; i < imageInfo.length; i++) {
            bounds = imageInfo[i].getBounds();
            //判断 图片是否在选中的区域里
            if (bounds.getX() <= pointWidth && bounds.getY() <= pointHeight + y && bounds.getX() >= x && bounds.getY() >= y && bounds.getWidth() <= pointWidth && bounds.getHeight() <= pointHeight) {
                // 存入
                BufferedImage image = imageInfo[i].getImage();
                ImageIO.write(image, "PNG", new File("D:\\123" + i + ".png"));
            }
        }

        bw.write(text);

        bw.flush();
        bw.close();
        fw.close();

    }

}

然后就可以了


这里带一点福利,java截图

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

/**
 * 截屏
 */
public class CameraTest {

    private String filePreStr; // 默认前缀(选择存储路径例如: D:\\)
    private String defName = "cameraImg";  // 默认截图名称
    static int serialNum = 0;  //截图名称后面的数字累加
    private String imageFormat; // 图像文件的格式
    private String defaultImageFormat = "png"; //截图后缀
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //获取全屏幕的宽高尺寸等数据

    public CameraTest() {
        filePreStr = defName;
        imageFormat = defaultImageFormat;
    }

    public CameraTest(String s, String format) {
        filePreStr = s;
        imageFormat = format;
    }

    public void snapShot() {
        try {
            // *** 核心代码 *** 拷贝屏幕到一个BufferedImage对象screenshot         
            BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(300, 600, 280, 400));
            serialNum++;
            // 根据文件前缀变量和文件格式变量,自动生成文件名
            String name = filePreStr + String.valueOf(serialNum) + "." + imageFormat;
            File f = new File(name);
            System.out.print("Save File " + name);
            // 将screenshot对象写入图像文件
            ImageIO.write(screenshot, imageFormat, f);
            System.out.print("..Finished!\n");
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
// 运行之后,即可将全屏幕截图保存到指定的目录下面<br>    
// 配合前端页面上面的选择尺寸等逻辑,传到后台,即可实现自由选择截图区域和大小的截图<br>
    public static void main(String[] args) {
        CameraTest cam = new CameraTest("d:\\Hello", "png");//
        cam.snapShot();
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java-PDF读取一页某一区域内容 的相关文章

  • 如何以最小的内存占用直接将大内容流式传输为 PDF?

    我正在尝试以最小的内存占用 例如每个客户端 线程 20 MB 将格式化数据的大内容 例如 200 MB 流式传输为 PDF PDF结构是用Adobe postscript编写的 直接用PDF postscript格式编写比较复杂 我一直在使
  • PHP:PDF 生成

    我目前正在一个网站上工作 基本上 当用户搜索某些内容时 我应该能够为每个搜索结果项生成 pdf 我知道 fpdf 的一种选择 有没有比 fpdf 更简单的东西或某些服务 例如如果我发送搜索结果页面的 url 它会将生成的 pdf 发送回给我
  • (以编程方式)比较 PDF 的可靠方法? [复制]

    这个问题在这里已经有答案了 可能的重复 比较大量 PDF 文件的工具 https stackoverflow com questions 145657 tool to compare large numbers of pdf files 我
  • 使用 Tabula 从 PDF 中提取表格

    我遇到了一个名为 Tabula 的很棒的图书馆 它几乎成功了 不幸的是 第一页上有很多无用的区域 我不希望 Tabula 提取这些区域 根据文档 您可以指定要从中提取的页面区域 但是 无用区域仅位于 PDF 文件的第一页 因此 对于所有后续
  • 如何用 Java 从 XML 创建 PDF?

    目前 我正在 Java 中创建一个 XML 文件 并通过使用 XSL XSLT 对其进行转换来将其显示在 JSP 页面中 现在我需要获取该 XML 文件并在 PDF 中显示相同的信息 有没有办法通过使用某种 XSL 文件来做到这一点 我见过
  • 如何以编程方式填写pdf文件? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法加载文件或程序集“Microsoft.ReportViewer.ProcessingObjectModel,版本=10.0.0.0”

    使用 MVC5 和 rdlc 生成 pdf 它在本地主机中工作正常 但是当我尝试生成报告时将应用程序部署到服务器时 出现错误 某些组件丢失 webapp 应用程序中的服务器错误 Could not load file or assembly
  • 生成的 pdf 中的图像损坏了发送到服务器的 pdf

    我正在使用 jsPDF 在 Web 应用程序中创建 PDF 文档 将该文档发送到 Perl 并让 Perl 通过电子邮件发送它 效果很好 但是 当我将图像添加到 PDF 文档时 它不再起作用 因为 Adob e Reader 说该文件已损坏
  • 使用 PHP 上传 DOC 或 PDF

    我可以很好地上传图像 但是当我将类型从 image jpg image gif 更改为 application msword 和 application pdf 时 它不起作用 这是我的代码 完全相同的代码适用于图像 但对于上传文档和 pd
  • PhantomJs - 如何渲染多页 PDF

    我可以使用 phantomJS 创建一页 PDF 但我在文档中找不到如何创建不同的页面 每个页面都来自 html 视图 并将它们放入一个 PDF 中 我正在为 NodeJS 使用 node phantom 模块 只需要指定一个paperSi
  • 将多页 PDF 转换为单个图像

    我必须将多页 PDF 文档转换为 png 图像 我尝试使用 ImageMagick 但无法获得最终结果 convert document pdf document png or convert adjoin document pdf doc
  • 使用php动态地将内容插入到pdf文件中

    我有一本 Word 电子书 在分发给客户之前我将其转换为 PDF 我想将他们的电子邮件地址动态插入到电子书中的所有链接中 以允许他们访问我网站上的会员专用内容 并且我想作为图书下载过程的一部分动态执行此操作 我简单地看了一下http us
  • 将多个 Excel 工作表范围转换为 PDF VBA

    下面的代码是获取 Col E 的状态 如果它是 Include 那么其相应的工作表范围将被转换为 PDF 我已经尝试过了 但它无法正常工作并收到错误invalid procedure call or argument在线上 rng Expo
  • 使用 window.print 内容将网页下载为 pdf

    我想要一个链接 当单击该链接时 会自动开始下载网页的可打印版本 我正在使用Moodle 我想要的内容是完全相同的如果我使用 ctrl p 下载页面并保存为 pdf 或使用 a href Download web page a 我正是想要该内
  • 如何用VB.net生成pdf文件?

    我想生成一个非常简单的报告 其中包含一些图像和文本 我想知道是否有一种方法可以使用 vb net 生成 pdf 文件 您可以使用 Visual Studio 附带的 Crystal Reports 对象导出到 PDF 文件
  • 打开 PDF 或文件夹

    我尝试打开在 Flash Player 中运行的 swf 应用程序中通过鼠标单击触发的 PDF 或文件夹 在查找器 资源管理器中 通过 urlRequest 打开 PDF 和navigateToUrl 总是打开浏览器 我读到this htt
  • 我在 iText 中的希伯来语文本是左对齐的

    我使用以下代码在 iText 中生成希伯来语文本 它工作得很好 创建希伯来字体 并使文本从右到左流动 但文本是左对齐而不是右对齐 谁能帮我让它右对齐吗 请注意 我尝试使多列文本右对齐 并使段落右对齐 但无济于事 Thanks static
  • 用 Java 创建 PDF 的缩略图

    我正在寻找一个 Java 库 它可以获取 PDF 并从第一页创建缩略 图 PNG 我已经看过 JPedal 但其疯狂的许可费完全令人望而却步 我目前正在使用 iText 来操作 PDF 文件 但我相信它不会生成缩略图 我可以在命令行上使用
  • Python:urlretrieve PDF下载

    我在 Python 中使用 urllib 的 urlretrieve 函数来尝试从网站上获取一些 pdf 它 至少对我来说 已停止工作并正在下载损坏的数据 15 KB 而不是 164 KB 我已经用几个 pdf 对此进行了测试 但都没有成功
  • PDF解析提取CheckBox字段值

    我有一个 PDF 文档 想要从 PDF 和 Chackbox 和单选按钮类型字段值中提取内容 PDF 文件的版本为 1 4 Acrobat 5 x 可以从网络浏览器生成 CheckBox appear such types in PDF 我

随机推荐

  • xshell连接ubuntu失败排错指南

    本人在学习linux系统中出现了一些远程连接失败的问题 以此笔记记录下排错过程 注意 VMware桥接模式需要让虚拟机的ip和物理机的ip在同一网段 因此需要手动配置linux系统网卡 NAT模式虚拟机ip不需要和物理机ip在同一个网段 但
  • Python Tkinter详解 (二)Label标签的使用

    一个简单到不能再简单的标签 import tkinter as tk window tk Tk window title Label的使用 window geometry 400x400 label tk Label window text
  • 【动手学深度学习v2】第二章预备知识-2.1入门

    入门 深度学习领域方向自然语言处理 计算机视觉 深度学习 具体领域 图片分类 物体检测与分割 样式迁移 为图片加滤镜 人脸合成 文字生成图片 文字生成 无人驾驶 张量 表示一个多维矩阵 核心是一个数据容器 多数情况下包含数字 可以想象成一个
  • Java中WebService接口的生成、打包成.exe、设置成Windows服务、及其调用、Apache CXF调用

    一 Java中WebService接口的生成 1 在eclipse工具中新建一个普通的JAVA项目 新建一个java类 JwsServiceHello java package com accord ws import javax jws
  • 蓝桥杯2014年第五届真题-拼接平方数

    题目 题目链接 题解 实现题 题目大意 将一个区间内的数拆成两个数后 若原数 拆得的第一个数和拆得的第一个数均为平方数则输出 直接遍历区间内所有的数可能会超时 因此我们直接取区间内的平方数 只遍历区间内的平方数 时间复杂度会降很多 对于每个
  • Windows和Linux下共享内存使用

    源码地址 https github com ylmbtm GameProject3 看过我开源代码的朋友知道 我这个项目在逻辑服和数据服进行数据同步采用的就是共享内存 其实数据同步的方式有很多种 其中使用较多的一种方式就是tcp网络协议同步
  • CSS布局的三种机制:浮动

    CSS布局的三种机制 浮动 浮动 float 为什么要学习浮动 什么是浮动 float 浮动小结 浮动的应用 清除浮动 为什么要清除浮动 清除浮动本质 清除浮动的方法 额外标签法 隔墙法 父级添加overflow属性方法 使用after伪元
  • jdk的安装

    由于要使用jmeter进行接口自动化测试 而jmeter的使用 必要要安装jdk 因此就在网上随便找了一篇jdk的安装教程 由于我喜欢自定义安装 结果费了半天时间也没安装成功 前期后后安装与卸载不下5次 最后决得可能是jdk不能自定义安装的
  • 接口设计说明书模板

    目 录 1 引言 1 1 1 设计目标 1 1 2 适用范围 1 1 3 相关术语 1 1 4 参考资料 1 2 分析设计 1 2 1 设计思想 1 2 2 接口结构 1 2 3 数据流分析 2 3 中间库接口 2 3 1 中间库说明 2
  • java面试官如何面试别人

    java面试官如何面试别人 一 java面试官的 面试心得 在公司当技术面试官几年间 从应届生到工作十几年的应聘者都遇到过 先表达一下我自己对面试的观点 1 笔试 面试去评价一个人肯定是不够准确的 了解一个人最准确的方式就是 路遥知马力 日
  • OCR-字体颜色与背景颜色区分不明显的调研

    需解决的问题 对于一些图片 字体和颜色区分度不高 白色字体的图片进行图像增强时容易使字体更加 模型识别时存在漏检现象 图像增强后有些文字将会变得不清晰甚至消失 解决的方法 图像的二值化 以下使用了七种方法进行测试 Python代码 impo
  • shell筛选log

    服务器跑 pbs 脚本的时候 会分配一个 job ID 并相应地创建两个文件
  • anaconda和python版本的对应关系

    https docs anaconda com anaconda packages oldpkglists Anaconda与Python版本对应关系 官方最新
  • KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU 新的隐藏root防止检测 封号方案

    大约一年多以前 我在一篇讲Android 上 ROOT 的过去 现在和未来https mp weixin qq com s biz MjM5Njg5ODU2NA mid 2257499009 idx 1 sn 3cfce1ea7deb6e0
  • 年终总结——旧的收获与新的开始

    引言 收获本身分为俩部分 一个就是旧经历的收获 另外就是新路程的规划 概述 旧的一年已然逝去 那我们是否颗粒归仓 新的一年即将开始 我们是否规划好新的旅程 内容 颗粒归仓 从没有思考过一年的时光竟如此之短 不知不觉之间又到了颗粒归仓的瞬间
  • 爬取美女图片保存本地与入MySQL库(宅男福利)

    本文详细记录如何爬取美女图片 并将图片下载保存在本地 同时将图片url进行入库 保存在本地肯定是为了没事能拿出来养养眼啊 那入库就是为了定位图片啊 要懂点技术的话 还能搬运搬运做个小图片网站 不为别的 就是养眼和学习 本文主要讲思路和方法
  • 【Linux】用fdisk进行磁盘分区(图文过程)

    目录 0 环境 1 思路概述 2 详细介绍 2 1查看磁盘现有分区 fdisk l 2 2对分区设置具体参数 0 环境 linux 新版整理于2023 6 29 内容未变 增加了思路概述部分 排版看起来比以前好些 1 思路概述 1 查看磁盘
  • 财务数据分析?奥威BI数据可视化工具很擅长

    BI数据可视化工具通常是可以用户各行各业 用于不同主题的数据可视化分析 但面对财务数据分析这块难啃的骨头 能够好好地完成的 还真不多 接下来要介绍的这款BI数据可视化工具不仅拥有内存行列计算模型这样的智能财务指标计算功能 还拥有一套标准化
  • spark报错OutOfMemory

    最近在使用spark进行分析的时候 几千万的数据量感觉不多 但是跑起来非常慢 内存溢出OutOfMemory 1 然后在有使用map的地方 在map之前进行分区repartition 2 join会有shuffle产生 shuffle也会产
  • java-PDF读取一页某一区域内容

    首先还是我的风格 先看效果 在某一页pdf中获取某一块区域的内容和图片 这样就能获取想要的东西了 上代码 这里需要注意maven 是两部分