如何使用Java中的POI将iText图像转换为可以插入到Excel电子表格中的图像?

时间:2019-12-13 17:48:19

标签: java apache-poi itext7

我已经使用Java中的iText生成了pdf报告。现在,我需要拍摄一些iText图像(com.itextpdf.layout.element.Image),然后使用POI将其放入电子表格中。我正在使用iText 7。

我创建了一个基于Rectangle的PdfFormXObject。然后,我基于PdfFormXObject创建了一个PdfCanvas。在画布上添加线条和文本后,便将PdfFormXObject转换为iText图像。这张图片是他们插入到iText表中的。

我现在需要拍摄相同的图像并将其转换,以便POI可以在电子表格中使用它。

在下面的代码示例中,wb.addPicture(image,1)产生错误,因为图像格式错误。是否可以将此iText图像转换为java.awt.image?

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.itextpdf.kernel.colors.DeviceRgb;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Table;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.layout.renderer.IRenderer;

public class Test {

    public static void main(String[] args) {
        try {
            PdfDocument pdf = new PdfDocument(new PdfWriter("comparison2.pdf"));

            Rectangle graphBox = new Rectangle(246, 98);
            PdfFormXObject graph = new PdfFormXObject(graphBox);
            graph.makeIndirect(pdf);
            PdfCanvas canvas = new PdfCanvas(graph, pdf);

            canvas.setStrokeColor(new DeviceRgb(195, 195, 195))
                    .setLineDash(0)
                    .setLineWidth(1.0f)
                    .moveTo(2, 98)
                    .lineTo(246, 98)
                    .lineTo(246, 2)
                    .lineTo(2, 2)
                    .closePathStroke();

            Image image = new Image(graph);

            Rectangle pageSize = new Rectangle(612, 792);
            Document doc = new Document(pdf, new PageSize(pageSize).rotate(), true);
            doc.setMargins(65, 20, 80, 20);

            Table table = new Table(UnitValue.createPercentArray(new float[]{1,1,1}));
            table.setWidth(UnitValue.createPercentValue(100));

            table.addCell(image);

            doc.add(table);

            doc.close();

            pdf.close();


            Workbook wb = new XSSFWorkbook();

            Sheet sheet = wb.createSheet("test");

            wb.addPicture(image, 1);

            FileOutputStream out = new FileOutputStream("test.xlsx");
            wb.write(out);
            out.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

0 个答案:

没有答案