首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用PDFBOX在PDF中打印TJ/Tj内的每个TJ和字符的位置?

PDFBOX是一个开源的Java库,用于处理PDF文件。它提供了丰富的功能,包括解析、创建、修改和提取PDF文件的内容。

要在PDF中打印TJ/Tj内的每个TJ和字符的位置,可以按照以下步骤进行操作:

  1. 导入PDFBOX库:首先,需要在项目中导入PDFBOX库。可以从官方网站(https://pdfbox.apache.org/)下载最新版本的PDFBOX,并将其添加到项目的依赖中。
  2. 打开PDF文件:使用PDFBOX库提供的API,打开需要处理的PDF文件。可以使用PDDocument.load()方法加载PDF文件,并将其存储在PDDocument对象中。
  3. 遍历页面:通过PDDocument对象,可以获取PDF文件的页面数量,并使用PDDocument.getPage()方法获取每个页面的PDPage对象。
  4. 解析页面内容:对于每个页面,可以使用PDPage对象的getContents()方法获取页面的内容。页面内容通常以PDStream的形式存储。
  5. 解析TJ/Tj指令:将页面内容转换为COSStream对象,并使用PDFBOX提供的解析器解析指令。对于TJ/Tj指令,可以使用PDFTextStripper类的processEncodedText()方法解析其内容。
  6. 获取位置信息:在解析TJ/Tj指令时,可以获取每个TJ和字符的位置信息。可以使用PDFTextStripper类的getTextPositions()方法获取字符的位置信息。
  7. 打印结果:将获取的TJ和字符的位置信息打印出来,可以使用System.out.println()方法将其输出到控制台。

以下是一个示例代码,演示了如何使用PDFBOX在PDF中打印TJ/Tj内的每个TJ和字符的位置:

代码语言:txt
复制
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.pdfbox.text.TextPosition;

import java.io.IOException;
import java.util.List;

public class PDFTextExtractor {
    public static void main(String[] args) {
        try {
            // 打开PDF文件
            PDDocument document = PDDocument.load("path/to/your/pdf/file.pdf");

            // 遍历页面
            for (PDPage page : document.getPages()) {
                // 获取页面内容
                PDStream contentStream = page.getContents();
                if (contentStream != null) {
                    // 解析页面内容
                    PDFTextStripper stripper = new PDFTextStripper() {
                        @Override
                        protected void processTextPosition(TextPosition text) {
                            // 获取字符位置信息
                            float x = text.getXDirAdj();
                            float y = text.getYDirAdj();
                            String content = text.getUnicode();

                            // 打印TJ/Tj内的每个TJ和字符的位置
                            System.out.println("TJ/Tj: " + content + " - X: " + x + " - Y: " + y);
                        }
                    };

                    // 解析TJ/Tj指令
                    stripper.processStream(page, page.getResources(), contentStream.getStream());

                    // 获取字符位置信息
                    List<TextPosition> textPositions = stripper.getTextPositions();
                    for (TextPosition text : textPositions) {
                        float x = text.getXDirAdj();
                        float y = text.getYDirAdj();
                        String content = text.getUnicode();

                        // 打印字符的位置
                        System.out.println("Character: " + content + " - X: " + x + " - Y: " + y);
                    }
                }
            }

            // 关闭PDF文件
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请注意,以上代码仅演示了如何使用PDFBOX库在PDF中打印TJ/Tj内的每个TJ和字符的位置。对于更复杂的PDF文件,可能需要进行额外的处理和解析。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

PDF Explained(翻译)第六章 文本和字体

打印文本 在页面上打印文本需要: 选择字体。 选择位置,大小和方向。 选择间距,颜色,文本渲染模式和其他参数。 从字体中选择字符,并在页面上显示。...字距和字形调整 TJ操作符可用于替代Tj,用于绘制具有水平字形调整的字符串。这种情况通常发生在使用文字处理器或打字机布局的情况下。...在PDF中,字体由字体字典组成, 字典中定义了度量,字符集和编码(将文本字符串中的字符代码映射到字体中的字符),以及字体程序(实际的字体文件)。...字体编码 字体编码描述字符编码(内容流字符串中的字符)和字体中的字形描述之间的映射。 最简单的/Encoding可以只是一个标准编码的名子,这些编码在PDF标准文档的附录D中定义。...这意味着PDF 查看器可以正确剪切和粘贴文本,因为它知道字符编码1是一个项目符号( /bullet是在Adobe Glyph List中预定义的名称)。

1.2K30

PDF Explained(翻译)第二章 构建一个简单的PDF

关于PDFTK(THE PDF TOOLKIT) pdftk是一个开源的命令行程序,它的功能有: 合并分割PDF文档 旋转PDF页面 加解密 填充PDF表单 加水印和图章 打印和修改PDF元数据(metadata...交叉引用表: 列出了每个对象在文档中的字节偏移量–这 允许随机访问任意对象,而不必顺序读取。 文件尾(trailer): 包括交叉引用表的字节偏移,后面跟着文件结束标记。...第一行将文件标识为PDF并给出版本号: %PDF-1.1 //PDF version 1.1 header 第二行很难输入文本编辑器,因为它包含不可打印的字符。 我们将它留给pdftk处理。...目录,交叉引用表和文件尾(Trailer) 文件的最后一部分由文档目录开始,它是对象图(译者注:参看“文档结构”小节中的图示)的根对象。 接下来是交叉引用表,它给出了每个对象在文件中的字节偏移量。...头中添加了一些不可打印的字符–这可以确保 文件被传输程序(比如FTP等)识别为二进制文件(而不是文本)。

1.5K30
  • 执行sed命令卡死CPU消耗100%一例分析

    */#&/g" mha_install.sh ^C[root@TJ-DB-6CU552YPXS backup]#top查看,sed进程CPU使用率100%: PID USER PR NI...()sed卡在字符集转换gconv ()函数上,mha_install.sh文件字符集为uft-8,os当前session字符集为gbk:[root@TJ-DB-6CU552YPXS backup]#...-6CU552YPXS backup]#即文件中某些内容通过sed命令从uft-8转gbk时卡死,设置环境变量LANG=en_US,不进行字符集转换,再次执行sed命令快速返回结果:[root@TJ-DB...backup]# head -n 325 mha_install.sh|tail -1 #生成密钥对[root@TJ-DB-6CU552YPXS backup]#从输出不难猜测,应该是注释符号和中文之间没有空格.../sed -n '1,$p'# 生成密钥对#生成密钥对[root@TJ-DB-6CU552YPXS backup]#总结1、注释符号和汉字之间养成使用空格分隔习惯。

    36610

    数据工厂平台12:首页统计的数据关联

    【注意,此章节完全是css的二次开发,理解难度极高,且极易出错,大家可以直接复制本文末尾的源码来跳过此章节】 本节课要承接上节课的内容,继续解决这个扇形统计图的 外层和内指针的角度动画问题:...我们回到views.py中,先写好需要的统计数据 实际的数据 ,如: 2.计算百分比,我们可以用他们当前数量级的最大数作为分母,来求出百分比 刷新下页面就可以看到打印结果: 如图,已经成功计算出了角度...给到前端: 我修改了前端的展示数据样式,不显示百分比,而是实际数据。 注意,是分成了四个变量给过去,每个变量都有实际数据和百分比角度 4....角度变量替换到顶部head中的loading- 各个里 其中2和6是一组,3和7是一组,4和8是一组,5和9是一组 (注意 loading-1 是初始不要碰不要改) 2345管着外圈角度, 6789...那么我们目前的做法就是 要给右侧的公共部分调用删掉,也就是完全删掉loading-1,然后把右侧的调用也分别 放在 四组内,而且我们的后台过来的角度中,也要重新再传一份单独的,外圈右角度 和 外圈左角度

    41020

    PDF标准详解(一)——PDF文档结构

    PDF文档的主体内容,主要由对象组成,它规定了页面信息和页面内容元素等信息 交叉引用表给出了每个对象距离文件首部的地址偏移,这样在解析PDF的时候就不用从头到尾解析每个对象,而是根据需要通过交叉引用表来寻址到具体的对象地址...因为PDF是可移植文档,它需要在不同设备上显示同样的内容,这里不能使用像素,如果使用像素,在同样尺寸的显示器上如果显示器的像素分辨率不同,那么显示的结果将会不同。所以这里一般使用磅作为单位。...Tj % 放置文本字符串 ET % 结束文本块 endstream % 流结束 endobj 通过stream来定义一个流对象,在这个流对象中,我们定义它在页面的 (50, 700) 坐标位置显示字符...Tj来定义,并且定义了字符采用F0 字体,也就是上面定义的Times-Italic字体 页面相关的内容我们已经定义完了,接着我们需要定义一些结构相关的对象,方便PDF解析器找到并解析页面内容。...具体对象定义相关的语法和每个对象的详细解释将会在后面一系列文章中给出,相信那个时候再来看这个 Hello Word 文档一定会有一个更清晰的认识。

    64611

    从零开始学习3D可视化之数据对接(3)

    MQTT是一个轻量级协议,使用MQTT协议的中心是broker(服务器/代理),客户端通过订阅消息和发布消息进行数据交互。...url: 'https://www.thingjs.com/static/models/storehouse' }); app.on('load', function() { // 设置摄像机位置和目标点...MQTT 协议的中心是 broker(服务器/代理),客户端通过订阅消息和发布消息进行数据交互。...MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。...作为一种低开销、低带宽占用的即时通讯协议,使其在物联网3D可视化等方面有较广泛的应用。 —————————————————

    37420

    ABAP初体验六:BAPI介绍

    * 根据结构来定义内表和结构变量 DATA: T_BAPISTAT like ZBAPISTAT OCCURS 0, G_BAPISTAT like ZBAPISTAT, t_tj02t...,而 l_objnr是存储jest表中订单的临时变量,后面主要是拼接OR开头的字符串 DATA: l_aufnr like afko-aufnr, l_objnr like jest-objnr...* 第四步 ,从tj02t文本描述表查询状态名istat、文本信息,同时条件中过滤了i_spras(语言),当然检索了内表t_bapistat,将信息放到内表t_tj02t(这个内表在全局变量定义了...* 第五步 ,通过结构g_bapistat循环内表t_bapistat,读内表信息t_tj02t(用关键字istat状态名来判断,读到g_tj02t结构中,读到了就将信息写入到g_bapistat...结构中,然后修改内表t_bapistat中的相关信息 sort t_tj02t by istat.

    1.4K40

    PDF Explained(翻译)第四章 文档结构

    本章我们来看PDF的逻辑结构,涉及trailer字典,文档目录(document catalog)和页面树以及PDF中两种常见结构:文本字符串和日期。...键 值类型 值 /Size* 整数 交叉引用表中的条目总数(通常等于文件中的对象个数加1) /Root* 间接引用字典 文档目录 /Info 间接引用字典 文档信息字典 /ID 两个字符串的数组 文件在工作流中唯一标识...这种机制允许文档中的页面具有比1,2,3更复杂的编号方式…例如,书籍的前言可以编号为i,ii,iii …而主要内容 再次以1,2,3开始…这些页面标签仅用于在PDF查看器中显示,与打印输出无关。...目的地是对超链接跳转位置的描述。 /ViewerPreferences 字典 查看器首选项字典,用于指定文档在屏幕的显示方式,例如缩放比例等。...定义了在显示或打印页面时默认的可见区域。如果不存在,则取媒体框的值。 用于媒体框和其它框的矩形数据结构是包含四个数字的数组。

    1K20

    Hadoop中HDFS读取和写入的工作原理

    本文主要讲解HDFS文件系统中客户端是如何从Hadoop集群中读取和写入数据的,也可以说是block策略。...和node2对象分别得出两个datanode在整个hdfs集群中所处的层次。...这里的层次概念需要解释一下:每个datanode在hdfs集群中所处的层次结构字符串是这样描述的,假设hdfs的拓扑结构如下:   每个datanode都会对应自己在集群中的位置和层次,如node1的位置信息为...得到两个node的层次后,会沿着每个node所处的拓朴树中的位置向上查找,如“/rack1/datanode1”的上一级就是“ /rack1”,此时两个节点之间的距离加1,两个node分别同上向上查找,...到底是主机名还是ip地址会被传入到脚本,所以在脚本中最好兼容主机名和ip地址,如果机房架构比较复杂的话,脚本可以返回如:/dc1/rack1 类似的字符串。

    86520

    IDEA插件推荐:中文字符自动转化!

    前几天TJ君正在勤奋开心地码代码的时候,突然听到隔壁桌新来的年轻妹子在砸键盘,kuangkuangkuang的怪吓人。...结果让TJ君哭笑不得是,并不是什么代码没有备份吖、电脑突然死机之类的问题,而是妹子在编码的过程中输完中文老是忘记切换中英文输入法,导致一些中文输入法里的逗号、分号、句号、括号、引号留在了代码里,妹子也没注意...那TJ君作为一个合格的前辈,当然要给她指一条明路,缓解她的歇斯底里症状。 这个同时和大家一起分享的就是一款idea中文字符替换插件!...插件能有效自动替换前文说到的中文输入法中的逗号、分号、句号、括号、引号这一系列代码中的常用字符,经过TJ君实测,当你装好插件输入以下字符时( ,。;!...嘿嘿嘿 (提醒:有小伙伴留言提到最新的21.2版本的IDEA似乎无法使用这个插件,TJ君是21.1版本,这个版本还是可以用的) 点击下方卡片,关注公众号“TJ君” 回复“自动转换”,获取插件地址 关注我

    2.4K30

    Markdown = PPT ?这个工具给力!

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 TJ君平时最头疼的是啥事情?当然是老大布置的各种宣传任务!...所谓的宣传任务,就是写各种各样的宣传ppt,对于TJ君来说,要满足老大各种对于PPT的奇思妙想和严苛要求,还不如多写几行代码。...所幸有一位圈中好友给TJ君介绍了一款PPT制作利器,Slidev,赶紧来和大家分享下~ 说Slidev之前,咱先聊聊Markdown,在认识Markdown之前,各种版式样式的问题也一直困扰着TJ君,...Slidev使用了一种扩展的Markdown格式,使得用户可以仅仅使用纯文本的形式也完成PPT的制作,尤其对于开发者来说,Slidev可以通过代码支持 HTML 和 Vue 组件,可以现场根据演示效果进行编码和修改...图标 —— 能够直接从任意图标库中获取图标 编辑器 —— 集成的编辑器,或者使用 VS Code 扩展 演讲录制 —— 内置录制功能和摄像头视图 跨平台 —— 能够导出 PDF、PNG 文件,

    78620

    TJ4DRadSet:自动驾驶4D成像雷达数据集

    摘要 下一代高分辨率汽车雷达(4D成像雷达)可以提供额外的高程测量值和更密集的点云,在自动驾驶中具有巨大的三维传感潜力,本文介绍了一个名为TJ4DRadSet的数据集,其中包含4D成像雷达数据用于自主驾驶研究...4D雷达则可以捕获前方视野(FOV)中的信息,覆盖前方驾驶视野,各传感器的主要参数如表二所示,此外,GNSS信息被实时运动学(RTK)包含并校正,以实现高精度定位,其中包含自我车辆的速度和位置信息。...所有传感器在ROS驱动器下工作,由于每个传感器以不同的帧速率运行,因此我们使用数据的到达时间作为时间戳来对齐数据,最终的4D雷达和激光雷达点云投影到图像中,如图2所示。...图2.4D成像雷达和激光雷达点云投影 C、 数据收集和标注 TJ4DRadSet于2021第四季度在中国苏州收集,图3记录了数据收集的位置。...一些数据增强被用来增强网络的鲁棒性,包括世界随机旋转和随机缩放,使用Adam优化器对模型进行80个时期的训练,在评估阶段,选择平均精度(AP)作为度量,以评估每个类别的检测结果,具体而言,我们使用0.5

    1.1K20

    一个专业处理字符串的IDEA插件

    大家好,我是TJ 一个励志推荐10000款开源项目与工具的程序员 字符串处理想必是小伙伴们平时开发时经常碰到的一个 “难题”。为什么要打上引号?...Escape和Unescape 插件支持将选中代码进行不同语言的Escape和Unescape,包括Java、JavaScript、C#、HTML、SQL、JSON、XML、PHP,还可以将Unicode...实际效果是这样的哦: 字符处理 这个插件最最让TJ君喜欢的一点还是可以将一些字符进行不同指令的处理,例如大小写互换啊、变大写啊、变小写啊、去除符号啊、符号变换啊很多很多。...如果小伙伴还是不理解到底能做什么的话,这个动图更直观一点: 因为功能实在太丰富,小伙伴最好还是自行体验尝试下每个选项的不同之处。...例如,TJ君平时如果需要将字符换成大写的操作比较多,我就可以这样在设置中设定这样一个按钮: 然后在IDEA的键盘映射里面设置这个按钮的快捷键: 这样就可以直接通过 自己设置的快捷键进行大写的转换了

    77430

    【论文笔记】A Sequence-to-Sequence Approach to Dialogue State Tracking

    首先,编码器可以在不同的领域中进行训练。不同域中的架构描述可以一起使用。其次,一旦对编码器进行了 微调,它就可以用于处理具有新意图、插槽和插槽值的未见过的模式。...模式中的元素可以是单词或短语,而话语中的标记形式的跨度用于提取插槽值,如下图: 状态解码器是一个使用指针和注意力的 LSTM。它以 D_a,Ea 作为输入。...具体地说,它根据以下分布生成项 w 的指针: k_w: 话语表示 D_a, 或者模式表示 E_a 中的项 w 的表示 在解码过程中,解码器使用 Beam Search 来根据序列的概率找到最佳的指针序列...,r{tj}^K]) + b{span} 其中 个 token 作为跨度的起始位置的概率计算如下: p_{tj}^{starti} = \frac{e^{\alpha{tj}^{start} \...在第 t 个回合,对于第 j 个域 - 插槽对,我们首先使用另一个预先训练的 BERT 来获得候选列表中每个值的聚合表示: y_l^{CLS} = BERT([CLS]\oplus V_l \oplus

    2.2K10

    ICA独立成分分析去除EEG伪影

    2)通常对EEG和眼电位(EOG)记录上进行时域或频域回归,以获得表征EEG伪影在EEG通道中的出现和扩散的参数。...但是,EOG记录也包含大脑信号,因此要消退EOG活性也会不可避免地要从每个记录中减去相关EEG信号的一部分。...由于许多噪声源(包括肌肉噪声,电极噪声和线路噪声)都没有明确的参考通道,因此无法使用回归方法来消除它们。...研究结果表明,ICA可以有效地检测,分离和消除EEG记录中的各种伪迹,其结果与使用基于回归或基于PCA的方法获得的结果相比更具有优势。...上面的假设2和3对于EEG(或MEG)数据是非常合理的。给定足够的输入数据,第一个假设也是合理的。该方法使用由ICA算法得出的空间滤波器,并且不需要每个伪像源提供参考通道。

    1.6K10

    【TBase开源版测评】轻松愉快去O选项:TBase

    选型时主要考虑公司内部的HTAP类型数据库,因为需要其类似Oracle既能进行离线任务计算,也可以承担频繁的查询(其实是DAU只有100+的对内服务…),并且后续扩容还比较方便,范围内的选项有TiDB和...这里会先进行基本的测试,之后会有使用过程中的问题与注意点。...,需要为每个分区子表维护索引,旧分区中的索引也不能自动继承。...禁用Nested Loop 其中t1和t2部分的join就耗时3m56s。对这一部分进行explain。...在优化这个任务的过程中遇到了非常多次语句无法终止执行的问题,pg_terminate_backend对应pid没有响应,DBA告知是节点CPU等资源打满无法响应SIGTERM,而且有时候并不是这个insert

    1.8K30

    从零开始学习3D可视化之数据对接(2)

    在日常使用的互联网产品中,很多都是前后端数据的交互来完成的,说到数据交互就不得不提Ajax和WebSocket,它们可是数据交互的利器,那么它们分别是什么?...image.png 下面来一个ThingJS中的WebSocket数据对接示例,点击【开启读取】进行数据读取,读取到的数据将在数据详情面板进行显示,当温度值大于20℃时,车辆设置红色效果,点击【关闭读取...url: 'https://www.thingjs.com/static/models/storehouse' }); app.on('load', function() { // 设置摄像机位置和目标点...property-panel tj-has-title tj-sizable tj-property-panel tj-pinned" style="position: absolute; right...` tj-value">` + data + `℃ `; $('.tj-group').prepend(tr); // 设置物体身上的监控数据

    35320

    30秒就能学会代码?什么东西这么厉害?

    当然不是,TJ君不仅没中彩票,还破财了一番,真实原因是TJ君手贱把自己赖以生存的笔记本电脑屏幕给砸烂了! nonono,当然只是不小心的行为不是故意施暴什么的。...心疼TJ君的小伙伴记得给TJ君点个赞! 话说这两天TJ君电脑坏了在做啥呢,当然是到处学习,然后想给大家好好分享啦。...其实就是项目准备好了各种满足开发需求的简短JavaScript代码片段,每个片段小巧可爱,所以只需30秒就能看懂用会。 同时还提供了搜索功能,可以按名称、标记、语言或使用代码段的描述进行各种搜索。...每段小小的代码包括了代码、说明和示例,真的是麻雀虽小五脏俱全 需要用哪段就可以直接将代码复制到剪贴板。非常方便简单。...我们举个例子吖: 例如FOR循环,在30秒的代码片段中,提供的是如下代码 const files = [ 'foo.txt ', '.bar', ' ', 'baz.foo' ]; let filePaths

    38930

    加密解密、食谱、新冠序列,各种有趣的开源项目Github上都有

    今天TJ君就来和大家分享几个自认为特别有趣的开源项目: 加密库 这是一个从斯坦福大学传出的开源加密库,基于JavaScript,可用在JS里的加密、解密。...目前最新的版本是1.08,让TJ君有一种在世界名校学习的感觉。 项目有各种不同的加密方式,像CBC模式、CCM模式、位阵列编解码等等,其实说实话TJ君也不是很懂,还要再研究研究。...这个项目上允许用户上传自己的食谱和照片,然后经过项目处理后,会在指定的位置出现上传的食谱及作者信息,也会根据食谱的烹饪难度、烹饪时长、烹饪材料进行各种标注。...当然上传有一定的格式要求,像 食谱应该以标题开头,第一行有一个#。顶部无空行,末端无尾行、文件名应该是菜的名称,用连字符(-)分隔。...好吧,TJ君承认爱国情绪高涨了下,但是TJ君还是觉得中国美食无人能敌~~~ 如果您正在学习Spring Boot,那么推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com

    46720

    PDF Explained(翻译)第七章 文档元数据和导航

    注释:允许文本或图形独立与主页面内容,显示在PDF页面之。上超链接是一种特殊的注释,它允许用户点击跳转到文件中的任意位置。...每个条目由文本和用来描述跳转链接的定位构成。 定位(Destinations) 定位定义了PDF文档中的一个位置,由三部分组成,包括页码,页内位置以及显示缩放比率。...在。每个查看器应用(例如Adobe Reader或Mac OS X Preview)都可能以不同的方式显示这些注释, 同一软件的不同版本之间都可能有差异。注释不会影响打印输出。...可以使用页面字典中的条目/Annots下的数组将一个或多个注释与页面相关联。 每个注释都是一个字典。字典中的条目在下表中描述,*为必选项。每种类型的注释都有额外的条目。...我们来看两种注释:文本注释,以及用于在文档中创建超链接的链接注释。 还有许多其他类型的注释,可用于在文档上绘图,高亮文本以及添加打印机标记。

    1.1K20
    领券