diff --git a/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java new file mode 100644 index 0000000..ba30f29 --- /dev/null +++ b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruDocumentProperties.java @@ -0,0 +1,119 @@ +package com.easyagents.spring.boot.document.pdf.mineru; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * MinerU Spring Boot 配置。 + * + * @author Codex + * @since 2026-04-14 + */ +@ConfigurationProperties(prefix = "easy-agents.document.pdf.mineru") +public class MineruDocumentProperties { + + private String baseUrl; + private Integer connectTimeoutMs = 3000; + private Integer readTimeoutMs = 600000; + private Integer writeTimeoutMs = 600000; + private Integer pollIntervalMs = 1000; + private Integer resultTimeoutMs = 1800000; + private String defaultBackend = "vlm-http-client"; + private String defaultParseMethod = "auto"; + private List defaultLangList = new ArrayList(Arrays.asList("ch")); + private Boolean defaultFormulaEnable = true; + private Boolean defaultTableEnable = true; + + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + public Integer getConnectTimeoutMs() { + return connectTimeoutMs; + } + + public void setConnectTimeoutMs(Integer connectTimeoutMs) { + this.connectTimeoutMs = connectTimeoutMs; + } + + public Integer getReadTimeoutMs() { + return readTimeoutMs; + } + + public void setReadTimeoutMs(Integer readTimeoutMs) { + this.readTimeoutMs = readTimeoutMs; + } + + public Integer getWriteTimeoutMs() { + return writeTimeoutMs; + } + + public void setWriteTimeoutMs(Integer writeTimeoutMs) { + this.writeTimeoutMs = writeTimeoutMs; + } + + public Integer getPollIntervalMs() { + return pollIntervalMs; + } + + public void setPollIntervalMs(Integer pollIntervalMs) { + this.pollIntervalMs = pollIntervalMs; + } + + public Integer getResultTimeoutMs() { + return resultTimeoutMs; + } + + public void setResultTimeoutMs(Integer resultTimeoutMs) { + this.resultTimeoutMs = resultTimeoutMs; + } + + public String getDefaultBackend() { + return defaultBackend; + } + + public void setDefaultBackend(String defaultBackend) { + this.defaultBackend = defaultBackend; + } + + public String getDefaultParseMethod() { + return defaultParseMethod; + } + + public void setDefaultParseMethod(String defaultParseMethod) { + this.defaultParseMethod = defaultParseMethod; + } + + public List getDefaultLangList() { + return defaultLangList; + } + + public void setDefaultLangList(List defaultLangList) { + this.defaultLangList = defaultLangList == null + ? new ArrayList(Arrays.asList("ch")) + : defaultLangList; + } + + public Boolean getDefaultFormulaEnable() { + return defaultFormulaEnable; + } + + public void setDefaultFormulaEnable(Boolean defaultFormulaEnable) { + this.defaultFormulaEnable = defaultFormulaEnable; + } + + public Boolean getDefaultTableEnable() { + return defaultTableEnable; + } + + public void setDefaultTableEnable(Boolean defaultTableEnable) { + this.defaultTableEnable = defaultTableEnable; + } +} diff --git a/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java new file mode 100644 index 0000000..85e9051 --- /dev/null +++ b/easy-agents-spring-boot-starter/src/main/java/com/easyagents/spring/boot/document/pdf/mineru/MineruPdfAutoConfiguration.java @@ -0,0 +1,65 @@ +package com.easyagents.spring.boot.document.pdf.mineru; + +import com.easyagents.document.core.DocumentParseService; +import com.easyagents.document.pdf.PdfDocumentParseService; +import com.easyagents.document.pdf.mineru.MineruPdfDocumentParseService; +import com.easyagents.document.pdf.mineru.MineruProperties; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * MinerU PDF 文档解析自动装配。 + * + * @author Codex + * @since 2026-04-14 + */ +@Configuration(proxyBeanMethods = false) +@ConditionalOnClass(MineruPdfDocumentParseService.class) +@ConditionalOnProperty(prefix = "easy-agents.document.pdf", name = "provider", havingValue = "mineru") +@EnableConfigurationProperties(MineruDocumentProperties.class) +public class MineruPdfAutoConfiguration { + + /** + * 注册统一 PDF 解析服务。 + * + * @param properties Spring Boot 配置 + * @return PDF 解析服务 + */ + @Bean + @ConditionalOnMissingBean(PdfDocumentParseService.class) + public PdfDocumentParseService pdfDocumentParseService(MineruDocumentProperties properties) { + return new MineruPdfDocumentParseService(toMineruProperties(properties)); + } + + /** + * 将 PDF 服务以统一文档解析服务类型暴露,便于调用方直接按抽象注入。 + * + * @param pdfDocumentParseService PDF 解析服务 + * @return 统一文档解析服务 + */ + @Bean + @ConditionalOnMissingBean(DocumentParseService.class) + public DocumentParseService documentParseService(PdfDocumentParseService pdfDocumentParseService) { + return pdfDocumentParseService; + } + + private MineruProperties toMineruProperties(MineruDocumentProperties properties) { + MineruProperties mineruProperties = new MineruProperties(); + mineruProperties.setBaseUrl(properties.getBaseUrl()); + mineruProperties.setConnectTimeoutMs(properties.getConnectTimeoutMs()); + mineruProperties.setReadTimeoutMs(properties.getReadTimeoutMs()); + mineruProperties.setWriteTimeoutMs(properties.getWriteTimeoutMs()); + mineruProperties.setPollIntervalMs(properties.getPollIntervalMs()); + mineruProperties.setResultTimeoutMs(properties.getResultTimeoutMs()); + mineruProperties.setDefaultBackend(properties.getDefaultBackend()); + mineruProperties.setDefaultParseMethod(properties.getDefaultParseMethod()); + mineruProperties.setDefaultLangList(properties.getDefaultLangList()); + mineruProperties.setDefaultFormulaEnable(properties.getDefaultFormulaEnable()); + mineruProperties.setDefaultTableEnable(properties.getDefaultTableEnable()); + return mineruProperties; + } +}