当前位置: 首页 > 知识库问答 >
问题:

如何在Itext7中使用自定义颜色和自定义字体

伍耀
2023-03-14

我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。

如何使用Itext7实现这一点?

谢谢

共有1个答案

松兴邦
2023-03-14

这在许多不同的iText 7教程中有所解释:

  • 在构建模块教程中介绍字体,
  • 在PDF超文本标记语言中使用pdfHTML字体教程。

举个例子:

假设您有一个用于Cardo常规字体的字体程序:

public static final String REGULAR =
    "src/main/resources/fonts/Cardo-Regular.ttf";

您可以使用以下字体程序创建FontProgram对象:

FontProgram fontProgram =
    FontProgramFactory.createFont(REGULAR);

使用此FontProgram对象,可以创建Pdfont

PdfFont font = PdfFontFactory.createFont(
    fontProgram, PdfEncodings.WINANSI, true);

现在,您可以使用这个PdfFont对象来更改段落的字体:

p.setFont(font);

这只是使用自定义字体的一种方法;你可以在教程中找到其他方法。你当然明白,把教程复制到堆栈溢出答案中是没有意义的。

iText 7有一个名为Color的类:http://itextsupport.com/apidocs/iText7/latest/com/itextpdf/kernel/colors/Color.html

这个类有几个子类:CalGrayCalRgbDeviceCmykDeviceGraydeviceenDeviceRgbiccbaseindexLabPatternColor分离

您可以通过选择其中一个子类来创建自html" target="_blank">定义颜色,具体取决于您使用的颜色空间。例如:假设您想要使用设备RGB颜色,那么您将使用DeviceRgb类。

举个例子:

假设您想要一个值为red=0.2,green=0.2,Blue=0.2的RGB颜色,那么您将使用此构造函数:http://itextsupport.com/apidocs/iText7/latest/com/itextpdf/kernel/colors/DeviceRgb.html#DeviceRgb-float-float-float-

Color color = new ColorRgb(0.2f, 0.2f, 0.2f);

这只是一个例子。ISO 32000-2将为您提供有关颜色空间之间差异的更多信息(需要选择正确的颜色类别),API文档将解释不同构造函数的工作原理。

 类似资料:
  • 跟着这个答案https://stackoverflow.com/a/55113171/324969这个答案https://stackoverflow.com/a/60686826/324969. 如果我按下Ctrl,逗号,在设置中搜索“颜色”,单击settings.json中的

  • 我正在尝试写一个巨大的excel文件,我的要求允许我写行和忘记,所以我使用SXSSF,它允许只在内存中保留几行,其余的都写到文档中。这有助于克服大文件的outofmemory异常。 但是我还需要使用sxssf工作簿为单元格设置样式。我无法找到在SXSSF中定义和使用自定义颜色的方法(就像在XSSF中,我们可以直接定义自定义颜色,而在HSSF中,我们可以用自定义颜色替换调色板中的一个条目) 我找不到

  • 我正在努力修改MUI next(v1)中的按钮颜色。 我该如何设置muitheme,使其行为与bootstrap相似,这样我就可以用“btn危险”表示红色,“btn成功”表示绿色? 我尝试了自定义,但它不能正常工作(悬停颜色不会改变),而且似乎是重复的。我有什么选择?

  • 我是材料设计新手。我想使用自定义配色方案,特别是原色和强调色。 我看过他们的主题生成器工具,但它只提供了一些颜色。 我该怎么做?我如何在使用Material Design Lite的网站中使用自定义(主色和强调色)(不包括在主题生成器工具中)颜色?

  • 我有一个经典的TableView,你可以在这里删除项目,如果你滑动,然后点击按钮。我知道如何在单元格上设置自定义背景,但我找不到如何设置自定义字体和颜色。 谢谢你的帮助!

  • 我正在开发一个程序,它可以创建几个pdf文档,并将不同的文本放在同一个位置。文本应该放在一个特定的区域,如果它的宽度不适合它应该包装。它还有一个自定义字体,在该区域可能会有不同的对齐方式。它应该与顶部垂直对齐,因为当该区域布置为三条线,而我只有一条线时,它应该出现在顶部。最后,我需要在字体大小方面保持领先地位。 精确的文本定位很重要(例如,我需要“Hello world”中“H”的左上角明确显示为