2016-08-24 46 views
0

PDFBOX 2.0.2を使用してPDFを分割しました。 最初はサンプル のようにコーディングしました。PDFBOXでPDFをjpgに変換しましたが、私はdpiを設定できません

BufferedImageイメージ= pdfRenderer.renderImageWithDPI(pageCounter、300、ImageType.RGB);

今、この画像をPDFに変換したいと思います。 しかし、画像のdpiが大きすぎます。

私は本当にdpiを減らしたいと思います。 このコードを試してみます。

PDImageXObject pdImageXObject = JPEGFactory.createFromImage(doc、bimg、0.5f、100);

でも動作しませんでした。

dpiを減らすにはどうすればよいですか?

これは完全なソースです。

1)ページサイズ:

  InputStream in = new FileInputStream(imagePath); 
      BufferedImage bimg = ImageIO.read(in); 

      float width = bimg.getWidth() ; 
      float height = bimg.getHeight(); 
      PDPage page = new PDPage(new PDRectangle(width, height)); 

      doc.addPage(page); 
      //PDStream stream = new PDStream(doc, in); 

      PDImageXObject pdImageXObject = JPEGFactory.createFromImage(doc, bimg, 0.5f, 10); 

      PDPageContentStream contentStream = new PDPageContentStream(doc, page); 

      contentStream.drawImage(pdImageXObject, 0, 0); 

      contentStream.close(); 
     } 
    } 
    finally 
    { 
     System.out.println("ddd"); 
     doc.save(pdfPath); 
     doc.close(); 
    } 
} 
+0

ビットマップイメージ自体を低解像度に変更しますか?それとも、ページに合わせて縮尺を変えたいだけですか? – mkl

+0

@mkl彼は新しいPDFで画像を拡大したいと思うと思います。 –

+0

@TilmanHausherr新しいPDFをイメージにレンダリングしようとしたため、ビットマップイメージ自体をより低い解像度に変更して新しいPDFを作成したいのですが、サイズがそれぞれ大きすぎます。 –

答えて

0

は、2つの問題があります。これはピクセルではなくページ単位で行われます。 1単位= 1/72インチ。

PDPage page = new PDPage(new PDRectangle(width/300 * 72, height/300 * 72)); 

2)スケール画像:だからあなたの四角形は次のように計算されます。 300dpiでは、1:1が72dpiであるため、72/300でスケーリングする必要があります。

float scale = 72/300; 
contentStream.drawImage(pdImage, 0, 0, pdImage.getWidth()*scale, pdImage.getHeight()*scale); 

JPEGFactoryを使用したBtwは、ある程度の品質が失われるため、お勧めできません。代わりにLosslessFactoryを使用してください。

JPEGFactoryのdpiパラメータの使用については、メタデータだけです。それは何もスケールしません。

「dpiを減らしたい」場合は、PDFを300ではなく72dpiでレンダリングすると、新しいPDFを作成するときに縮尺を変更する必要はありません。

関連する問題