我使用 parboiled 作为依赖项:
// https://mvnrepository.com/artifact/org.parboiled/parboiled-java
api 'org.parboiled:parboiled-java:1.4.1'
Run Code Online (Sandbox Code Playgroud)
从 java 17 更新到 21 后,我在尝试创建解析器时在运行时收到此错误:
java.lang.RuntimeException: Error creating extended parser class: Unsupported class file major version 65
at org.parboiled.Parboiled.createParser(Parboiled.java:58)
Run Code Online (Sandbox Code Playgroud)
版本 65 的类文件是 Java 21。解析器类现在确实使用目标 21 进行编译。为什么 parboiled 不能使用它?除了降级到目标 17 之外还有其他解决方法吗?
最小可重现示例:
构建.gradle
plugins {
id "application"
}
apply plugin : "java"
ext {
javaMainClass = "test.TestParser"
}
application {
mainClassName = javaMainClass
}
dependencies {
implementation 'org.parboiled:parboiled-java:1.4.1'
}
Run Code Online (Sandbox Code Playgroud)
测试解析器.java
package test;
import org.parboiled.BaseParser;
import org.parboiled.Parboiled;
import org.parboiled.Rule;
import org.parboiled.annotations.BuildParseTree;
@BuildParseTree
public class …Run Code Online (Sandbox Code Playgroud) 要为Apache POI 3.7及更低版本中的XSSFWorkbook应用自定义颜色,可以执行以下操作:
java.awt.Color c = new java.awt.Color (1,2,3)
XSSFCellStyle xcs = xssfWorkbook.createCellStyle();
XSSFFont headerFont = xssfWorkbook.createFont();
headerFont.setColor(new XSSFColor(c));
xcs.setFont(headerFont);
cell.setCellStyle(xcs);
Run Code Online (Sandbox Code Playgroud)
在版本4.0中,XSSFColor(java.awt.Color)被删除。仍然可以通过使用其他“黑客”来达到相同目的:
XSSFColor xc = new XSSFColor();
xc.setARGBHex(String.format("%02x%02x%02x",c.getRed(),c.getGreen(),c.getBlue()));
headerFont.setColor(xc);
Run Code Online (Sandbox Code Playgroud)
但是,这样做的“正确”方法是什么?大多数XSSFColor方法都涉及IndexedColorMap,但我找不到任何示例来说明如何在XSSFWorkbook中使用它来设置自定义颜色。
我想使用 Apache POI 将 HTML 作为 altChunk 添加到 DOCX 文件中。我知道 doc4jx 可以使用更简单的 API 来做到这一点,但出于技术原因,我需要使用 Apache POI。
使用 CT 类对 xml 进行低级操作有点棘手。我可以使用以下代码创建一个 altChunk:
import java.io.File;
import java.io.FileOutputStream;
import javax.xml.namespace.QName;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.impl.values.XmlComplexContentImpl;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.impl.CTBodyImpl;
public class AltChunkTest {
public static void main(String[] args) throws Exception {
XWPFDocument doc = new XWPFDocument();
doc.createParagraph().createRun().setText("AltChunk below:");
QName ALTCHUNK = new QName ( "http://schemas.openxmlformats.org/wordprocessingml/2006/main" , "altChunk" ) ;
CTDocument1 ctDoc = doc.getDocument() ;
CTBodyImpl ctBody = (CTBodyImpl) ctDoc. …Run Code Online (Sandbox Code Playgroud)