gpt4 book ai didi

java - 使用java将HTML转换为图像

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:48 24 4
gpt4 key购买 nike

我在使用 java 将 html 转换为图像时遇到了一些问题我正在使用 html2image[java]

它创建了一个图像,但问题是它只在 html 的一小部分上创建了一个图像。我怎样才能制作整个 html 的图像。谢谢

这是我的代码

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");
}
}

我还使用 saveAsHtmlWithMap 来保存 html 文件。程序写入硬盘的那个html文件也很小。

这是cover.thml的html代码

<!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>

最佳答案

@Pralay,不幸的是,

imageGenerator.setSize(新维度(1024, 768));

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

没有帮助。

无论如何,html2image 使用的 ImageRenderer 中的默认大小是 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 类下面你可以看到:

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);

如果authHeight为true(实际上默认为true)org.xhtmlrenderer.simple.Graphics2DRenderer的getMinimumSize()方法 类将被调用。从 corresponding Javadoc 可以得出结论将使用尽可能小的区域。这就是图像太少的原因。

autoHeight 设置为 false 可解决问题:

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 的帮助下调查并解决了这个问题。至于v.0.9(在Maven Central)你需要修改源代码(v.0.9是旧的,不灵活)。

PS2 在纯 Java 中你可以尝试这样的事情:

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 如我所见,html2image 现在没有维护(为了使用 v. 2.0,您需要下载并编译它你自己)。也许,这个图书馆有一些活叉。或者只是尝试另一个 HTML 渲染库。

关于java - 使用java将HTML转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36933054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com