PDF头部报错:Evaluation Warning : The document was created with Spire.PDF for Java.

Posted 梦与光同行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PDF头部报错:Evaluation Warning : The document was created with Spire.PDF for Java.相关的知识,希望对你有一定的参考价值。

问题描述

今天生成PDF缝骑章的时候遇到一个问题,那就是每一个文件第一页都会有这个错

会在页面的第一页加上Evaluation Warning : The document was created with Spire.PDF for Java.一段文字

该备注只会标记再报表的第一页的顶部。我们可以新增一页,并删掉第一页即可

解决思路

最终通过网上找例子找到了解决办法,因为这段文字只出现在第一页,所以这里的处理方式是在文档创建时先添加一个空白页,最后再把空白页去掉

代码实现

核心代码

 //添加一个空白页,目的为了删除jar包添加的水印,后面再移除这一页
        pdf.getPages().add();
        //创建字体
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 10),true);
        //遍历文档中的页
        for (int i = 0; i < pdf.getPages().getCount(); i++) 
            Dimension2D pageSize = pdf.getPages().get(i).getSize();
            float y = (float) pageSize.getHeight() - 40;
            //初始化页码域
            PdfPageNumberField number = new PdfPageNumberField();
            //初始化总页数域
            PdfPageCountField count = new PdfPageCountField();
            //创建复合域
            PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.getBlack(), "第0页 共1页", number, count);
            //设置复合域内文字对齐方式
            compositeField.setStringFormat(new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top));
            //测量文字大小
            Dimension2D textSize = font.measureString(compositeField.getText());
            //设置复合域的在PDF页面上的位置及大小
            compositeField.setBounds(new Rectangle2D.Float(((float) pageSize.getWidth() - (float) textSize.getWidth())/2, y, (float) textSize.getWidth(), (float) textSize.getHeight()));
            //将复合域添加到PDF页面
            compositeField.draw(pdf.getPages().get(i).getCanvas());
        
        //移除第一个页
        pdf.getPages().remove(pdf.getPages().get(pdf.getPages().getCount()-1));

完整代码

package dmyz.util;

import com.spire.pdf.*;
import com.spire.pdf.automaticfields.PdfCompositeField;
import com.spire.pdf.automaticfields.PdfPageCountField;
import com.spire.pdf.automaticfields.PdfPageNumberField;
import com.spire.pdf.graphics.*;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

/**
 * @Author  魏一鹤
 * @Description  骑缝章生成
 * @Date 17:03 2022/6/27
**/

public class AcrossPageSeal 
    public static void main(String[] args) throws IOException 
        //要生成的文件模板
        PdfDocument pdf = new PdfDocument();
        pdf.loadFromFile("D:\\\\File\\\\test\\\\wyh\\\\3页.pdf");
        //添加一个空白页,目的为了删除jar包添加的水印,后面再移除这一页
        pdf.getPages().add();
        //创建字体
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 10),true);
        //遍历文档中的页
        for (int i = 0; i < pdf.getPages().getCount(); i++) 
            Dimension2D pageSize = pdf.getPages().get(i).getSize();
            float y = (float) pageSize.getHeight() - 40;
            //初始化页码域
            PdfPageNumberField number = new PdfPageNumberField();
            //初始化总页数域
            PdfPageCountField count = new PdfPageCountField();
            //创建复合域
            PdfCompositeField compositeField = new PdfCompositeField(font, PdfBrushes.getBlack(), "第0页 共1页", number, count);
            //设置复合域内文字对齐方式
            compositeField.setStringFormat(new PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top));
            //测量文字大小
            Dimension2D textSize = font.measureString(compositeField.getText());
            //设置复合域的在PDF页面上的位置及大小
            compositeField.setBounds(new Rectangle2D.Float(((float) pageSize.getWidth() - (float) textSize.getWidth())/2, y, (float) textSize.getWidth(), (float) textSize.getHeight()));
            //将复合域添加到PDF页面
            compositeField.draw(pdf.getPages().get(i).getCanvas());
        
        //移除第一个页
        pdf.getPages().remove(pdf.getPages().get(pdf.getPages().getCount()-1));
        //获取分割后的印章图片
        BufferedImage[] images = GetImage(pdf.getPages().getCount());
        float x = 0;
        float y = 0;
        //实例化PdfUnitConvertor类
        PdfUnitConvertor convert = new PdfUnitConvertor();
        PdfPageBase pageBase;
        //将图片绘制到PDF页面上的指定位置
        for (int i = 0; i < pdf.getPages().getCount(); i++)
        
            BufferedImage image= images[ i ];
            pageBase = pdf.getPages().get(i);
            x = (float)pageBase.getSize().getWidth() - convert.convertUnits(image.getWidth(), PdfGraphicsUnit.Point, PdfGraphicsUnit.Pixel) + 40;
            y = (float) pageBase.getSize().getHeight()/ 2;
            pageBase.getCanvas().drawImage(PdfImage.fromImage(image), new Point2D.Float(x, y));
        
        System.out.println("x = " + x);
        System.out.println("y = " + y);
        //最终生成缝骑章   的结果
        pdf.saveToFile("D:\\\\File\\\\test\\\\wyh\\\\Result.pdf");

    

    //定义GetImage方法,根据PDF页数分割印章图片
    static BufferedImage[] GetImage(int num) throws IOException 
        String originalImg = "D:\\\\File\\\\test\\\\wyh\\\\魏一鹤的测试印章.png";
        BufferedImage image = ImageIO.read(new File(originalImg));
        int rows = 1;
        int cols = num;
        int chunks = rows * cols;
        int chunkWidth = image.getWidth() / cols;
        int chunkHeight = image.getHeight() / rows;
        int count = 0;
        BufferedImage[] imgs = new BufferedImage[ chunks ];
        for (int x = 0; x < rows; x++) 
            for (int y = 0; y < cols; y++) 
                imgs[ count ] = new BufferedImage(chunkWidth, chunkHeight, image.getType());
                Graphics2D gr = imgs[ count++ ].createGraphics();
                gr.drawImage(image, 0, 0, chunkWidth, chunkHeight,
                        chunkWidth * y, chunkHeight * x,
                        chunkWidth * y + chunkWidth, chunkHeight * x + chunkHeight, Color.WHITE,null);
                gr.dispose();
            
        
        return imgs;
    


处理前

处理后

错误已经消息

以上是关于PDF头部报错:Evaluation Warning : The document was created with Spire.PDF for Java.的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 报错exe4j中this executable was created with an evaluation 怎么办

Generalised Policy Iteration With Monte-Carlo Evaluation

ceph-deploy报错

解决使用spire操作文件出现红字:Evaluation Warning: The document was created with Spire.Doc for JAVA.

求教:汇编源码时出错:warnin.missing data;zero assumed.0

Eclipse 新建.jsp页面后,页面头部标签报错的解决方法