使用iText和Java将图像转换为pdf

时间:2015-04-23 10:41:18

标签: java itext

我使用iText 1.3成功将图像文件(gif,png,jpg,bmp)转换为pdf文件。 我无法更改版本,因为我们不能在专业环境中明显更改jar的版本。

我遇到的问题是pdf中图像的大小比图像本身大。我不是在谈论文件大小,而是在原始图像文件和pdf上将缩放设置为100%时的图像大小。 pdf显示的图像比原始图像大20%到30%。

我做错了什么?

    public void convertOtherImages2pdf(byte[] in, OutputStream out, String title, String author) throws IOException {
        Image image = Image.getInstance(in);
        Rectangle imageSize = new Rectangle(image.width() + 1f, image.height() + 1f);
        image.scaleAbsolute(image.width(), image.height());
        com.lowagie.text.Document document = new com.lowagie.text.Document(imageSize, 0, 0, 0, 0);
        PdfWriter writer = PdfWriter.getInstance(document, out);
        document.open();
        document.add(image);
        document.close();
        writer.close();
    }

2 个答案:

答案 0 :(得分:2)

您需要按dpi缩放图像。

float scale = 72 / dpi;

我不知道这样一个古老的iText是否有这样的图像信息,更近期的iText版本有它。

答案 1 :(得分:2)

Make MultipleImagesToPdf Class

 public void imagesToPdf(String destination, String pdfName, String imagFileSource) throws IOException, DocumentException {

    Document document = new Document(PageSize.A4, 20.0f, 20.0f, 20.0f, 150.0f);
    String desPath = destination;

    File destinationDirectory = new File(desPath);
    if (!destinationDirectory.exists()){
        destinationDirectory.mkdir();
        System.out.println("DESTINATION FOLDER CREATED -> " + destinationDirectory.getAbsolutePath());
    }else if(destinationDirectory.exists()){
        System.out.println("DESTINATION FOLDER ALREADY CREATED!!!");
    }else{
        System.out.println("DESTINATION FOLDER NOT CREATED!!!");
    }

    File file = new File(destinationDirectory, pdfName + ".pdf");

    FileOutputStream fileOutputStream = new FileOutputStream(file);

    PdfWriter pdfWriter = PdfWriter.getInstance(document, fileOutputStream);
    document.open();

    System.out.println("CONVERTER START.....");

    String[] splitImagFiles = imagFileSource.split(",");

    for (String singleImage : splitImagFiles) {
    Image image = Image.getInstance(singleImage);
    document.setPageSize(image);
    document.newPage();
    image.setAbsolutePosition(0, 0);
        document.add(image);
    }

    document.close();
    System.out.println("CONVERTER STOPTED.....");
}



public static void main(String[] args) {

    try {
        MultipleImagesToPdf converter = new MultipleImagesToPdf();
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter your destination folder where save PDF \n");
        // Destination = D:/Destination/;
        String destination = sc.nextLine();

        System.out.print("Enter your PDF File Name \n");
        // Name = test;
        String name = sc.nextLine();

        System.out.print("Enter your selected image files name with source folder \n");
        String sourcePath = sc.nextLine();
        // Source = D:/Source/a.jpg,D:/Source/b.jpg;
        if (sourcePath != null || sourcePath != "") {
            converter.imagesToPdf(destination, name, sourcePath);
        }

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

=================================

这里我使用itextpdf-5.4.0库

快乐编码:)