2017-07-18 66 views
0

次のコードを使用して、複数のマルチページtifファイルをpdfに変換しています。複数のマルチページTIFFファイルを1つのpdfにマージするには?

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.OutputStream; 
import org.apache.log4j.Logger; 
import com.itextpdf.text.BaseColor; 
import com.itextpdf.text.Document; 
import com.itextpdf.text.Element; 
import com.itextpdf.text.Image; 
import com.itextpdf.text.pdf.PdfPCell; 
import com.itextpdf.text.pdf.PdfPTable; 
import com.itextpdf.text.pdf.PdfWriter; 
public class TifToPdf { 

    public static void main(String args[]) 
    { 
     String src = "/input/";//path of the folder containing multiple tif files where each tif has multiple pages" 
     File folder = new File(src); 

     try 
      { 
     // Creating a new pdf 
     OutputStream file = new FileOutputStream(new File("output.pdf")); 
     //Adding images in PDF 
     Document document = new Document(); 

      PdfWriter writer = PdfWriter.getInstance(document, file); 
      document.open(); 

      PdfPTable table = new PdfPTable(1); 
      table.setWidthPercentage(100); //Width 100% 
      table.setSpacingBefore(10f); //Space before table 
      table.setSpacingAfter(10f); //Space after table 

      //Set Column widths 
      float[] columnWidths = {10f}; 
      table.setWidths(columnWidths); 

      for (final File fileEntry : folder.listFiles()) 
      { 

       Image image = Image.getInstance(src + "/" + fileEntry.getName()); 
       PdfPCell cell1 = new PdfPCell(image,true); 
       cell1.setBorderColor(BaseColor.WHITE); 
       cell1.setPaddingBottom(100); 
       cell1.setHorizontalAlignment(Element.ALIGN_CENTER); 
       cell1.setVerticalAlignment(Element.ALIGN_MIDDLE); 
       table.addCell(cell1); 
      } 


      document.add(table); 
      document.close(); 
      writer.close(); 

     } catch(FileNotFoundException ex){ 
      System.out.println("Error in locating folder in local to import files "+ex.getMessage()); 

     }catch (Exception e){ 
      System.out.println("Error in merging tiff files to pdfs "+e.getMessage()); 
     } 
    } 
} 

"output.pdf"には、マージされたすべてのtifファイルが含まれています。しかし、各tifファイルの最初のページだけがpdfにマージされます。残りのページは無視されます。たとえば、 "/ input /"に1.tif、2.tif、3.tif、および1.tifが含まれている場合は3ページ、2.tifには2ページ、3ページにはconatins 1ページ、次にすべてのこれらのtifファイルはpdfにマージされます。 「ジャイ」ジャーを使いたくないです。何が問題なのかを教えてください。

はさえ私は、次のことを試してみました

Image images = Image.getInstance(src + "/" + fileEntry.getName()); 
        for (Image image : images) { 

        PdfPCell cell1 = new PdfPCell(image,true); 
        cell1.setBorderColor(BaseColor.WHITE); 
        cell1.setPaddingBottom(100); 
        cell1.setHorizontalAlignment(Element.ALIGN_CENTER); 
        cell1.setVerticalAlignment(Element.ALIGN_MIDDLE); 
        table.addCell(cell1); 
        } 

しかし、私は画像のインスタンスを通過することはできませんよ。

+0

ファイルごとに1つの画像のみを追加します。ファイル内のすべてのイメージに対してこれを行う必要があります。 –

+0

@ThorbjørnRavn Andersen私は毎回画像のインスタンスを走査しようとしました。しかし、私はそれをすることができません。親切にも私の更新されたコードを見てください。それは正しい方法ですか? –

答えて

2

TIFF画像はページで構成され、「最初のページ」のみを表示します。 すべてページをループする必要があります。 PagedImages

public static void addTif(Document document, String path) 
    throws DocumentException, IOException { 
    RandomAccessFileOrArray ra = new RandomAccessFileOrArray(path); 
    int n = TiffImage.getNumberOfPages(ra); 
    Image img; 
    for (int i = 1; i <= n; i++) { 
     img = TiffImage.getTiffImage(ra, i); 
     img.scaleToFit(523, 350); 
     document.add(img); 
    } 
} 

私はあなたがiTextの5メンテナンス」に行ってきましたので、iTextの7に切り替えることもできますあなたはまだiTextの5を使用していることを参照してください。 - 「第2版アクションにiTextの」のために書かれた例を参照してください。モード "(これは、バグ修正のみ、新規開発なし)を意味します。 iText 7では、コードが異なります。 chapter 3 of the tutorial

IRandomAccessSource ras3 = 
    new RandomAccessSourceFactory().createSource(url3); 
RandomAccessFileOrArray raf3 = new RandomAccessFileOrArray(ras3); 
int pages3 = TiffImageData.getNumberOfPages(raf3); 
for (int i = 1; i <= pages3; i++) { 
    img = new Image(
     ImageDataFactory.createTiff(url3, true, i, true)); 
    document.add(img); 
} 
document.close(); 
+0

ありがとうございました。できます :) –

関連する問題