2016-07-01 12 views
0

XHTML文字列から画像を作成するのにFlying Saucerを使用しています。いくつかの例を読んだ後、私はJava2DRendererというクラスを使ってこれを行うことができることを発見しました。これには、ファイル、URI、およびDOMドキュメントを受け入れるコンストラクタがあります。したがって、DOMドキュメントはStringから作成できるため、使用することにしました。一方、そのような型を受け入れるすべてのコンストラクタは、widthとheightという2つの他のパラメータを必要とします。例えばXHTML文字列からJava2DRendererを作成するには?

// Creates DOM document from String 
    Document doc = DocumentBuilderFactory.newInstance() 
     .parse(new ByteArrayInputStream(xhtmlString.getBytes())); 

    //See constructor parameters: DOM document, width and height 
    Java2DRenderer imageRenderer = new Java2DRenderer(doc, 
     1024, 768); 

    imageRenderer.setBufferedImageType(BufferedImage.TYPE_INT_RGB); 

    BufferedImage image = imageRenderer.getImage(); 

は残念ながら、時にはxhtmlStringが大きすぎるとXHTMLの内容は、画像768の高さには収まりません。この場合、切り捨てられたイメージが生成されます。私はそれを予測する方法がなく、より高い値をハードコーディングするとほとんどのイメージ(小さなもの)が膨らんでしまいます。

Java2DRendererのconstructorの一つはjava.io.Fileを受け入れ、ちょうど(高さはAPIによって決定される)の幅を提供するために私達に尋ねると、私は選択肢を持っていると思う:ファイル

    1. 保存XHTML文字列メモリ内での作成XHTML文字列からのファイル

    いずれも良い選択肢ではないようです。最初のものは余分なIOオーバーヘッドを追加しますが、2番目のものは受け入れ可能です(可能な場合)。私はApache VFS FileObject(それはRAMファイルシステムをサポートしています)を使用してメモリファイルを作成できると考えましたが、Java IO Fileクラスと互換性がないようです。 java.io.Fileを受け入れるコンストラクタにorg.apache.commons.vfs2.FileObjectを渡すことはできません。

    私の問題を解決するために他にどのようなオプションを提案できますか?

  • 答えて

    1

    Java2DRendererのソースコードでは、コンストラクタpublic Java2DRenderer(File file, int width)-1に初期化されます。

    だからあなたが呼び出す必要があります:

    Java2DRenderer imageRenderer = new Java2DRenderer(doc, 1024, -1); 
    
    関連する問題