- Javaの標準の印刷 (JPS) で画像を印刷する手段は一長一短
- iTextで、高解像度の画像をPDFに貼り付けて印刷すれば上手くといいな
ソースコード †
- 1000px x 1000px の画像を PDF に貼り付けた
- 画像の解像度は img.scalePercent(float); で指定できる。 画像を縮小するとその分解像度が上がる
縮尺(%) 解像度(dpi) 100f 72dpi 50f 144dpi 25f 288dpi 10f 720dpi 5f 1440dpi - 無指定時は 72 dpi
- 画像の大きさ(縦横の長さ)が小さくなっても画素情報は失われない。たとえば、 (1inch x 1inch) の (1000px x 1000px) の画像になる。
package com.snail.exam.printexam;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
public class ITextExam3 {
public static void main(String[] args) {
try {
OutputStream out = new FileOutputStream("/tmp/iTextExample3.pdf");
//ByteArrayOutputStream out = new ByteArrayOutputStream();
Document doc = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter pdfwriter = PdfWriter.getInstance(doc, out);
Image img = createImage();
doc.open();
doc.add(new Phrase("72dpi\n\n"));
doc.add(img);
doc.newPage();
img.scalePercent(50f);
doc.add(new Phrase("144dpi\n\n"));
doc.add(img);
doc.newPage();
img.scalePercent(25f);
doc.add(new Phrase("288dpi\n\n"));
doc.add(img);
doc.newPage();
img.scalePercent(10f);
doc.add(new Phrase("720dpi\n\n"));
doc.add(img);
doc.newPage();
img.scalePercent(5f);
doc.add(new Phrase("1440dpi\n\n"));
doc.add(img);
// Document End
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Image createImage() throws IOException, BadElementException{
BufferedImage image = new BufferedImage(1000, 1000, BufferedImage.TYPE_INT_RGB);
Graphics2D g = image.createGraphics();
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setColor(Color.WHITE);
g.fillRect(0, 0, image.getWidth(), image.getHeight());
g.setColor(Color.GRAY);
for (int x = 0; x < image.getWidth(); x += 5) {
g.drawLine(x, 0, x, image.getHeight());
}
for (int y = 0; y < image.getHeight(); y += 5) {
g.drawLine(0, y, image.getWidth(), y);
}
g.setColor(Color.BLACK);
g.setFont(new java.awt.Font(java.awt.Font.SANS_SERIF, java.awt.Font.PLAIN, 24));
g.drawString("20pt 123 ABC あいう アイウ", 0, 20);
g.setFont(new java.awt.Font(java.awt.Font.SANS_SERIF, java.awt.Font.PLAIN, 10));
g.drawString("10pt 123 ABC あいう アイウ", 0, 40);
g.setFont(new java.awt.Font(java.awt.Font.SANS_SERIF, java.awt.Font.PLAIN, 8));
g.drawString("8pt 123 ABC あいう アイウ", 0, 60);
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(image, "png", out);
return com.itextpdf.text.Image.getInstance(out.getBytes());
}
}
0 件のコメント:
コメントを投稿