HTML文件将其转换为本地图像文件

问题描述:

我有a.html文件,其中包含一个表,我想将它转换并保存为本地图像。HTML文件将其转换为本地图像文件

可能吗?

为了将其保存为图像我尝试这样做:

ImageIO.write(image, "png", new File("image.png")); 

a library to convert html to image,但它是一个在线的HTML页面。

+0

所以你想把表格保存为图像?您可以操纵dom并制作图像 – 2014-10-20 12:18:51

+0

html文件的内容是一个表格,但是我想要读取的文件是html扩展名,我想将其转换为图像 – 2014-10-20 12:32:51

你可以通过使用命令行程序的组合:

  • wkhtmltopdf将你的HTML文件转换成PDF文件
  • convert(来自ImageMagick的)变成PDF到PNG(或其他图像文件格式)
+0

谢谢您的回答。因为我在Java中很新,所以从未使用过wkhtmltopdf。据我所知,我必须使用类似于ProcessBuilder pb = new ProcessBuilder(“wkhtmltopdf.exe”,htmlFilePath,pdfFilePath);但在此之后,我应该逐行阅读文件吗?如果有可能你能给我一个例子吗? – 2014-10-20 12:52:55

+2

@SaraBalloiuk不会这将为您的html文件生成PDF,然后使用ImageMagick将该pdf转换为图像文件。您不需要逐行阅读 – 2014-10-20 12:55:32

这里是一个使用java提供的程序swings

public class MyClass { 

    public static void main(String[] args) throws IOException { 
     URL url = MyClass.class.getResource("myhtml.html"); 
     Dimension size = new Dimension(200, 200); 
     Image img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB); 
     JFrame frame = new JFrame(); 
     frame.setUndecorated(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JEditorPane pane = new JEditorPane(url) { 
      @Override 
      protected void paintComponent(Graphics g) { 
       super.paintComponent(g); 
      } 
     }; 
     frame.setSize(size); 
     frame.add(pane); 
     frame.setVisible(true); 
     Graphics g = img.getGraphics(); 
     pane.paintAll(g); 
     ImageIO.write((RenderedImage) img, "jpg", new FileOutputStream("myimg.jpg")); 
     frame.setVisible(false); 
     frame.dispose(); 
    } 
} 

但它会显示一个闪光(未修饰的帧一秒)。
这里是我使用的示例:
myhtml.html:

<table border="1"> 
    <tr><td>one</td><td>two</td><td>three</td></tr> 
    <tr><td>four</td><td>five</td><td>six</td></tr> 
    <tr><td>seven</td><td>eight</td><td>nine</td></tr> 
</table> 

enter image description here

我承认这是不是做这个的有效方法。但它是由java提供的标准GUI完成的

您可以将您的HTML文件加载到WebView中,并以文本方式执行屏幕截图并将该屏幕截图保存到文件中。您可以将该片段中的网址替换为您的本地文件。

import java.io.FileOutputStream; 
import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Picture; 
import android.os.Bundle; 
import android.view.Menu; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

    public class MainActivity extends Activity { 
    WebView w ; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     w = new WebView(this); 
     w.setWebViewClient(new WebViewClient(){ 
      public void onPageFinished(WebView view, String url){ 
       Picture picture = view.capturePicture(); 
       Bitmap b = Bitmap.createBitmap(picture.getWidth(), 
       picture.getHeight(), Bitmap.Config.ARGB_8888); 
       Canvas c = new Canvas(b); 
       picture.draw(c); 
       FileOutputStream fos = null; 
       try { 
        fos = new FileOutputStream("mnt/sdcard/yahoo.jpg"); 
        if(fos != null){ 
         b.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
         fos.close(); 
        } 
       }catch(Exception e){} 
      } 
     }); 
     setContentView(w); 
     w.loadUrl("http://search.yahoo.com/search?p=android"); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    }