aspose.words 生成图片,poi 读取文本

<dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>4.1.2</version>
</dependency>

 aspose.words jar包

import com.aspose.words.*;
import com.scorpio.sdk.constant.AliYunConstant;
import com.scorpio.sdk.service.OssService;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.*;
import java.util.List;

/**
 * @Author xq
 * @Package: com.scorpio.sdk.utils
 * @Project: scorpio-project
 * @Date 2023/4/27 9:53
 * 文档解析
 */
@Component
public class DocAnalysisUtil {

    private static OssService ossService;

    @Autowired
    public void setOssService(OssService ossService) {
        DocAnalysisUtil.ossService = ossService;
    }

    /**
     * 生成文档首页图片
     *
     * @param filePath
     * @return
     */
    public static String generateImg(String filePath) {
//        根据文件地址,获取文件流
        InputStream fileInputStream = ossService.getFileInputStream(filePath);
        InputStream resInputStream = null;
        try {
            Document doc = new Document(fileInputStream);
            ImageSaveOptions iso = new ImageSaveOptions(SaveFormat.JPEG);
            iso.setResolution(128);
            iso.setPrettyFormat(true);
            iso.setUseAntiAliasing(true);
//        文件页数
            iso.setPageIndex(0);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            doc.save(baos, iso);
            byte[] buffer = baos.toByteArray();
            resInputStream = new ByteArrayInputStream(buffer);
//          文件路径
            String path = ossService.putObject(AliYunConstant.getOperationPath(SaveFormat.getName(SaveFormat.JPEG).toLowerCase()), resInputStream);
            return ossService.getLogoWatermarkImageUrl(path);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (resInputStream != null) {
                    resInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 读取文本
     * @param filePath 文件路径
     * @param num 读取到多少行
     * @return
     */
    public static String readText(String filePath, int num) {
//        根据文件地址,获取文件流
        InputStream fileInputStream = ossService.getFileInputStream(filePath);

        InputStream inputStream = FileMagic.prepareToCheckMagic(fileInputStream);
        StringBuilder sb = new StringBuilder();
        try {
            if (FileMagic.valueOf(inputStream) == FileMagic.OOXML) {
                XWPFDocument docx = new XWPFDocument(inputStream);
                List<XWPFParagraph> paras = docx.getParagraphs(); //将得到包含段落列表
                for (int i = 0; i < (paras.size() > num ? num : paras.size()); i++) {
                    XWPFParagraph para = paras.get(i);
                    sb.append("<p>").append(para.getText().replace("\r", "").replace("  ", " ")).append("</p>");
                }
            } else {
                HWPFDocument doc = new HWPFDocument(inputStream);
                org.apache.poi.hwpf.usermodel.Range r = doc.getRange();
                for (int i = 0; i < (r.numParagraphs() > num ? num : r.numParagraphs()); i++) {
                    Paragraph paragraph = r.getParagraph(i);
                    sb.append("<p>").append(paragraph.text().replace("\r", "").replace("  ", " ")).append("</p>");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fileInputStream.close();
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

}

读取指定页面文本(后面在文档上找到的方法)

    /**
     * 读取文本
     * @param filePath 文件路径
     * @return
     */
    public static String readText(String filePath) {
//        根据文件地址,获取文件流
        InputStream fileInputStream = ossService.getFileInputStream(filePath);
        StringBuilder sb = new StringBuilder();
        try {
            Document doc = new Document(fileInputStream);
            LayoutCollector layoutCollector = new LayoutCollector(doc);
            NodeCollection childNodes = doc.getFirstSection().getBody().getChildNodes(NodeType.PARAGRAPH, true);
            int pageIndex = 1; // 第一页
            for (Object childNode : childNodes) {
                Paragraph paragraph = (com.aspose.words.Paragraph) childNode;
//                当前页面
                int paraPage = layoutCollector.getEndPageIndex(paragraph);
                if (paraPage == pageIndex) {
                    sb.append("<p>").append(paragraph.getText().replace("\r", "").replace("  ", " ")).append("</p>");
                } else if (paraPage > pageIndex) {
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream != null) {
                    fileInputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return sb.toString();
    }

Spire.Doc是一个功能强大的.NET库,用于处理Microsoft Office文档如Word、Excel和PowerPoint等,包括生成和编辑它们。如果你想要在Java环境中操作富文本内容,通常会通过使用Java的第三方库或者API桥接工具来实现。比如,你可以考虑使用Apache POI或者Aspose.Cells、Aspose.Words等类似的产品。 对于Spire.Doc,由于它是.NET专有的,直接在Java中使用可能会有些困难。但有一些解决方案可以将.NET代码转换成Java,例如IronPython和J#,或者通过编写代理类或者JNI(Java Native Interface)来间接调用.NET API。 然而,如果你想在Java环境中操作富文本,更为常见的是通过像iText这样的PDF处理库,或者是专门针对Office文档操作的Java库,如Aspose.Cells和Aspose.Words,它们允许你创建、读取和编辑Word文档中的富文本内容。 以下是一个简单的Aspose.Words Java示例,展示了如何插入和编辑富文本: ```java import com.aspose.words.*; public class Main { public static void main(String[] args) throws Exception { // 创建一个新的Document对象 Document doc = new Document(); // 创建一个Run对象,这是Word文档的基本元素之一,用于包含文本 Run run = new Run(doc, "这是一段富文本"); // 添加样式,如粗体、斜体、颜色等 Font font = new Font(doc, "Arial", 14, FontStyle.Bold); run.getFont().set(font); // 插入到文档中 Section section = doc.getSections().get(0).getBody(); section首段.appendChild(run); // 保存文档 doc.save("output.docx"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值