iText에서 생성 한 byte[]
에서 가져온 pdf 파일이 있습니다. 서명 하드웨어에 보내야합니다.Itext에서 변환 PDF 바이트 배열을 다중 페이지 TIFF 파일
Java 프린터 드라이버와의 일부 비 호환성으로 인해 PDF를 직접 보낼 수 없으므로 이전에 이미지로 변환해야합니다. 나는 각 PDF 페이지를 jpg 파일로 변환하는데 성공했지만, 고객은 솔루션의 원인 시그니처가 모든 문서에있는 것이 아니라 개별 페이지에서만 나타나는 것을 좋아합니다.
내가 어떤 자유 라이브러리를 찾을 수없는 것, 나는 4 단계를하기로 결정 :
STEP1 : iText를 가진 PDF를 생성하고 그것을 유지됩니다.
FileOutputStream fos = new FileOutputStream("tempFile.pdf");
fos.write(myByteArray);
fos.close();
fos.flush();
2 단계 : PDF 변환이 List<java.awt.Image>
List<Image> images = null;
Ghostscript.getInstance(); // create gs instance
PDFDocument lDocument = new PDFDocument();
lDocument.load(new File("tempFile.pdf"));
SimpleRenderer renderer = new SimpleRenderer();
renderer.setResolution(300);
try
{
images = renderer.render(lDocument);
}
catch (RendererException | DocumentException e)
{
e.printStackTrace();
}
3 단계로 multipaged :가 지금은 개인 TIFF의로 변환 List<java.awt.Image>
반복.
int filename = 1;
TIFFEncodeParam params = new TIFFEncodeParam();
Iterator<Image> imageIterator = images.iterator();
while (imageIterator.hasNext()) {
BufferedImage image = (BufferedImage) imageIterator.next();
FileOutputStream os = new FileOutputStream(/*outputDir + */ filename + ".tif");
JAI.create("encode", image , os, "TIFF", params);
filename ++;
}
4 단계 : 다양한 개별 TIFF 파일
BufferedImage image[] = new BufferedImage[paginas];
for (int i = 0; i < paginas; i++) {
SeekableStream ss = new FileSeekableStream((i + 1) + ".tif");
ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", ss, null);
PlanarImage pi = new NullOpImage(decoder.decodeAsRenderedImage(0),null,null,OpImage.OP_IO_BOUND);
image[i] = pi.getAsBufferedImage();
ss.close();
}
TIFFEncodeParam params = new TIFFEncodeParam();
params.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE);
OutputStream out = new FileOutputStream(nombre +".tif");
ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params);
List <BufferedImage>list = new ArrayList<BufferedImage>(image.length);
for (int i = 1; i < image.length; i++) {
list.add(image[i]);
}
params.setExtraImages(list.iterator());
encoder.encode(image[0]);
out.close();
System.out.println("Done.");
DONE
에서 multipaged TIFF를 만들 수 있습니다. 같은 문제가있는 다른 사람에게 도움이되기를 바랍니다.
그대로 PDF에 서명하고 변환 만하는 것이 더 이상적이지 않습니까? – mkl
어떤 줄부터 예외가 있습니까? 'ImageIO.read'? PDFBox에서 내 보낸 JPEG가 없거나 읽을 수없는 것 같습니다. 이것은 루프의 첫 번째 파일이나 나중에 (임의의?) 지점에서 발생합니까? 그렇다면 읽을 수없는 샘플 파일을 첨부하십시오. :-) – haraldK
@mkl 서명 할 장치는 java/system에서 프린터로 볼 수 있습니다. –