Pdfbox:在旋转页面中绘制图像

2023-12-13

我有一个简单的 A4 pdf 文档,其中包含一个属性/Rotate 90:我的 pdf 的原始版本是横向的,但打印的是纵向。

我正在尝试在肖像文档的左下角绘制一个小图像。

到目前为止,这是我的代码:

    File file = new File("rotated90.pdf");
    try (final PDDocument doc = PDDocument.load(file)) {
        PDPage page = doc.getPage(0);
        PDImageXObject image = PDImageXObject.createFromFile("image.jpg", doc);
        PDPageContentStream contents = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, false, true);
        contents.drawImage(image, 0, 0);
        contents.close();
        doc.save(new File("newpdf.pdf"));
}

这是最终结果:如您所见,图像被放置在左上角(旋转前的 0,0 坐标)并且没有旋转。

s

我尝试玩drawImage(PDImageXObject image, Matrix matrix)没有成功。

这是原始文件pdf 90° 旋转


以下是针对旋转 90° 的页面的解决方案:

PDPageContentStream cs = new PDPageContentStream(doc, page, PDPageContentStream.AppendMode.APPEND, true, true);
PDImageXObject image = ....
cs.saveGraphicsState();
cs.transform(Matrix.getRotateInstance(Math.toRadians(90), page.getCropBox().getWidth() + page.getCropBox().getLowerLeftX(), 0));
cs.drawImage(image, 0, 0);
cs.restoreGraphicsState();
cs.close();

如果只是图像,则不需要保存/恢复。

页面旋转270°的解决方案:

cs.transform(Matrix.getRotateInstance(Math.toRadians(270), 0, page.getCropBox().getHeight() + page.getCropBox().getLowerLeftY()));

对于 180°:

cs.transform(Matrix.getRotateInstance(Math.toRadians(180), page.getCropBox().getWidth() + page.getCropBox().getLowerLeftX(), page.getCropBox().getHeight() + page.getCropBox().getLowerLeftY()));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pdfbox:在旋转页面中绘制图像 的相关文章

随机推荐

  • Javascript date toLocaleString 是否考虑 DST?

    我已经设置了 UTC 截止日期 如下所示 我想知道 toLocaleString 方法到底会在用户的本地计算机上对其执行什么操作 例如 如果他们位于认可夏令时的时区 它会考虑夏令时吗 或者我是否需要插入额外的代码来检查用户所在位置 然后修复
  • 是否可以同时执行 if --- else 控制语句的 if 和 else 部分? [复制]

    这个问题在这里已经有答案了 可能的重复 同时执行 if 和 else 块 是否可以设置一些条件 以便 if else 控制语句中的 if 和 else 部分都可以在没有任何警告或错误的情况下执行 不使用 Yes by forking if
  • 如何使精灵指向鼠标。 XNA C#

    如果你看一下这张图链接文本 我需要通过仅知道直角三角形所有边的长度来找到角 A 我不知道三角函数 需要一些帮助 您的帖子实际上有两个问题 如何使精灵指向鼠标 XNA C 您必须计算精灵位置和鼠标位置之间的方向 这可以使用三角函数来完成 在本
  • 使用scanner.nextLine() [重复]

    这个问题在这里已经有答案了 我在尝试使用 java util Scanner 中的 nextLine 方法时遇到了麻烦 这是我尝试过的 import java util Scanner class TestRevised public vo
  • 如何在超级账本结构的视图页面上使用节点js显示当前哈希、先前哈希

    我正在尝试像链表一样遍历区块链 我只通过提供的块号从块中找到以前的哈希值 如何使用节点js获取块的当前哈希值 我有兴趣在视图页面上显示 节点 sdk 不提供当前哈希值 但可以使用与此类似的代码从块的标头计算它 var sha require
  • 在 C 中传递多维数组

    我目前正在尝试学习C 但我遇到了一个我无法解决的问题 考虑 include
  • 使用ExtAudioFile读取音频文件时,是否可以不连续地读取音频浮动?

    我正在尝试从 mp3 文件中绘制波形 我已经使用 Core Audio SDK 文档中提供的 ExtAudioFileReadTest 应用程序成功提取了浮点数 链接 http stephan bernsee com ExtAudioFil
  • 如何从自定义列表视图中单击项目启动不同的活动?

    我遵循了许多教程 例如http www javacodegeeks com 2013 09 android listview with adapter example html还关注了这里提出的问题如何使自定义ListView在单击列表项时
  • DynamoDB“设置”值是 CDRT 吗?

    另有说法if N gt gt 1客户端同时添加 10 000 个唯一值使用 DynamoDB 设置 类型updateItem and ADD 以某种方式保持在规定的限度内 下一次一致性读取时 该集合的大小将始终为 10 000 吗 我所说的
  • mp3 音频适用于所有浏览器,但不适用于 IE9

    我有三个 mp3 音频文件 它们在所有浏览器中都可以正常播放 但在 IE9 中只能播放 1 x 秒 除非我将 控制 更改为 自动播放 在这种情况下它播放得很好 然后我收到了 wav 格式的原始未编辑文件 我自己将其编码为mp3 但遇到了同样
  • Javascript - 替换“%20”空格

    var loc array document location href split var linkElement document getElementById waBackButton var newT document create
  • 仅当按下特定按钮时才进行淘汰验证

    https github com ericmbarnard Knockout Validation wiki Native Rules 我在 MCV3 页面上使用淘汰验证 我的情况是我有两个按钮 一是添加到收藏 二是保存 添加到集合会根据需
  • 使用 xcode 4 实施适用于 iPhone 的 Facebook Connect

    我在使用 Facebook Connect 时遇到问题 我 尝试 遵循位于http www mobisoftinfotech com blog iphone iphone fbconnect facebook connect tutoria
  • 项目从 Knockout 可观察数组中删除,但未从 html 表中删除

    我有一个问题可以说明我的问题 http plnkr co edit PzBrcTX0Vnn01xWy4dk6 这是一个包含 设置 列表的表 它使用 Footable 以便可以对列表进行排序以及 Footable 的其他功能 场景1 运行 按
  • R 打包中的 inst 和 extdata 文件夹

    在文档中 R 建议将原始数据文件 不是 Rdata 或 Rda 放置在inst extdata 从第一段开始 http cran r project org doc manuals R exts html Data in packages
  • 在swing中实现JTreeTable

    我想实现一个 JTreeTable 我在java官方网站上看到了这个例子 我是java初学者 我无法理解这个例子 我将树节点和子名称作为字符串 我该如何实施 有 仅我尝试过的产品 free SwingX 网豆Outline 如图所示here
  • java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE android

    尝试使用下面的代码上传大视频但收到此错误java lang NoSuchFieldError org apache http message BasicHeaderValueFormatter INSTANCE gt 我猜它的发生是由于多个
  • 数据库关系

    在数据库中建立正确的关系除了数据完整性之外还有其他帮助吗 它们会提高还是阻碍绩效 只要您有与外键相对应的明显索引 就不会对性能产生明显的负面影响 这是您必须使用的最简单的数据库功能之一
  • 为什么 onchange 不起作用?

    我只是在网上寻找答案 但还没有找到任何答案 我正在使用 google 的 api 翻译 但我遇到了 JS 问题 事实上 除了一项操作之外 我的代码 100 正常 我的问题是当时没有给出翻译 js 将信息发送给 google 后 不会等到给出
  • Pdfbox:在旋转页面中绘制图像

    我有一个简单的 A4 pdf 文档 其中包含一个属性 Rotate 90 我的 pdf 的原始版本是横向的 但打印的是纵向 我正在尝试在肖像文档的左下角绘制一个小图像 到目前为止 这是我的代码 File file new File rota