You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java实现从URL指定HTML生成PDF与图片并对接外部系统方案咨询

Java中基于URL生成PDF和图片的工具推荐

一、适用于URL转PDF的工具

除你提到的Apache PDFBox和iText外,以下工具更适配直接从URL生成PDF的场景:

  • Flying Saucer:搭配OpenPDF(iText的开源分支)使用,支持直接加载URL对应的页面内容渲染为PDF,对CSS的解析支持比PDFBox更完善,能还原更多页面样式。
  • WKHTMLtoPDF(Java封装版):底层依赖WebKit引擎,可完美渲染含JS动态内容的现代网页,Java侧可通过wkhtmltopdf-java这类封装库调用其命令行能力,适合复杂页面的PDF生成需求。

二、适用于URL转图片的工具

要从URL生成页面图片,可选择这些Java工具:

  • Selenium + ChromeDriver:通过无头浏览器加载目标URL,支持渲染JS动态生成的内容,可截取完整页面或指定区域的图片,灵活性极强。
  • HtmlUnit:无界面Java浏览器,能加载URL并渲染静态页面,通过WebClient获取页面后转换为图片,资源占用比Selenium更小,适合简单页面场景。
  • Thumbnailator:若已通过其他工具得到页面的BufferedImage,可使用该库完成图片裁剪、缩放等后续处理。

三、核心功能实现示例

URL转PDF(Flying Saucer)

import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.FileOutputStream;
import java.net.URL;

public class UrlToPdfGenerator {
    public static void main(String[] args) throws Exception {
        String targetUrl = "https://example.com";
        String outputPath = "generated.pdf";
        
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(new URL(targetUrl).toURI().toString());
        renderer.layout();
        
        try (FileOutputStream fos = new FileOutputStream(outputPath)) {
            renderer.createPDF(fos);
        }
    }
}

URL转图片(Selenium)

import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import java.io.File;
import org.apache.commons.io.FileUtils;

public class UrlToImageGenerator {
    public static void main(String[] args) throws Exception {
        String targetUrl = "https://example.com";
        String outputPath = "screenshot.png";
        
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless=new");
        try (ChromeDriver driver = new ChromeDriver(options)) {
            driver.get(targetUrl);
            File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(screenshotFile, new File(outputPath));
        }
    }
}

文件发送至外部系统(JDK HttpClient)

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;

public class FileSender {
    public static void main(String[] args) throws Exception {
        String uploadApiUrl = "https://external-system.com/upload";
        Path fileToSend = Path.of("generated.pdf");
        
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uploadApiUrl))
                .header("Content-Type", "application/pdf")
                .POST(HttpRequest.BodyPublishers.ofFile(fileToSend))
                .build();
        
        HttpClient client = HttpClient.newHttpClient();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("上传响应状态码:" + response.statusCode());
    }
}

内容的提问来源于stack exchange,提问作者ezhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:52:22