如何将 PDTextbox 的文本设置为颜色?

2023-12-10

我想要一个 PDTextbox 有红色文本。我可以写出红色文本,并且可以设置文本框的值,但我不确定如何将文本框内容设置为红色。

ie.

if (field instanceof PDTextbox) {
    field.setValue(field.getPartialName());
    //SOME WAY TO SET COLOR HERE?

这是我正在使用的测试代码:

package com.circumail;

import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.fontbox.util.BoundingBox;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.apache.pdfbox.pdmodel.interactive.form.PDTextbox;

public class Test {

  public static void main(String[] args) throws Exception {
    File file = new File("c://temp//Work_Comp_App-Acord_130 fillv2.pdf");
    System.out.println("exists= " + file.exists());

    // Load the pdfTemplate
    PDDocument pdfDoc = PDDocument.load(file);
    PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
    PDAcroForm acroForm = docCatalog.getAcroForm();

    // Get field names
    List<PDField> fieldList = acroForm.getFields();
    List<PDPage> pages = pdfDoc.getDocumentCatalog().getAllPages();
    for (PDPage page : pages) {
      // PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, firstPage, true, false);
      PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page, true, true, true);
      processFields(acroForm, fieldList, contentStream);
      contentStream.close();
    }

    // Save edited file
    pdfDoc.save("c://temp//Work_Comp_App-Acord_130 fillv2 out.pdf");
    pdfDoc.close();
  }

  private static void processFields(PDAcroForm acroForm, List<PDField> fieldList, PDPageContentStream contentStream) throws IOException {
    for (PDField field : fieldList) {
      if (field instanceof PDTextbox) {
        field.setValue(field.getPartialName());
      }else{
        PDRectangle rect = getOffsetRectangle(field);
        //set text color to RED - not sure if I neet to set this back, can't get original color by calling contentStream.getNonStrokingColor()
        contentStream.setNonStrokingColor(Color.RED);
        contentStream.beginText();
        contentStream.setFont(PDType1Font.HELVETICA_BOLD, 8);
        contentStream.moveTextPositionByAmount(rect.getLowerLeftX(),rect.getLowerLeftY());
        contentStream.drawString( field.getPartialName());
        contentStream.endText();
      }
    }
  }

  private static PDRectangle getOffsetRectangle(PDField field) {
    COSDictionary fieldDict = field.getDictionary();
    COSArray fieldAreaArray = (COSArray) fieldDict.getDictionaryObject(COSName.RECT);
    PDRectangle rect = new PDRectangle(fieldAreaArray);

    //move the text up and to the right a bit
    int extra = 10;
    float x = rect.getLowerLeftX()+ extra;
    float y = rect.getLowerLeftY() + extra;
    float width = rect.getUpperRightX() + extra;
    float height = rect.getUpperRightY()+ extra;
    rect = new PDRectangle(new BoundingBox(x, y, width, height));
    return rect;
  }

  private static void printRect(final PDPageContentStream contentStream, final PDRectangle rect) throws IOException {
    contentStream.setStrokingColor(Color.YELLOW);
    contentStream.drawLine(rect.getLowerLeftX(), rect.getLowerLeftY(), rect.getLowerLeftX(), rect.getUpperRightY()); // left
    contentStream.drawLine(rect.getLowerLeftX(), rect.getUpperRightY(), rect.getUpperRightX(), rect.getUpperRightY()); // top
    contentStream.drawLine(rect.getUpperRightX(), rect.getLowerLeftY(), rect.getUpperRightX(), rect.getUpperRightY()); // right
    contentStream.drawLine(rect.getLowerLeftX(), rect.getLowerLeftY(), rect.getUpperRightX(), rect.getLowerLeftY()); // bottom
    contentStream.setStrokingColor(Color.BLACK);
  }

}

通常,文本字段具有默认外观条目,PDFBox 从中构建外观。因此,您只需更改此默认外观即可包含选择红色的语句。

E.g.

PDDocument pdfDoc = PDDocument.load(SOURCE);
PDDocumentCatalog docCatalog = pdfDoc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();

for (Object field : acroForm.getFields())
{
    if (field instanceof PDVariableText)
    {
        COSDictionary dict = ((PDField)field).getDictionary();
        COSString defaultAppearance = (COSString) dict.getDictionaryObject(COSName.DA);
        if (defaultAppearance != null)
            dict.setString(COSName.DA, defaultAppearance.getString() + " 1 0 0 rg ");

        field = field instanceof PDTextbox ? new PDTextbox(acroForm, dict) : new PDChoiceField(acroForm, dict);
        ((PDField)field).setValue(VALUE);
    }
}
pdfDoc.save(TARGET);
pdfDoc.close();

此代码首先增强默认外观,然后设置字段值。字段变量必须在中间更新,因为PDVariableText在初始化期间将默认外观存储在隐藏成员中。

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

如何将 PDTextbox 的文本设置为颜色? 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 如何实现仅当可用内存较低时才将数据交换到磁盘的写缓存

    我想将应用程序生成的数据缓存在内存中 但如果内存变得稀缺 我想将数据交换到磁盘 理想情况下 我希望虚拟机通知它需要内存并将我的数据写入磁盘并以这种方式释放一些内存 但我没有看到任何方法以通知我的方式将自己挂接到虚拟机中before an O

随机推荐

  • 为什么 IntelliJ 的 Java 编辑器中添加灰色的 var:colon

    我安装了IntelliJ 2016 3 2 构建 IC 163 10154 41 建于2016年12月21日 灰色的 var colon 会自动添加到 Java 编辑器中调用方方法的参数前面 如下所示 添加灰色的 a b 为什么会发生这种情
  • 通过 Cordova config.xml 将条目添加到 iOS .plist 文件

    我是 Cordova CLI 的新手 我需要通过 Cordova 以编程方式执行以下步骤 在项目 plist中添加一个新行 在新行中输入以下值 Key GD库模式Type 字符串 默认 Value GD企业模拟 我想我需要在项目根目录下的
  • flink 中的 Kafka 消费者

    我正在使用 kafka 和 apache flink 我正在尝试使用 apache flink 中的 kafka 主题的记录 采用 avro 格式 下面是我正在尝试使用的代码片段 使用自定义反序列化器对主题中的 avro 记录进行反序列化
  • CSS :focus 在 iOS 中不起作用

    我有一个盒子 里面有一张图片 在悬停 聚焦时 我希望颜色叠加和标题淡入其上 除了 iOS 设备外 它几乎可以在所有浏览器和设备上完美运行 我同时使用 hover 和 focus 伪类来适应各种设备 但它似乎对 iOS 没有帮助 当您将鼠标悬
  • Firebase 消息传递主题超出配额

    我在尝试发送推送时收到错误 超出主题配额 我认为 Firebase 云消息传递没有限制 我做错了什么 据我所知 没有任何限制 一次可以达到1000 但如果你已经结束了 那么火力点将需要更多时间才能发送给每个人 即使你使用自己的服务器发送推送
  • Android Studio 的 git commit 没有看到我修改的文件

    我更熟悉在命令行 尤其是 MacOS 上使用 git 但是 我有时会尝试使用 Android Studio VCS 提交 因为它有时使用起来稍快一些 我今天遇到的奇怪问题是Android的Studio git commit 看不到我的4个修
  • 如何在 javascript/es6 中导入两个同名的类?

    我的文件中有这两个导入语句 import Data from component Data js import Data from actions Data js 这两个文件都包含一个名为Data 我如何指定哪个是哪个 如何避免名字冲突 想
  • 3D 最小二乘平面

    给定一组 3D 数据点 计算 x y z 空间中的最小二乘平面的算法是什么 换句话说 如果我有一堆点 例如 1 2 3 4 5 6 7 8 9 等 那么如何计算最佳拟合平面 f x y ax by c 从一组 3D 点中获取 a b 和 c
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 从Python中的连续列表中识别连续数字组

    python中从n个连续列表中选取多个n个连续整数 从每个列表中选取一个整数 的最有效方法是什么 这里 n 相当大 比如说 100 的数量级 L1 5 3 2 7 1 L2 3 5 6 8 9 21 2 L3 5 3 6 7 3 9 我想从
  • `正则表达式{n,}?` == `正则表达式{n}`?

    编辑 注意 在 的最后 2 我发现你可以写 2 是不是和下面的完全一样 2 No 2 表示两次或以上 2 means exactly两次 量词默认是贪婪的 所以给定字符串foo你会得到foo如果你使用 2 but fo如果你使用 2 因为你
  • Android 从 Gmail 应用程序获取附加文件名

    我必须从 Gmail 应用程序中检索内容的文件名 我得到的内容 uri 类似于 内容 gmail ls messages mymailid 40gmail com 4 attachments 0 1 BEST false 我看到一些应用程序
  • 在 Catalyst 控制器中处理可选 url 参数的最佳方法是什么?

    例如 我知道怎么搭配www domain com foo 21 sub foo Path foo Args 1 my self c foo id do stuff with foo 但我怎样才能匹配www domain com foo 21
  • 删除数组内部的项目,该数组是字典 Swift 2 中的值

    我知道以前可能已经回答过这个问题 但是当我搜索时我找不到任何东西 所以我有一本看起来像这样的字典 var dict String String 我想要做的是删除数组内的某个索引 字典的值 假设我想从此代码中删除字符串 Chair dict
  • 结构体声明中的冒号是什么意思,例如:1、:7、:16 或:32?

    下面的C 代码是什么意思 unsigned char a 1 unsigned char b 7 我猜它创建了两个字符 a 和 b 它们都应该是一个字节长 但我不知道 1 和 7 部分的作用 1 和 7 是限制值范围的位大小 它们通常出现在
  • 打印第二个命令行参数

    我正在编写一段代码来打印程序的第二个参数 我明白那个ebp 8保存参数数量 ebp 12保存程序名称的地址等等 到目前为止我有 include asm io inc SECTION data err1 db Incorrect number
  • 与在 Dom4J 中使用 DOM 相比,XPath 的效率如何?

    例如 考虑以下 xml
  • “以管理员身份运行”和使用 requireAdministrator 的清单有什么区别?

    我编写了一个程序 其清单包含 requireAdministrator 在启用了 UAC 的 Windows 7 系统上 Windows 会弹出一个对话框 询问权限 这是理所当然的 效果很好 如果用户通过右键单击程序并选择 以管理员身份运行
  • 使用 sapply 时如何使用函数的参数?

    我有一个通过列绑定创建的数据集cbindX函数从gdata包裹 这个函数允许我绑定具有不同行数的列 所以 NA当特定列中没有值时会引入 现在 我想计算每列的标准差 我尝试使用 sapply dataset sd 这将返回包含所有行的值和的列
  • 如何将 PDTextbox 的文本设置为颜色?

    我想要一个 PDTextbox 有红色文本 我可以写出红色文本 并且可以设置文本框的值 但我不确定如何将文本框内容设置为红色 ie if field instanceof PDTextbox field setValue field get