2016-04-29 10 views
2

私はhtml2imageを使用してJava イムを使用して画像をHTMLに変換するいくつかの問題に直面しています[javaの]は、それが画像を作成するJava

を使用して画像にHTMLを変換するが、問題はそれがほんの一部に画像を作成していますhtmlの。どうすればHTML全体のイメージを作ることができますか?あなた

に感謝これは私もhtmlファイルを保存するためにsaveAsHtmlWithMapを使用して自分のコード

import gui.ava.html.image.generator.HtmlImageGenerator; 
import java.io.File; 


public class test { 
    public static void main(String[] args) { 
     HtmlImageGenerator imageGenerator = new HtmlImageGenerator(); 
     String uri = new File("C:\\cover.html").toURI().toString(); 
     imageGenerator.loadUrl(uri); 
     imageGenerator.saveAsImage("hello-world.png"); 
     imageGenerator.saveAsHtmlWithMap("hello-world.html", "hello-world.png"); 
    } 
} 

です。プログラムによってハードディスクに書き込まれたhtmlファイルも小さなものです。

これは、結果として得られるイメージがあると同じではありませんので、私はhtml2imageを経験していないのですが、多分それは唯一のインラインCSSを解析することができ、それが理由ですcover.thml

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:epub="***"> 
    <head> 
     <title></title> 
     <meta charset="utf-8"/> 
     <meta name="viewport" content="width=1200, height=1200"/> 
     <link rel="stylesheet" type="text/css" href="main.css"/> 
    </head> 
    <body id="cover_page"> 
     <nav id="cover" > 
      <ol> 
       <li id="nav1"> 
        <a>cover</a> 
       </li> 
      </ol> 
     </nav> 
    </body> 
</html> 
+1

生成されたHTMLと画像を含めることはできますか? –

+1

私は質問を更新しました。生成されたイメージはhtmlの小さな部分です。 –

+0

あなたはhtmlで定義したビューポートと関係がありますか?したがって、ページの可視部分(デフォルト?)のみがイメージとしてレンダリングされます。 –

答えて

0

のhtmlコードでありますブラウザでレンダリングされます。

main.cssのコンインメントを含むインラインスタイルをHTMLに追加して、イメージを再度保存してみてください。

1

デフォルトでは、HtmlImageGeneratorは(800,800)のjava.awt.Dimensionオブジェクトを作成して設定します。 あなたはHtmlImageGeneratorクラスのセッターの下に使用して、カスタムサイズの独自の新しい次元(x、y)を渡すことができます。

public void setSize(Dimension dimension); 

私はそれが役に立てば幸い。

1

@Pralayは、残念ながら、

imageGenerator.setSize(new Dimension(1024, 768));

imageGenerator.getDefaultSize().setSize(1024, 768);

は助けにはなりませんでした。

とにかく、デフォルトサイズはImageRendererで、のhtml2画像は1024x768です。 ImageRendereImplクラスからの抜粋を見てください:

public class ImageRendererImpl implements ImageRenderer { 
    public static final int DEFAULT_WIDTH = 1024; 
    public static final int DEFAULT_HEIGHT = 768; 
    ... 
    private int width = DEFAULT_WIDTH; 
    private int height = DEFAULT_HEIGHT; 
    private boolean autoHeight = true; 
    ... 

しかしautoHeightフィールドに注意を払います。 ImageRendererImplクラス内部の下にあなたが見ることができます:authHeightが真である

if (autoHeight) { 
    // do layout with temp buffer 
    Graphics2D graphics2D = (Graphics2D) bufferedImage.getGraphics(); 
    renderer.layout(graphics2D, new Dimension(width, height)); 
    graphics2D.dispose(); 

    Rectangle size = renderer.getMinimumSize(); 
    final int autoWidth = (int) size.getWidth(); 
    final int autoHeight = (int) size.getHeight(); 
    bufferedImage = new BufferedImage(autoWidth, autoHeight, imageType); 
    dimension = new Dimension(autoWidth, autoHeight); 

場合(実際にはデフォルトでtrueです)org.xhtmlrenderer.simple.Graphics2DRendererクラスのgetMinimumSize()メソッドが呼び出されます。 corresponding Javadocから結論付けることができるように、最小の可能な領域が使用される。これは、あなたがあまりにも少ないイメージを得る理由です。falseからautoHeightの設定

は問題解決:だから私が持っている

public class Test { 
    public static void main(String[] args) throws { 
     File inputFile = new File("/home/me/Temp/cover.html"); 
     Html2Image imageGenerator = new Html2Image(); 
     imageGenerator.getParser().load(inputFile); 
     imageGenerator.getImageRenderer().setAutoHeight(false); 
     imageGenerator.getImageRenderer().saveImage("/home/me/Temp/hello-world.png"); 
    } 
} 

enter image description here

PS:私は調査とhtml2imageの助けを借りて問題を克服してきました v。2.0-SNAPSHOT。 (Mavenの中央にある)、V。0.9用として、あなたがソースコードを変更する必要があります(V。0.9は古いものと柔軟ではありません)。 。あなたが必要

public class Example1 { 

    private static final int WIDTH = 1204; 
    private static final int HEIGHT = 768; 

    public static void main(String[] args) throws IOException { 
     // open HTML page 
     JEditorPane editorPane = new JEditorPane(); 
     editorPane.setEditable(false); 
     URL urlToPage = new File("/home/me/Temp/cover.html").toURI().toURL(); 
     editorPane.setPage(urlToPage); 
     editorPane.setSize(WIDTH, HEIGHT); 

     // render the page 
     BufferedImage renderedImage = new BufferedImage(640, 480, BufferedImage.TYPE_INT_RGB); 
     editorPane.print(renderedImage.getGraphics()); 

     // write result to file 
     ImageIO.write(renderedImage, "PNG", new File("/home/me/Temp/hello-world.png")); 
    } 
} 

PS3私はVに使用するためにはhtml2image(現在は維持されていない見たよう2.0:Pure Javaで

PS2あなたはこのような何かを試すことができます自分でダウンロードしてコンパイルする)。おそらく、この図書館にはいくつかの生き物があります。あるいは、別のHTMLレンダリングライブラリを試してみてください。

+1

私はHtmlImageGeneratorのソースコードを参照し、それらのセッターメソッドとデフォルト値を見つけました。次のURLからご覧ください:https://github.com/hkirk/java-html2image/blob/master/html2image/src/main/java/gui/ava/html/image/HtmlImageGenerator.java – deadpool

+0

はい、https:// github.com/hkirk/java-html2image/は元の** html2image **のフォークです。元の** html2image ** v。0.9より新しいと思われます。ちょうど新しいバージョンを使用して、問題は消えます。 – flaz14

関連する問題