生成的 pdf 中的文本是反向的

2023-12-30

我正在使用 pdfbox 向 pdf 文件添加一行。但我添加的文字是相反的。

File file = new File(filePath);
PDDocument document = PDDocument.load(file);

PDPage page = document.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true);

int stampFontSize = grailsApplication.config.pdfStamp.stampFontSize ? grailsApplication.config.pdfStamp.stampFontSize : 20
contentStream.beginText();
contentStream.setFont(PDType1Font.TIMES_ROMAN, stampFontSize);

int leftOffset = grailsApplication.config.pdfStamp.leftOffset ? grailsApplication.config.pdfStamp.leftOffset : 10
int bottomOffset = grailsApplication.config.pdfStamp.bottomOffset ? grailsApplication.config.pdfStamp.bottomOffset : 20
contentStream.moveTextPositionByAmount(grailsApplication.config.xMove,grailsApplication.config.yMove)
contentStream.newLineAtOffset(leftOffset, bottomOffset)

String text = "i have added this line...!!!!";
contentStream.showText(text);
contentStream.endText();

contentStream.close();

document.save(new File(filePath));
document.close();

byte[] pdfData;
pdfData = Files.readAllBytes(file.toPath());
return pdfData;

我尝试使用 moveTextPositionByAmount 方法,但这似乎对文本没有任何影响。为什么我的文本是相反的以及如何将其设置为正确的方向。


您的代码本身不会导致镜像输出,因此原因必须在您正在标记的 PDF 内部。不幸的是,您没有提供相关的 PDF,所以我们只能在这里猜测。

该问题很可能是由预先存在的页面内容将当前变换矩阵设置为镜像仿射变换而没有在最后重置它引起的。

如果确实如此,PDFBox 提供了一个简单的解决方法:

你构建你的PDPageContentStream像这样:

PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true);

还有另一个构造函数接受额外的boolean争论。如果您使用该构造函数将附加参数设置为true,PDFBox 尝试重置内容的图形状态:

PDPageContentStream contentStream = new PDPageContentStream(document, page,PDPageContentStream.AppendMode.APPEND,true,true);

Beware:如果这确实解决了问题,则您当前使用的坐标和偏移量依赖于变换矩阵的原样更改。在这种情况下,您将必须相应地更新它们。


或者,引入反镜像可能会有所帮助,例如通过在每个文本对象的开头设置这样的文本矩阵:

contentStream.beginText();
contentStream.setTextMatrix(new Matrix(1f, 0f, 0f, -1f, 0f, 0f));

此后所有y坐标变化需要被否定,特别是第二个参数contentStream.moveTextPositionByAmount and contentStream.newLineAtOffset.

(顺便一提,moveTextPositionByAmount and newLineAtOffset执行相同的操作,前者只是已弃用的变体,因此您可能希望在这两种情况下使用后者。)

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

生成的 pdf 中的文本是反向的 的相关文章

  • Grails:如何查询多对多映射中的对象?

    您好 我有以下域类 class Student int age static hasMany courses Course class Course String name static hasMany students Student 我
  • 构建战争时如何包含额外文件?

    我正在尝试添加一个目录 garils app store 对我的战争就像这样BuildConfig groovy grails war resources stagingDir args gt copy file grails app st
  • withTransaction 和 withNewTransaction 有什么区别?

    以下动作有什么区别 def someAction User withTransaction and def someAction User withNewTransaction 我什么时候用什么 当 grails 操作仅包含 Transac
  • 如何以编程方式生成在图像顶部带有标签的维恩图图像?

    我正在尝试为 pdf 报告生成维恩图 其中文本位于不同区域的顶部 我们使用 htmldoc 生成 pdf 这会排除背景图像之上的文本 我们使用谷歌图表 API 来处理其他图像 但他们的维恩图不支持图表顶部的文本 据我所知 最简单的路径是使用
  • 部署 Grails 应用程序时出错 - 初学者

    我在部署 Grails 应用程序时遇到问题 一切都在本地测试环境中运行 ERROR localhost startStop 1 错误 context GrailsContextLoader 错误 初始化应用程序 使用名称创建 bean 时出
  • 以编程方式识别 PDF 文件中的扫描文本 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 PDF 文件 其中包含我们需要导入数据库的数据 这些文件似乎是打印的字母数字文本的 pdf
  • 无法在 Angular 10 中的“pdf-viewer”=>“ng2-pdf-viewer”中显示 blob url

    我有一个 API 它将上传的文件作为 blob 返回 当我尝试绑定时src如果使用 blob URL 则它不会显示任何内容 但是 当我尝试绑定直接 URL 时 它可以显示 PDF 文件 这是我下面给出的代码 我的 TS 代码 downloa
  • 无法创建“DependencyManagementReportTask”类型的任务。 Gradle 新手

    我是 Grails 3 和 Gradle 的新手 我正在努力将应用程序 2 4 4 更新到 Grails 3 2 8 通过升级 我想从头开始构建一个插件 我无法使用声明依赖项的标准方法将其包含到项目中 我正在尝试使用 gradle 构建 g
  • 直接将 .aspx 转换为 .pdf [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 PHP 创建图表并导出为 PDF

    我正在寻找有关使用 PHP 创建图表的建议 我还希望能够将这些图表导出到 PDF 文档 我目前正在使用谷歌图表 但我不喜欢将我的所有信息发送到谷歌的想法 我更喜欢自己的托管解决方案 我见过很多 Flash 解决方案 但我不知道有什么方法可以
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 使用 PDFbox 从区域中提取文本

    是否可以从一个区域中提取文本PDFbox http pdfbox apache org index html仅使用二进制文件而不必创建自己的代码 编译这个简单的程序并将其打包到 jar 中 import java awt geom Rect
  • Groovy 元编程 - 将静态方法添加到 Object.metaClass

    我遇到了无法解决的 Groovy 元编程问题 将静态方法 foo 添加到类 FooBar 时 FooBar foo 按预期工作 FooBar metaClass static foo println hello FooBar foo 但是
  • 如何修复 Laravel 中未找到的“PDF”类

    在我的 Laravel 应用程序中遇到以下错误 CollaboPDFController php 第 14 行中的 FatalErrorException 未找到 PDF 类 这是我的ColaboPDFController php
  • 适合 .Net 开发人员的 Grails/Roo

    我目前正在学习 Grails 和 Roo 绝大多数培训材料都是针对新开发人员或现有 Java 开发人员 有谁知道使用 Net C ASP Net Asp Net MVC 翻译现有开发经验的任何指南 资源或技巧 你做过很多 ASP MVC 吗
  • 在 Grails 中创建一个新的资源包?

    我想创建另一个资源包来组织我的 Grails 应用程序 Grails 提供了一个 messages 资源包 我需要创建一个 myApp 资源包 如何创建新的资源包并使用 g message GSP 标记读取其属性 你必须创建一个beangr
  • 使用 JQuery 的 Grails 项目,无需插件

    我正在尝试设置一个简单的 Grails 2 1 1 应用程序 该应用程序将使用 JQuery 我有一个名为 TestController 的控制器和一个位于正确位置的index gsp 我手动添加 JQuery 库 没有使用 Grails
  • 在 Python 中静默打印 PDF

    我正在尝试使用 Python 打印 PDF 而不打开 PDF 查看器应用程序 Adobe Foxit 等 我还需要知道打印何时完成 以删除文件 Here http permalink gmane org gmane comp python
  • 如何保存具有多个多对一关系的 GORM 对象?

    假设我有以下域类层次结构 class School String name static hasMany teachers Teacher students Student class Teacher String name static

随机推荐

  • 如何在优先级队列中使用pair,然后使用键作为优先级返回值

    所以我想使用最小的键作为优先级 然后返回相应键的 VALUE import javafx util Pair import java util PriorityQueue public class Test public static vo
  • 实体框架更新 - 上下文当前未跟踪实体

    我正在尝试更新实体 但收到以下错误 上下文当前未跟踪该实体 我的数据库表由以下字段组成 赛程日期 联赛 ID FK A 队 FK B 队 FK 我的代码如下 public void UpdateFixture Fixture validFi
  • 如何在 Next Js (React) 中实施 adobe 分析?

    我已经提出了在我构建的 React js 应用程序中添加 adobe Analytics 的要求 请抱歉 我对如何实现它没有任何基本的想法 理解 所以专家的帮助对我来说非常有帮助 要求是我需要在中实施 adobe 分析next js wit
  • .Net ThreadPool 线程上的异常

    复制 如何从 ThreadPool QueueUserWorkItem 捕获异常 https stackoverflow com questions 753841 我正在 Net ThreadPool 上对多个委托进行排队 以进行大量独立的
  • 如何在 Aptana Studio 中自动缩进 JavaScript 代码?

    之前我使用Eclipse进行PHP和Java开发 我喜欢这个命令Ctrl i自动缩进代码 现在我使用基于Eclipse的Aptana Studio进行JavaScript开发 我想自动缩进我的 JavaScript 代码 但是Ctrl i删
  • 如何将外部CSS应用到flutter webview中的html渲染

    我想将外部 css 应用到在 flutter webview 中渲染的 html 在 android 中 它是使用以下语法完成的 您可以通过调用以下命令将任何 JavaScript 提交到您的 Web 视图 flutterWebViewPl
  • “System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常

    我正在 MVC 4 aspnet 网站中使用 EF5 在本地 一切正常 但是当我将其发布到 IIS 并尝试进入时 出现错误 System Data Entity Internal AppConfig 的类型初始值设定项 抛出异常 详细异常情
  • 填充div的空间

    我想要一个元素来填充父 div 的剩余空间 我已经成功做到了这一点 您可以在此处看到 链接已删除 但填充 div 右侧 位于左侧 div 下方 我基本上希望右侧的 div 从左侧的 div 结束的地方开始 希望这是有道理的
  • 从 TangoService_connectOnFrameAvailable 保存帧

    如何通过 TangoService connectOnFrameAvailable 保存帧并在我的计算机上正确显示它 作为此参考页 https developers google com project tango apis c struc
  • Angular bootstrap typeahead 不适用于 Angular 1.3.0

    我创建了一个小插件来表明这是行不通的 任何人都可以帮助我如何使用 typeahead 与 1 3 0 angularJS 提供替代解决方案 我们将其与 angular bootstrap 0 11 0 和最新版本的 bootstrap 一起
  • 角度测试在反应式表单上提交事件

    Context 我有一个具有基本形式 反应形式 的组件 我尝试测试此表单上的提交事件 看看它是否正确调用了必要的方法 我的问题 无法触发表单的提交事件 Files 组件 html
  • 如何使用新的 jstree v3.0.0 按需加载子项

    我正在寻找一些帮助在 jstree 中按需 扩展 填充子节点 我可以填充父节点 但无法填充子节点 设想 我正在使用 jstree 来填充树中的节点 我的数据源是json 但是 我从不同的服务获取父节点 从不同的服务获取子节点 我正在使用新的
  • 使用 GPU 加速 MATLAB 代码?

    AccelerEyes 于 2012 年 12 月宣布与 Mathworks 合作开发 GPU 代码 并已停止生产 Jacket for MATLAB http blog accelereyes com blog 2012 12 12 ex
  • 构建maven项目时编译错误

    我们正在尝试从 Jenkins 构建并部署一个 Maven 工件到我们的 Nexus 存储库管理器中 但我们在构建过程中遇到了编译错误 这是我们收到的错误 错误 未能执行目标 org apache maven plugins maven c
  • 如何在 Chrome 上调试 JavaScript

    我有一个奇怪的问题 jquery load 有时在 chrome 上失败 我不会用细节来打扰你们 我只是在寻找如何调试这样的问题的指导者 我想也许 firebug 可以提供帮助 但问题只发生在 chrome 上 甚至适用于 IE 我做类似的
  • 使用 XMLHttpRequest 上传文件

    我正在尝试使用拖放插件 http pascalprecht github com DnD js 在javascript中使用ajax上传文件
  • 从 HTML 表单到 PDF

    有没有一种简单的方法可以在网页上创建 HTML 表单 当用户提交时 将数据放入 PDF 文件并将其发送给接收者 该网页在 net 上运行 Thanks Umbraco http our umbraco org projects websit
  • 如何使用 C# 或 XAML 创建自动动画轮播循环图像?

    我已经在 Web 开发中完成了轮播 但通过 XAML 或 C 在 WPF 中为它们设置动画对我来说是新鲜事 网上有一些例子 但它们要么已经过时 要么不是我想要的 即使当我玩弄其他项目的源代码时 这也不是我所希望的 我想让图像自动从左到右 水
  • Android webview中的无限滚动

    我有一些本地 html 文件 我想用无限滚动方法显示它们 NOTE 我无法更改 html 内容 所以请不要建议向其中添加 javascript 我必须在运行时执行此操作 所以 我发现我可以执行javascript在运行时通过loadUrl
  • 生成的 pdf 中的文本是反向的

    我正在使用 pdfbox 向 pdf 文件添加一行 但我添加的文字是相反的 File file new File filePath PDDocument document PDDocument load file PDPage page d