Nun, es gibt so etwas wie PDF. Ich verstehe, lass es uns schaffen. Apropos PDF, iText. Mit iText können Sie nichts anfangen. e? Ist es möglich, ein linearisiertes PDF zu erstellen? Wenn Sie so etwas wissen, lesen Sie diesen Artikel nicht.
Auf dem Bildschirm mit den Acrobat-Einstellungen sieht es so aus. Aha.
Wenn Sie Japanisch verwenden, vergessen Sie nicht ** iTextAsian.jar ** und ** iTextAsianCmaps.jar **.
Watermark.java
import java.awt.Color;
import java.io.FileOutputStream;
import java.util.stream.IntStream;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfGState;
import com.lowagie.text.pdf.PdfLayer;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import lombok.val;
public class Watermark {
public static void draw(String src, String dest) {
try {
val reader = new PdfReader(src);
val stamp = new PdfStamper(reader, new FileOutputStream(dest));
val layer = new PdfLayer("watermark", stamp.getWriter());
layer.setOnPanel(true);
layer.setOn(false);
layer.setPrint("Watermark", true);
layer.setView(false);
val transparent = new PdfGState();
//Transparenz
transparent.setStrokeOpacity(0.3f);
transparent.setFillOpacity(0.3f);
val bf_courier = BaseFont.createFont("HeiseiKakuGo-W5", "UniJIS-UCS2-H", BaseFont.NOT_EMBEDDED);
IntStream.rangeClosed(1, stamp.getReader().getNumberOfPages()).forEach(page-> {
val cb = stamp.getOverContent(page);
cb.setColorFill(Color.RED);
cb.beginLayer(layer);
cb.setGState(transparent);
val watermarkText = "Nicht herausnehmen";
val cropBox = reader.getCropBox(page);
cb.beginText();
cb.setFontAndSize(bf_courier, 20);
//Versuchen Sie, in angemessenen Abständen diagonal zu schreiben
for(int x = 0; x < cropBox.getWidth(); x += 100) {
for(int y = 0; y < cropBox.getHeight(); y += 100) {
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, watermarkText, x, y, 45);
}
}
cb.endText();
cb.endLayer();
});
stamp.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
if (args.length < 2) {
System.out.println("Usage: Watermark src.pdf dest.pdf");
return;
}
Watermark.draw(args[0], args[1]);
}
}
Es ist etwas klein und schwer zu sehen, aber das Wasserzeichen wurde nur in der Druckvorschau gezeichnet. Nun, es sieht so aus.
Recommended Posts