Eh bien, il existe une chose telle que PDF. Je comprends, faisons-le. En parlant de PDF, iText. Vous ne pouvez rien faire avec iText. e? Est-il possible de créer un PDF linéarisé? Si vous connaissez ce genre de choses, ne lisez pas cet article.
Eh bien, cela ressemble à ceci sur l'écran des paramètres d'Acrobat. Je vois.
Si vous utilisez le japonais, n'oubliez pas ** iTextAsian.jar ** et ** 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();
//Transparence
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 = "Ne pas sortir";
val cropBox = reader.getCropBox(page);
cb.beginText();
cb.setFontAndSize(bf_courier, 20);
//Essayez d'écrire en diagonale à des intervalles appropriés
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]);
}
}
C'est un peu petit et difficile à voir, mais le filigrane n'a été dessiné que sur l'aperçu avant impression. Eh bien, ça ressemble à ça.
Recommended Posts