iText 인쇄 시에만 출력되는 워터마크 설정
iText2.1.7은 LGPL인데 자꾸 허가증이 의심스러워요.보도 내용은 iText5 이후에도 사용될 수 있기 때문에 기술 정보로 남겨두지만, 허가증 같은 것을 잘 조사한 후 잊지 않도록 주의하세요.
인쇄할 때만 출력이 있습니까?
아, PDF에도 이런 게 있구나.알았어, 해.PDF면 iText입니다.iText로 할 수 없는 일은 없다.예?PDF를 선형화할 수 있습니까?이런 거 알면 이런 기사 읽지 마세요.
정말 Acrobat 설정화면에서는 이런 느낌이네요.그렇구나.
그래, 내가 곧 쓸게
그럼 일본어로 iText Asian.jar 및 iText Assian Cmaps.jar도 잊지 마세요.
Watermark.javaimport 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);
try(val fos = new FileOutputStream(dest)) {
val stamp = new PdfStamper(reader, fos);
val layer = new PdfLayer("watermark", stamp.getWriter());
layer.setOnPanel(true);
layer.setOn(false);
layer.setPrint("Watermark", true);
layer.setView(false);
val transparent = new PdfGState();
// 透明度
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 = "持ち出し禁止";
val cropBox = reader.getCropBox(page);
cb.beginText();
cb.setFontAndSize(bf_courier, 20);
// 斜めに適当な間隔で書いてみる
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]);
}
}
이렇게 된 느낌.
조금 얕보아 잘 모르겠지만 인쇄 미리보기에 워터마크만 그렸다.
뭐, 아마 이런 느낌일 거야.
Reference
이 문제에 관하여(iText 인쇄 시에만 출력되는 워터마크 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Teramonte4/items/a207abb79ca79956ebba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
그럼 일본어로 iText Asian.jar 및 iText Assian Cmaps.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);
try(val fos = new FileOutputStream(dest)) {
val stamp = new PdfStamper(reader, fos);
val layer = new PdfLayer("watermark", stamp.getWriter());
layer.setOnPanel(true);
layer.setOn(false);
layer.setPrint("Watermark", true);
layer.setView(false);
val transparent = new PdfGState();
// 透明度
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 = "持ち出し禁止";
val cropBox = reader.getCropBox(page);
cb.beginText();
cb.setFontAndSize(bf_courier, 20);
// 斜めに適当な間隔で書いてみる
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]);
}
}
이렇게 된 느낌.
조금 얕보아 잘 모르겠지만 인쇄 미리보기에 워터마크만 그렸다.
뭐, 아마 이런 느낌일 거야.
Reference
이 문제에 관하여(iText 인쇄 시에만 출력되는 워터마크 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Teramonte4/items/a207abb79ca79956ebba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(iText 인쇄 시에만 출력되는 워터마크 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Teramonte4/items/a207abb79ca79956ebba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)