OpenHtmlToPdf工具rgba转rgb

使用OpenHtmlToPdf工具将html转pdf时不识别html中的rgba属性,导致颜色显示出现问题

测试字符串

    String pdflFile = "/yourPath/ppm-3.pdf";
    FileOutputStream outputStream = new FileOutputStream(pdflFile);

    try (FileOutputStream fos = new FileOutputStream(pdflFile)) {
      PdfRendererBuilder builder = new PdfRendererBuilder();
      File fontFile = new File(
          "/yourPath/fonts/AlibabaSansSEA-Rg.ttf");

      Font font = Font.createFont(Font.TRUETYPE_FONT, fontFile);
      System.out.println("Font Family: " + font.getFamily());
      builder.useFont(fontFile,
          "Alibaba Sans SEA");
      builder.toStream(fos);
      builder.useFastMode();
      String html = "<meta charset="UTF-8">"
+ "<h1 style ="font-family: 'BabelStoneHan',sans-serif;">中文HTML转PDF示例"
+ "这是一个包含中文的 HTML 内容。"
+ "<table style="width:100%; border-collapse: collapse;font-family: 'BabelStoneHan',sans-serif;">"
+ "<th style="border: 1px solid rgb(10, 18, 10); padding: 8px;font-family: 'BabelStoneHan',sans-serif;">表头1"
+ "<th style="border: 1px solid red; padding: 8px;">表头2"
+ "<th style="border: 1px solid rgba(0, 0, 0, 0.06); padding: 8px;">表头3"
+ "<td style="border: 1px solid black; padding: 8px;">数据1"
+ "<td style="border: 1px solid black; padding: 8px;">数据2"
+ "<td style="border: 1px solid black; padding: 8px;">数据3";
      builder.withHtmlContent(
          html,
          null);
      try {
        builder.run();
      } catch (Exception e) {
        e.printStackTrace();
      }
    } catch (FontFormatException e) {
      e.printStackTrace();
    }

问题官方反馈:https://github.com/danfickle/openhtmltopdf/issues/966

需要将rgba转成rgb格式

自己写了一个转换代码将html中的rgba替换成rgb

  public static final Color BACK_GROUND = new Color(255, 255, 255);
  /**
   * 定义匹配RGBA颜色的正则表达式
   */
  public static final String RGBA_REGEX = "rgba\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*([\\d.]+)\\s*\\)";

  /**
   * 编译正则表达式
   */
  public static final Pattern PATTERN = Pattern.compile(RGBA_REGEX);

  public static String rgbaToRgb(String htmlString) {

    Matcher matcher = PATTERN.matcher(htmlString);

    // 替换匹配的RGBA颜色为RGB格式
    StringBuffer sb = new StringBuffer();
    while (matcher.find()) {
      int red = Integer.parseInt(matcher.group(1));
      int green = Integer.parseInt(matcher.group(2));
      int blue = Integer.parseInt(matcher.group(3));
      // alpha
      float alpha = Float.parseFloat(matcher.group(4));
      red = (int) (red * alpha + BACK_GROUND.getRed() * (1 - alpha));
      green = (int) (green * alpha + BACK_GROUND.getGreen() * (1 - alpha));
      blue = (int) (blue * alpha + BACK_GROUND.getBlue() * (1 - alpha));
      // 将RGBA转换为RGB
      String rgbColor = "rgb(" + red + ", " + green + ", " + blue + ")";
      matcher.appendReplacement(sb, rgbColor);
    }
    matcher.appendTail(sb);
    return sb.toString();
  }

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将RGBA格式的图片换为RGB格式,可以使用以下方法: 1. 使用OpenCV库进行换。首先,使用cv2.imread()函数读取图片,并设置参数为1以保持彩色图像。然后,使用cv2.cvtColor()函数将图像从BGRA色彩空间换为BGR色彩空间。最后,使用cv2.imwrite()函数将换后的图像保存为新的文件夹中的RGB格式图像。以下是示例代码: ```python import os import cv2 def convert_rgba_to_rgb(file_path, out_path): for filename in os.listdir(file_path): img = cv2.imread(file_path+'/'+filename, 1) rgb_img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR) cv2.imwrite(out_path + '/' + filename, rgb_img) file_path = "C:/Users/lenovo/Desktop/1" # 输入文件夹 os.mkdir("C:/Users/lenovo/Desktop/2") # 建立新的目录 out_path = "C:/Users/lenovo/Desktop/2" # 设置为新目录为输出文件夹 convert_rgba_to_rgb(file_path, out_path) ``` 2. 使用PIL库进行换。首先,使用Image.open()函数打开图片。然后,使用convert()函数将图像换为RGB模式。最后,使用save()函数保存换后的图像为新的文件夹中的RGB格式图像。以下是示例代码: ```python from PIL import Image def convert_rgba_to_rgb(work_path, work_path_new): count = 0 for i in range(21): im = Image.open(work_path + "\\" + str(count) + ".jpg") image = im.convert('RGB') image.save(work_path_new + "\\" + str(count) + ".jpg") count += 1 work_path = r'C:\Users\Administrator\Desktop\project\3' work_path_new = r"C:\Users\Administrator\Desktop\project\3_new" convert_rgba_to_rgb(work_path, work_path_new) ``` 以上两种方法都可以将RGBA格式的图片换为RGB格式,并保存在新的文件夹中。 #### 引用[.reference_title] - *1* [python图片RGBARGB](https://blog.csdn.net/SiuooooBoom/article/details/117236680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [RGBA RGB](https://blog.csdn.net/felix86/article/details/6679372)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [批量将RGBA图片换成RGB格式](https://blog.csdn.net/qq_44666320/article/details/126703551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值