java PDF加水印报如下错误

java.io.EOFException
at com.lowagie.text.pdf.RandomAccessFileOrArray.readFully(Unknown Source)
at com.lowagie.text.pdf.RandomAccessFileOrArray.readFully(Unknown Source)
at com.lowagie.text.pdf.PdfReader.getStreamBytesRaw(Unknown Source)
at com.lowagie.text.pdf.PdfReader.getStreamBytesRaw(Unknown Source)
at com.lowagie.text.pdf.PRStream.toPdf(Unknown Source)
at com.lowagie.text.pdf.PdfIndirectObject.writeTo(Unknown Source)
at com.lowagie.text.pdf.PdfWriter$PdfBody.add(Unknown Source)
at com.lowagie.text.pdf.PdfWriter.addToBody(Unknown Source)
at com.lowagie.text.pdf.PdfStamperImp.close(Unknown Source)
at com.lowagie.text.pdf.PdfStamper.close(Unknown Source)
at com.fileServer.utility.WaterPrintUtil.setWatermark(WaterPrintUtil.java:77)
at com.fileServer.transaction.Transaction.download(Transaction.java:104)
at com.fileServer.servlet.FileServlet.doPost(FileServlet.java:40)
at com.fileServer.servlet.FileServlet.doGet(FileServlet.java:65)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)

java代码

public static void main(String[] args) throws DocumentException,
        IOException {
    // 要输出的pdf文件
    BufferedOutputStream bos = new BufferedOutputStream(
            new FileOutputStream(new File("E:/topdf源文件.pdf")));
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    // 将pdf文件先加水印然后输出
    setWatermark(bos, "E:/pdf源文件.pdf", format.format(cal.getTime())
            + "  下载使用人:" + "测试user", 16);
}

public static void setWatermark(BufferedOutputStream bos,String input,
        String waterMarkName, int permission) throws DocumentException,
        IOException {

    PdfReader reader = new PdfReader(input);
    PdfStamper stamper = new PdfStamper(reader, bos);
    int total = reader.getNumberOfPages() + 1;
    PdfContentByte content;
    BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
            BaseFont.EMBEDDED);
    PdfGState gs = new PdfGState();
    for (int i = 1; i < total; i++) {
        content = stamper.getOverContent(i);// 在内容上方加水印
        // content = stamper.getUnderContent(i);//在内容下方加水印
        gs.setFillOpacity(0.2f);
        // content.setGState(gs);
        content.beginText();
        content.setColorFill(Color.LIGHT_GRAY);
        content.setFontAndSize(base, 50);
        content.setTextMatrix(70, 200);
        content.showTextAligned(Element.ALIGN_CENTER, "公司内部文件,请注意保密!", 300,
                350, 55);
        content.setColorFill(Color.BLACK);
        content.setFontAndSize(base, 8);
        content.showTextAligned(Element.ALIGN_CENTER, "下载时间:"
                + waterMarkName + "", 300, 10, 0);
        content.endText();

    }
    stamper.close();
    reader.close();
}

http://bbs.csdn.net/topics/390924309

可以试下这个控件Spire.PDF for Java。它支持给PDF文档添加文本水印和图片水印,相关代码示例可点击下面链接查看。
添加文本水印:https://www.e-iceblue.cn/pdf_java_watermark/java-add-text-watermark-to-pdf-document.html