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

在PDFBox中编写多行和多页-获取PDPageContentStream Y轴

在PDFBox中编写多行和多页时,可以使用PDPageContentStream对象来获取Y轴坐标。

PDPageContentStream是PDFBox中用于绘制内容的主要类之一。它可以让我们在PDF页面上添加文本、图像、形状等元素。

要编写多行文本,我们需要使用PDPageContentStream的setFont()方法设置字体和字号,然后使用showText()方法绘制每一行的文本。在每一行之后,我们需要通过调整Y轴坐标来移动到下一行。

以下是一个示例代码段,演示如何在PDFBox中编写多行文本并获取Y轴坐标:

代码语言:txt
复制
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.PDRectangle;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;

import java.io.IOException;

public class PDFFontExample {
    public static void main(String[] args) {
        try {
            PDDocument document = new PDDocument();
            PDPage page = new PDPage(PDRectangle.A4);
            document.addPage(page);

            PDPageContentStream contentStream = new PDPageContentStream(document, page);

            PDType1Font font = PDType1Font.HELVETICA_BOLD;
            int fontSize = 12;
            float leading = 1.5f * fontSize;

            contentStream.setFont(font, fontSize);
            contentStream.setLeading(leading);

            float margin = 50;
            float startX = margin;
            float startY = page.getMediaBox().getHeight() - margin;

            String text = "This is a sample text.";
            String longText = "This is a very long sample text that will wrap to the next line because it exceeds the page width.";

            contentStream.beginText();
            contentStream.newLineAtOffset(startX, startY);
            contentStream.showText(text);
            contentStream.newLine();

            // Get the Y-axis coordinate after writing the first line
            float newY = contentStream.getCurrentPoint().getY();

            contentStream.showText(longText);
            contentStream.endText();
            contentStream.close();

            document.save("example.pdf");
            document.close();

            System.out.println("PDF created successfully.");
            System.out.println("Y-axis coordinate after writing the first line: " + newY);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的示例中,我们创建了一个A4大小的PDF页面,并设置字体、字号、行间距等属性。然后我们使用beginText()方法开始文本操作,并通过newLineAtOffset()方法设置起始位置。接下来,我们使用showText()方法绘制文本,并使用newLine()方法移动到下一行。在绘制完第一行后,我们使用getCurrentPoint().getY()方法获取到Y轴坐标的新值。

需要注意的是,PDPageContentStream中的Y轴坐标系统是以左下角为原点,向上为正方向。

此外,如果你想了解更多关于PDFBox的使用和其他相关操作,可以参考腾讯云提供的PDFBox相关文档和工具:

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

相关·内容

使用 Apache PDFBox 操作PDF文件

如果你使用的是maven,那么pom.xml添加如下依赖: org.apache.pdfbox <artifactId...接下来,我将文本显示PDF页面上,并使用contentStream.close()方法关闭PDPageContentStream对象。...我们加载了一个名为“one-more.pdf”的PDF文件,获取了第一,并加载了一个名为“one-more.jpg”的图像文件。...然后,我们使用drawImage()方法PDF文档的指定位置插入了图像。 最后,我们将修改后的文档保存到名为“one-more-jpg.pdf”的新文件,并关闭文档。...对于每个页面,我们获取其资源(包括图像)并检查其中是否存在图像。 如果存在,则我们遍历它们,并使用PDImageXObject对象获取它们的属性,例如宽度高度。

1.6K20

SpringBoot 下PDF生成使用填坑总结

解释: 1、Configuration cfg 使用了freemaker starter后,项目启动时即会自动初始化 Configuration 对象到Spring容器; 2、Template template...= cfg.getTemplate("test.ftl","UTF-8"); 模板因cfg本身在Spring容器,则在获取test.ftl模板是就会自动resource/templates下寻找模板...注意:模板标签(h5)容易报错,一旦模板出现问题,可优先排查标签嵌套问题,例:table标签不能嵌套div标签 二、PDF转换为图片 pdf转图片有两种方式:icepdfpdfbox 上面两种方式都实现过...,都存在中文不显示或者乱码问题,但是由于icepdf最多只能支持转换10pdf,所以果断选择pdfbox。...(原始有问题的代码没有上传git,缺失了),报错信息如下: 实际使用遇到问题 1)ERROR o.a.p.contentstream.PDFStreamEngine 911 - Cannot read

4.3K30

多种格式文件合并为pdf(大数据量)

需求场景 最近遇到了一个比较恶心的需求,就是用户为了安全性,本地的富文本文件不存放到我们的minio,而是富文本的原件存在了客户的服务器,但是我们只能在数据库存放对应的路径。...富文本与档案的绑定关系是对一,也就是多个富文本绑定一个档案,现在有个问题就是我们系统都是档案都是以pdf进行展示的,而客户那边档案下对应的富文本是多种数据类型的包括以下几种:jpg,png,jpeg,...然后对方数据量都是一个档案可能对应几百的富文本,这种写法会特别慢,导致接口超时所以要想一种解决办法 现在要优化成什么样子呢 1、首先是要保证合并的时候有序, 2、所以就直接排除并行流了, 3...、既要有序也要保证大文件页数时候的效率,并且要保证有序合并 4、同时还要兼容各种不同的类型,所以就需要对不同的类型进行不同的处理 优化后的代码 logger.info("开始转换pdf");...>org.apache.pdfbox pdfbox-tools 2.0.26 </dependency

26220

java 利用 pdfbox 实现PDF转为图片

) * @param pdfPath PDF路径 * @imgPath img路径 * @page_end 要转换的页码,也可以定义开始页码结束页码,根据需求自行添加...) * @param pdDocument PDF对象 * @param page_end 要转换的页码,发票一般是一,取第一 * @return */...// 开发可以直接读取文件,测试、生产时代码改为加载 InputStream PDDocument pdDocument = PDDocument.load(new File("F:\\destop...第一个想法是主机上安装字体,但是又有问题了,生产不可能这样吧,运维也不同意啊。...想想还是研究研究 pdfbox 的源码吧,分析后发现它是根据不同系统来读取字体的文件夹的,然后一个同事建议我重写读写 Linux 系统文件的类,指向我们项目的文件夹,然后项目新建一个文件夹来存放需要的字体

3.5K10

五、文章详情制作及跳转功能实现《iVX低代码无代码个人博客制作》

一、详情制作 之前的章节,我们已经制作完毕了登录、注册、首页等内容,在这一节,我们编写详情以及详情功能制作。...详情页页面如下: 详情头部也就是一个头部栏,下面是一个行,里面有标题点赞信息内容,往下是一个富文本显示区域,再往下为评论内容区,接着还有一个评论内容显示区域: 首先我们创建头部,头部跟其他页面的头部一致...页面组件如下: 接着是标题区域,标题文本所占80%,点赞数据文本占 20%: 此时页面如下: 接下来就是博文内容区域,我们创建一个博文内容行,高度设置为撑开,并且需要进行y裁剪...,一个是输入的输入框一个是一个评论按钮: 此时评论内容并不允许多行评论,我们需要该评论区允许多行输入: 那么此时再更改按钮的显示属性页面如下: 接下来编写评论区内容,由于评论区的每个评论是单独的一行信息...创建一个服务,命名为文章获取,用于获取数据库的文章信息: 接着编写这个服务的事件: 该事件直接选择文章数据库随后直接输出当前输出结果的对象数组的值即可。

62340

Word自动化(C# + Python)(持续更新...)

总之, 这里通过使用一些库, Python的python-docx, C#的pdfboxnpoi, 来让对WordPDF的处理变得更加自动化一些....直接看从Word获取内容. 这里可以用C#的NPOIpython-docx实现. ----- NPOI NPOI安装 来看下维基的介绍....9102的. [006y8mN6ly1g83mlselxuj316c0j6wky.jpg] 安装之后, 右侧的解决方案引用里面, 已经可以看到添加的库了: [006y8mN6ly1g83mst2j68j307c09j74x.jpg...] ----- NPOI提取Word内容 其实NPOI非常强大, 足以用来做Word有关的一切了, 但是, 这里只演示一下提取Word的内容, 因为后面有python-docx这样更加轻巧的库, 不需要...是由Apache PDFBox团队为.NET生成的. [006y8mN6ly1g83ob4iquwj316f0j4djf.jpg] using org.apache.pdfbox.pdmodel; using

1.9K00

Java必知必会的常用类库

例如Dom4j、JDOM、JAXB 、XStream等,每个类库都有自己的优点,项目中可以按照需求挑选合适的类库。 ? 3、PDF类库 市面上处理PDF的主要有PDFBoxiText这两个类库。...PDFBox是开源组织Apache下的项目,是不收费的;但是iText如果生成上使用时需要购买版权的。两者比较PDFBox的功能相对比较弱,iTex功能非常强大,可以直接在PDF里作图。...4、电子表格Excel类库 项目开发也经常生成电子表格,市面上操作Excel的类库主要是JXLPOI,但是主流得失POI。...5、JSON类库 现在JSON格式报文越来越流行,JAVA领域处理JSON格式报文的类型非常。国内阿里的fastjson非常出名,很多公司都在使用;国外有谷歌的gson、jackjson等。 ?...JodaTime官网:https://www.joda.org/joda-time/ 9、HTML解析类库 编写爬虫少不了要解析HTML格式的数据,这时HTML类型就派送用场了。

66210

PDF转Word完全指南:3大方法满足各种场景!

,因此你就能重复利用你的PDF文档内容,Word再编辑或者重整布局。...适用人群场景:如果您对PDF处理的准确性性能要求很高,高频对PDF进行各种处理,对数据安全要求比较高,而且不差钱,可以购买Acrobat ProAcrobat Pro的PDF转Word功能比较强大...目前在线的PDF处理有免费收费两种,收费的一般开放一个小额的试用,比如1兆大小,10等,然后引导到收费。免费的一般没有太多限制。...开源类库pdfbox Java类库PDFBox是一个BSD许可下的源码开放项目,为开发人员读取创建PDF文档而准备的纯Java类库。...地址 https://pdfbox.apache.org/ 社区比较活跃,更新速度较快代码示例import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.text.PDFTextStripper

4.4K40

Android Canvas drawText文字居中的一些事(图解)

,举个栗子,上文中的x、y参数传的是(0,0),此时的baseline正好是坐标系x,就相当于从y开始向右绘制,以x作为文本的baseline进行绘制。...如果参数传(0,10),此时绘制文本的baseline从x开始向下移动10px,也就是以y10作为文本的baseline进行绘制,y10就是绘制文本的baseliney方向的位置。...因为我们把坐标原点移到了控件中心,文本的baseline正好为x,top、ascent值为负,所以绘制的文本第一象限。 y坐标不是指定的0吗,为什么文本没有x的上面或下面,而是穿过了x?...,可以用(fontMetrics.descent – fontMetrics.ascent)获取,因为ascent为负数,所以最终算出来的是两者的 现在有了宽度,把绘制文本的x坐标向左移动(宽度 /...再看下中文版的多行文本: ? 多行居中文本 5.TextAlign Paint的TextAlign属性决定了绘制文本相对于drawText方法x参数的相对位置。

2.8K20

2014版CAD操作教程(全)

绘制圆、圆弧、椭圆、椭圆弧 14 第四章 绘制复杂的二维图形 17 绘制线、段线、修订云线、样条曲线 17 第五章 使用面域与文字的创建 22 第六章 图案填充与创建管理块命令 23...一、坐标系的使用 CAD中使用的是世界坐标,X为水平,Y为垂直,Z为垂直于XY的轴向,这些都是固定不变的,因此称为世界坐标 世界坐标分为绝对坐标相对坐标 绝对坐标(针对于原点) 绝对直角坐标:点到...编辑线:修改菜单→对象线 1.添加删除线顶点 可以线添加或删除任何顶点。 2.编辑线交点 如果图形中有两条线,则可以控制它们相交的方式。...完成 QLEADER 命令后,文字注释将变成多行文字对象。快速引线的文字可用ED来修改。 坐标标注 :横向标注是Y坐标值,纵向标注是X坐标值。 快速标注 :可以快速创建标注布局。...有缘学习交流关注桃报:奉献教育(店铺) C、选择“修改”---“三维操作”---“三维旋转”命令(ROTATE3D),可以使对象绕三维空间中任意(XY或Z) 、视图、对象或两点旋转,其方法与三维镜像图形的方法相似

6.2K10

H5C3第四节

CSS3布局方面做了非常大的改进,使得我们对块级元素的布局排列变得十分灵活,适应性非常强,其强大的伸缩性,响应式开可以发挥极大的作用。...【演示:01-伸缩布局初体验.html】 当给一个盒子设置了display:flex之后,这个盒子就有了主轴 的概念。...align-items(重点) align-items用于调整侧的对其方式 ,可选的值有: flex-start:元素的起始位置对其。 flex-end:元素的结束位置对其。...center:元素上居中对其。 stretch:元素的高度会被拉伸到最大(不能给死高度)。...align-content align-content用来设置多行的flex容器的排列方式。 flex-start:各行向侧的起始位置堆叠。 flex-end:各行向弹性盒容器的结束位置堆叠。

5.3K30

CAD2007操作教程上

一、坐标系的使用 CAD中使用的是世界坐标,X为水平,Y为垂直,Z为垂直于XY的轴向,这些都是固定不变的,因此称为世界坐标 世界坐标分为绝对坐标相对坐标 绝对坐标(针对于原点) 绝对直角坐标:点到...Y方向(有正,负之分)的距离,输入方法:X,Y的值,输入时要在英文状态下 绝对极坐标:点到坐标原点之间的距离是极半径,该连线与X正向之间的夹角度数为极角度数,正值为逆时针,负值 为顺时针,输入方法,...中心点:通过指定椭圆中心,一个的端点(主轴)以及另一个的半度绘制椭圆。 2. ,端点:通过指定一个的两个端点(主轴)另一个的半的长度绘制椭圆。...编辑线:修改菜单→对象线 1.添加删除线顶点 可以线添加或删除任何顶点。 2.编辑线交点 如果图形中有两条线,则可以控制它们相交的方式。...一、 文字命令(T):分为多行文字单行文字。 多行文字:输入的文字是一个整体。 单行文字:也可以输入多行文字但是输入每行都是一个独立的对象。

3.6K30

CAD 初级教程

一、坐标系的使用 CAD中使用的是世界坐标,X为水平,Y为垂直,Z为垂直于XY的轴向,这些都是固定不变的,因此称为世界坐标 世界坐标分为绝对坐标相对坐标 绝对坐标(针对于原点) 绝对直角坐标:点到...编辑线:修改菜单→对象线 1.添加删除线顶点 可以线添加或删除任何顶点。 2.编辑线交点 如果图形中有两条线,则可以控制它们相交的方式。...指定物体 ,指定尺寸位置之前,可以编辑文字或修改文字角度, ⊙要使用多行文字编辑文字,请输入M(多行文字),多行文字编辑器修改文字然后单击确定 ⊙要使用单行文字编辑文字,请输入T(文字),修改命令行上的文字...完成 QLEADER 命令后,文字注释将变成多行文字对象。快速引线的文字可用ED来修改。 坐标标注 :横向标注是Y坐标值,纵向标注是X坐标值。 快速标注 :可以快速创建标注布局。...C、选择“修改”---“三维操作”---“三维旋转”命令(ROTATE3D),可以使对象绕三维空间中任意(XY或Z) 、视图、对象或两点旋转,其方法与三维镜像图形的方法相似。

5.7K00
领券