我目前正在使用iText从TIFF图像生成PDF文件.
基本上程序如下:1.读取TIFF文件.2.对于TIFF的每个"页面",实例化一个Image对象并将其写入Document实例,即PDF文件.
我很难理解如何将这些图像添加到PDF保持原始分辨率.
我试图将图像缩放到TIFF原始图像的像素尺寸,例如:
// Pixel Dimensions 1728 × 2156 pixels
// Resolution 204 × 196 ppi
RandomAccessFileOrArray tiff = new RandomAccessFileOrArray("/path/to/tiff/file");
Document pdf = new Document(PageSize.LETTER);
Image temp = TiffImage.getTiffImage(tiff, page);
temp.scaleAbsolute(1728f, 2156f);
pdf.add(temp);
Run Code Online (Sandbox Code Playgroud)
如果有人能够对此有所了解,我将非常感激.也许我错过了Image类方法的功能......
提前致谢!
我想如果你缩放图像然后你不能保留原始分辨率(如果我错了请纠正我:)).您可以尝试做的是创建具有不同大小页面的PDF文档(如果图像在tif图像中具有不同的分辨率).
请尝试以下代码.它将PDF页面的大小设置为等于图像文件的大小,然后创建该PDF页面.PDF页面大小因图像大小而异,因此分辨率保持不变:)
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.RandomAccessFileOrArray;
import com.itextpdf.text.pdf.codec.TiffImage;
public class Tiff2Pdf {
/**
* @param args
* @throws DocumentException
* @throws IOException
*/
public static void main(String[] args) throws DocumentException,
IOException {
String imgeFilename = "/home/saurabh/Downloads/image.tif";
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(
document,
new FileOutputStream("/home/saurabh/Desktop/out"
+ Math.random() + ".pdf"));
writer.setStrictImageSequence(true);
document.open();
document.add(new Paragraph("Multipages tiff file"));
Image image;
RandomAccessFileOrArray ra = new RandomAccessFileOrArray(imgeFilename);
int pages = TiffImage.getNumberOfPages(ra);
for (int i = 1; i <= pages; i++) {
image = TiffImage.getTiffImage(ra, i);
Rectangle pageSize = new Rectangle(image.getWidth(),
image.getHeight());
document.setPageSize(pageSize);
document.add(image);
document.newPage();
}
document.close();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我发现这条线不能正常工作:
document.setPageSize(pageSize);
Run Code Online (Sandbox Code Playgroud)
如果您的TIFF文件只包含一个图像,那么最好使用它:
RandomAccessFileOrArray ra = new RandomAccessFileOrArray(imageFilePath);
Image image = TiffImage.getTiffImage(ra, 1);
Rectangle pageSize = new Rectangle(image.getWidth(), image.getHeight());
Document document = new Document(pageSize);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outputFileName));
writer.setStrictImageSequence(true);
document.open();
document.add(image);
document.newPage();
document.close();
Run Code Online (Sandbox Code Playgroud)
这将导致页面大小完全符合图像大小,因此不需要缩放.