Well, there is such a thing as PDF. I understand, let's make it. Speaking of PDF, iText. There's nothing you can't do with iText. e? Is it possible to create a linearized PDF? If you know that kind of thing, don't read this article.
Honestly, it looks like this on the Acrobat settings screen. I see.
Now, if you use Japanese, don't forget ** iTextAsian.jar ** and ** 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();
//Transparency
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 = "Do not take out";
val cropBox = reader.getCropBox(page);
cb.beginText();
cb.setFontAndSize(bf_courier, 20);
//Try to write diagonally at appropriate intervals
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]);
}
}
It's a little small and hard to see, but the watermark was drawn only in the print preview. Well, it looks like this.
Recommended Posts