itext - 仅更改特定文本颜色 + itext
问题描述
我正在使用下面的代码,它将蓝色链接的颜色从 pdf 更改为黑色:
void testAllRgbBlueToBlackConverter(String resourceName, String resultName) throws IOException {
System.out.printf("\nConverting '%s'.\n", resourceName);
try ( InputStream resource = getClass().getResourceAsStream(resourceName);
PdfReader pdfReader = new PdfReader(resource);
OutputStream result = new FileOutputStream(new File(RESULT_FOLDER, resultName));
PdfWriter pdfWriter = new PdfWriter(result);
PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter) ) {
PdfCanvasEditor editor = new AllRgbBlueToBlackConverter();
for (int i = 1; i <= pdfDocument.getNumberOfPages(); i++)
{
editor.editPage(pdfDocument, i);
}
}
}
class AllRgbBlueToBlackConverter extends PdfCanvasEditor {
@Override
protected void write(PdfCanvasProcessor processor, PdfLiteral operator, List<PdfObject> operands)
{
String operatorString = operator.toString();
if (RGB_SETTER_CANDIDATES.contains(operatorString) && operands.size() == 4) {
if (isBlue(operands.get(0), operands.get(1), operands.get(2))) {
PdfNumber number0 = new PdfNumber(0);
operands.set(0, number0);
operands.set(1, number0);
operands.set(2, number0);
}
}
super.write(processor, operator, operands);
}
boolean isBlue(PdfObject red, PdfObject green, PdfObject blue) {
if (red instanceof PdfNumber && green instanceof PdfNumber && blue instanceof PdfNumber) {
float r = ((PdfNumber)red).floatValue();
float g = ((PdfNumber)green).floatValue();
float b = ((PdfNumber)blue).floatValue();
return b > .5f && r < .9f*b && g < .9f*b;
}
return false;
}
final Set<String> RGB_SETTER_CANDIDATES = new HashSet<>(Arrays.asList("rg", "RG", "sc", "SC", "scn", "SCN"));
}
我可以限制上面的代码吗,我只在文本等于“bla bla”时才限制更改颜色。不然不变色?如果 pdf 中有任何可用的图形,此代码也会更改图形线的颜色。
我正在使用itext。如果有人在其他库中有任何可用代码。请与我分享。自一个月以来,我一直坚持这一点。我想将特定文本的颜色从蓝色更改为黑色。
解决方案
推荐阅读
- string-view - gsl::string_span 和 std::string_view 有何不同?
- oracle - 如何允许其他用户访问我的架构
- c# - InPlaceBitmapMetadataWriter 在将关键字从最近的相机中写入照片时失败
- instagram - 如何获得 Instagram 访问令牌?
- css - 如何更改 mat-table 内 ng-container 的宽度
- image - 图像延迟加载 Ionic 3
- reactjs - 子屏幕中的 React-Native 导航?
- python - 当我只需要添加我的用户的行时,为什么它会在 nlist 中记录额外的项目/行('')?
- c++ - SVG 文件中的图像在放大时会失去清晰度
- powershell - 比较管理与 PowerShell