2301_81315154 2024-04-28 21:47 采纳率: 33.3%
浏览 2

关于#java#的问题:goods.add(new String[]{"商品编号","商品名称","商品类别","库存数量","销售数量","售价","生产日期","保质期"})


package tool;

import com.cqie.javacs.dao.Dao;
import com.cqie.javacs.entity.Goods;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import javax.print.*;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.JobName;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;

public class PrintExcel1 {
    private PrintExcel1() {}
    public static void Print() throws IOException, PrintException {
        // 示例数据
        Vector<Goods> allGoods = new Dao().getAllGoods();
        List<String[]> goods = new ArrayList<String[]>();
        goods.add(new String[]{"商品编号","商品名称","商品类别","库存数量","销售数量","售价","生产日期","保质期"});
        for (Goods allGood : allGoods) {
            goods.add(new String[]{
                    allGood.getId(),
                    allGood.getName(),
                    allGood.getCategory(),
                    String.valueOf(allGood.getCount()),
                    String.valueOf(allGood.getSellcount()),
                    String.valueOf(allGood.getPrice()),
                    allGood.getDataOfManufacture(),
                    String.valueOf(allGood.getExpiration()),

            });
        }
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("商品表");
        for (int i = 0; i < goods.size(); i++) {
            Row row = sheet.createRow(i);
            for (int j = 0; j < goods.get(i).length; j++) {
                Cell cell = row.createCell(j);
                cell.setCellValue(goods.get(i)[j]);
            }
        }
        try (
                FileOutputStream outputStream = new FileOutputStream("商品库存.xlsx")) {
            workbook.write(outputStream);

        } finally {
            workbook.close();
        }

        PrintService printService = PrintServiceLookup.lookupDefaultPrintService();

        PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();

        attributeSet.add(new JobName("Print",null));
        attributeSet.add(new Copies(1));

        DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;

        DocPrintJob printJob = printService.createPrintJob();


        FileInputStream inputStream = new FileInputStream("D:\\DemoJavaApplication\\商品库存.xlsx");
        Doc doc = new SimpleDoc(inputStream, docFlavor, null);

        printJob.print(doc,attributeSet);
        inputStream.close();
        workbook.close();


    }
}

img


为什么会出现这个问题,求解答

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-04-28 21:47
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    图片显示了一个错误信息,内容为:“联想浏览器-极光PDF合作版 无法打开rint(5).pdf!因为不支持该类型文件或文件已经损坏,确定”。

    问题概括

    这个问题的目的是要解决在Java程序中使用Apache POI库生成Excel文件,并尝试打印该文件时遇到的两个问题:一是生成的Excel文件无法被浏览器打开;二是在打印过程中可能遇到的问题。

    问题出现原因

    1. 浏览器打开PDF文件错误:图片中的错误信息表明尝试用浏览器打开一个PDF文件,但实际上文件名表明它是一个Excel文件(rint(5).pdf 实际上应该是 rint(5).xlsx)。这可能是因为文件扩展名错误,或者浏览器默认的打开方式设置不正确。
    2. 打印过程中的问题:在提供的代码中,打印部分使用了FileInputStream来读取Excel文件,但在使用完毕后没有正确关闭,这可能导致文件锁定或其他资源问题。

    问题解决方案

    1. 修正文件扩展名:确保生成的Excel文件使用正确的扩展名.xlsx
    2. 修正打印代码:确保所有打开的文件输入流在操作完成后都被正确关闭。

    提供代码

    以下是修正后的代码示例,包括了对打印过程中文件输入流的正确关闭:

    import javax.print.*;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class PrintExcel1 {
        public static void main(String[] args) throws IOException, PrintException {
            PrintExcel1.Print();
        }
    
        public static void Print() throws IOException, PrintException {
            // ... (省略其他部分以节省空间)
    
            try (
                    FileOutputStream outputStream = new FileOutputStream("商品库存.xlsx");
                    FileInputStream inputStream = new FileInputStream("商品库存.xlsx")
            ) {
                // 创建和写入Excel文件的代码不变
    
                // 打印Excel文件
                PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
                PrintRequestAttributeSet attributeSet = new HashPrintRequestAttributeSet();
                attributeSet.add(new JobName("Print", null));
                attributeSet.add(new Copies(1));
    
                DocFlavor docFlavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
                DocPrintJob printJob = printService.createPrintJob();
    
                Doc doc = new SimpleDoc(inputStream, docFlavor, null);
                printJob.print(doc, attributeSet);
            } finally {
                // 确保文件输入流被关闭
            }
        }
    }
    

    代码运行方式

    • 确保你的开发环境中安装了Java Development Kit (JDK)。
    • 将上述代码保存为.java文件,例如PrintExcel1.java
    • 使用Java编译器编译该文件:javac PrintExcel1.java
    • 运行编译后的类:java PrintExcel1

    代码预期运行结果

    如果代码正确执行,它将生成一个名为“商品库存.xlsx”的Excel文件,并尝试使用系统默认打印机打印该文件。如果打印成功,打印机将输出该Excel文件的内容。

    推荐相关链接

    请注意,对于浏览器无法打开PDF的问题,实际上应该是Excel文件,所以可能需要检查文件的创建和保存过程,确保使用了正确的扩展名和格式。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月28日