Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将水印添加到pdf(itext7.1.2 java)_Java_Itext7 - Fatal编程技术网

如何将水印添加到pdf(itext7.1.2 java)

如何将水印添加到pdf(itext7.1.2 java),java,itext7,Java,Itext7,这是我在一个示例中遵循的代码 我的代码被修改了一点 public class MyEventHandler implements IEventHandler { @Override public void handleEvent(Event event) { // TODO Auto-generated method stub PdfDocumentEvent docEvent = (PdfDocumentEvent) event; PdfDocument pdfDoc

这是我在一个示例中遵循的代码

我的代码被修改了一点

public class MyEventHandler implements IEventHandler {
@Override
public void handleEvent(Event event) {
    // TODO Auto-generated method stub
    PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
    PdfDocument pdfDoc = docEvent.getDocument();
    PdfPage page = docEvent.getPage();
    PdfCanvas pdfCanvas = new PdfCanvas(
        page.newContentStreamBefore(), page.getResources(), pdfDoc);

    DeviceRgb colorWatermark = new DeviceRgb(220,36,31);
    //Add watermark
    Canvas canvas = new Canvas(pdfCanvas, pdfDoc, page.getPageSize());
    canvas.setProperty(Property.FONT_COLOR, colorWatermark);
    canvas.setProperty(Property.FONT_SIZE, 60);
    try {
        canvas.setProperty(Property.FONT, PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H",true));
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    canvas.showTextAligned(new Paragraph("CONFIDENTIAL"),
        298, 421, pdfDoc.getPageNumber(page),
        TextAlignment.CENTER, VerticalAlignment.MIDDLE, 45);
    pdfCanvas.release();
  }
}
当代码转到以下行时:
canvas.showTextAligned()

它抛出了一个例外:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.Integer cannot be cast to com.itextpdf.layout.property.UnitValue
at com.itextpdf.layout.renderer.AbstractRenderer.getPropertyAsUnitValue(AbstractRenderer.java:405)
at com.itextpdf.layout.renderer.TextRenderer.layout(TextRenderer.java:196)
at com.itextpdf.layout.renderer.LineRenderer.layout(LineRenderer.java:327)
at com.itextpdf.layout.renderer.ParagraphRenderer.layout(ParagraphRenderer.java:205)
at com.itextpdf.layout.renderer.BlockRenderer.layout(BlockRenderer.java:219)
at com.itextpdf.layout.renderer.RootRenderer.addChild(RootRenderer.java:287)
at com.itextpdf.layout.renderer.CanvasRenderer.addChild(CanvasRenderer.java:89)
at com.itextpdf.layout.RootElement.createAndAddRendererSubTree(RootElement.java:377)
at com.itextpdf.layout.RootElement.add(RootElement.java:106)
at com.itextpdf.layout.RootElement.showTextAligned(RootElement.java:364)
at com.schindler.zhangzhiwei.quote.action.MyEventHandler.handleEvent(MyEventHandler.java:56)
发生了什么事?什么是单位价值?如何改变它

这是主要代码:

try {

        writer = new PdfWriter(new File(openSaveDialog()));
    } catch (FileNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    pdf = new PdfDocument(writer);
    pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new MyEventHandler());
在这里:

线程“AWT-EventQueue-0”java.lang.ClassCastException中的异常:java.lang.Integer无法转换为com.itextpdf.layout.property.UnitValue

这意味着您正在使用的框架假设某个值应该是class
UnitValue
,但结果却是一个
整数

这里有点猜测:您的代码如下

canvas.setProperty(Property.FONT_SIZE, 60);
上面将把一个
整数
对象放入某个“属性映射”中。很可能,您没有正确使用该API

意思:答案归结为您正在研究您正在使用的产品的API文档。您必须了解如何正确设置这些属性参数


从for UnitValue来看,这个类似乎是用来表示位置的。因此,我将从处理“定位”的房地产开始

我终于解决了这个问题。我放弃了画布的方法。然后,我将
文档
参数传输到
MyEventHandler
。使用以下句子:
document.add(新段落(“Hello World”).setFixedPosition(298421100).setRotationAngle(45).setFontColor(colorWatermark).setFontSize(100))

哪一行是代码中的第56行?它是canvas.showTextAligned()
。我删除了一些注释。谢谢!你已经指出了真正的问题,我已经解决了这个问题。我认为如果你接受自己的答案(只要系统允许你这么做),这是有道理的。如果你愿意,你可以通过投票表决我的答案来表达你的感激之情;-)顺便说一句,
Canvas
是从
ElementPropertyContainer
间接派生的,它从那里继承了
setFontSize
。与其直接设置属性,不如使用该方法。