211 Star 1.6K Fork 392

dromara / x-easypdf

 / 详情

当GlobalHeader中放入图片时,报错:java.io.IOException

待办的
创建于  
2024-03-13 11:23

版本:2.11.10
模块:pdfbox
错误原因:flush生成临时文件后,XEasyPdfImage等通过Stream加载的数据会被关闭,image会被清空。因此会导致下面的异常。我想可行的改动方法,方式一:调整XEasy的draw方法 方式二:每次flush后重新构建GlobalHeader;【目前我是用方式二解决的】
堆栈:

java.io.IOException: COSStream has been closed and cannot be read. Perhaps its enclosing PDDocument has been closed?

	at org.apache.pdfbox.cos.COSStream.checkClosed(COSStream.java:83)
	at org.apache.pdfbox.cos.COSStream.createRawInputStream(COSStream.java:133)
	at org.apache.pdfbox.pdfwriter.COSWriter.visitFromStream(COSWriter.java:1268)
	at org.apache.pdfbox.cos.COSStream.accept(COSStream.java:416)
	at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObject(COSWriter.java:570)
	at org.apache.pdfbox.pdfwriter.COSWriter.doWriteObjects(COSWriter.java:496)
	at org.apache.pdfbox.pdfwriter.COSWriter.doWriteBody(COSWriter.java:480)
	at org.apache.pdfbox.pdfwriter.COSWriter.visitFromDocument(COSWriter.java:1162)
	at org.apache.pdfbox.cos.COSDocument.accept(COSDocument.java:452)
	at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1435)
	at org.apache.pdfbox.pdfwriter.COSWriter.write(COSWriter.java:1322)
	at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1379)
	at org.apache.pdfbox.pdmodel.PDDocument.save(PDDocument.java:1346)
	at wiki.xsx.core.pdf.doc.XEasyPdfDocument.flush(XEasyPdfDocument.java:717)
	at wiki.xsx.core.pdf.doc.XEasyPdfDocument.saveTemp(XEasyPdfDocument.java:997)
	at wiki.xsx.core.pdf.doc.XEasyPdfDocument.save(XEasyPdfDocument.java:766)
......

测试代码

public void testPdf() {
        // 定义pdf输出路径
        String outputPath = "D://out.pdf";

        XEasyPdfText titleText = XEasyPdfHandler.Text.build("明细");
        titleText.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
        titleText.setFontSize(32);
        titleText.setMarginTop(15);
        XEasyPdfWatermark watermark = XEasyPdfHandler.Watermark.build("账单");
        // 如果需要动态加Page,需要使用定制的对象;
        XEasyPdfDocument document = XEasyPdfHandler.Document.build();
        document.setGlobalHeader(XEasyPdfHandler.Header.build(
                XEasyPdfHandler.Image.build(
                        new File("C:\\Users\\涂\\Pictures\\1_加入_创建社区.png"))));
        document.setGlobalWatermark(watermark);

        int[] cellWidth = {130, 80, 80, 262};

        for (int current = 1; current <= GENERATE_PAGE; current++) {
            XEasyPdfPage xEasyPdfPage = generatePage(current, cellWidth);
            document.flush();
            document.addPage(xEasyPdfPage);
        }
        document.save(outputPath).close();
    }

评论 (1)

無炆 创建了任务
無炆 修改了描述
無炆 修改了描述
展开全部操作日志

可以考虑使用3.x

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
1494292 xsxgit 1585187915 1168430 crazyasm 1578944360
Java
1
https://gitee.com/dromara/x-easypdf.git
git@gitee.com:dromara/x-easypdf.git
dromara
x-easypdf
x-easypdf

搜索帮助