# OpenPDF-master **Repository Path**: yang1112/OpenPDF-master ## Basic Information - **Project Name**: OpenPDF-master - **Description**: OpenPDF组件源码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-01-12 - **Last Updated**: 2023-03-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 官方的openpdf源码地址: - https://github.com/LibrePDF/OpenPDF/releases/tag/1.3.30 - [Previous releases](https://github.com/LibrePDF/OpenPDF/releases) ## maven依赖 ```xml com.github.librepdf openpdf 1.3.30 ``` ## 优化内容 在使用 HTMLWorker.parseToList()接口解析html片段时,有俩个问题: ### 1、若遇到有中文情况时会出现无法加载的问题 此问题见test包下的HtmlParserUtil.java ### 2、若html标签中有background-color属性时无法加载问题 分析后通过定位发现是[HTMLWorker.java](openpdf%2Fsrc%2Fmain%2Fjava%2Fcom%2Flowagie%2Ftext%2Fhtml%2Fsimpleparser%2FHTMLWorker.java) 中调用insertStyle时没有识别 ![img.png](img.png) 进入FactoryProperties.insertStyle中:可以看到并没有解析background-color的属性 ![img_1.png](img_1.png) 这里就是问题的关键: 我们加上相关代码 ```java case Markup.CSS_KEY_BGCOLOR: Color bg = Markup.decodeColor(prop.getProperty(key)); if (bg != null) { int hh = bg.getRGB(); String hs = Integer.toHexString(hh); hs = "000000" + hs; hs = "#" + hs.substring(hs.length() - 6); h.put(Markup.CSS_KEY_BGCOLOR, hs); } break; ``` 继续调试,一直到[FactoryProperties.java](openpdf%2Fsrc%2Fmain%2Fjava%2Fcom%2Flowagie%2Ftext%2Fhtml%2Fsimpleparser%2FFactoryProperties.java) 的createChunk()接口:如图: ![img_2.png](img_2.png) 这里创建chunk的时候并没有调用setBackgroud()接口,这里需要加上,所以需要补充相关接口: ```java Color background = getBackground(props); if(background!=null){ chunk.setBackground(background); } ``` ```java public static Color getBackground(ChainedProperties props) { String property = props.getProperty(Markup.CSS_KEY_BGCOLOR); if (property != null && property.length() != 0) { return Markup.decodeColor(props.getProperty(Markup.CSS_KEY_BGCOLOR)); } return null; } ``` 如图所示: ![img_3.png](img_3.png) ![img_4.png](img_4.png)