繁体   English   中英

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

[英]Convert image to pdf with iText and Java

我使用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();
    }

您需要按dpi缩放图像。

float scale = 72 / dpi;

我不知道这样的古老iText是否具有该图像信息,但最新的iText版本具有它。

使MultipleImagesToPdf类

 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库

快乐编码:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM