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

如何使用ConvertAPI将HTML字符串转换为PDF(无需物理文件)

Java实现ConvertAPI v2 HTML转PDF的POST请求示例(已解决)

问题背景

此前我通过http://do.convertapi.com/Web2Pdf接口用GET请求转换HTML到PDF,但该API已停止工作,现在需要迁移到ConvertAPI v2的https://v2.convertapi.com/html/to/pdf端点,却找不到合适的Java请求示例。

已验证的完整实现代码

经过调试,我已经成功完成了功能迁移,下面是完整的Java代码,包含请求配置、HTML内容传递、响应处理以及生成PDF附件的逻辑:

private static final String WEB2PDF_API_URL = "https://v2.convertapi.com/html/to/pdf";
private static final String WEB2PDF_SECRET = "secret-here";

public void convertHtmlToPdf(String htmlContent) throws IOException {
    // 构建API请求URL,包含密钥和PDF布局参数
    URL apiUrl = new URL(WEB2PDF_API_URL + "?secret=" + WEB2PDF_SECRET + "&download=attachment&PageOrientation=landscape&MarginLeft=0&MarginRight=0&MarginTop=0&MarginBottom=0");
    HttpURLConnection connection = null;
    ByteArrayOutputStream buffer = null;

    try {
        connection = (HttpURLConnection) apiUrl.openConnection();
        // 设置必要的请求头
        connection.setRequestProperty("Content-Type", "application/octet-stream");
        connection.setRequestMethod("POST");
        connection.setConnectTimeout(60000);
        connection.setReadTimeout(60000);
        connection.setDoOutput(true);

        // 向API发送HTML内容
        OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream());
        writer.write(htmlContent);
        writer.flush();
        writer.close();

        // 打印响应状态便于调试
        String responseMessage = connection.getResponseMessage();
        System.out.println("Response Message: " + responseMessage);
        int statusCode = connection.getResponseCode();
        System.out.println("Status Code: " + statusCode);

        if (statusCode == HttpURLConnection.HTTP_OK) {
            System.out.println("HTML转PDF请求成功");
            // 读取API返回的PDF字节流
            InputStream is = connection.getInputStream();
            buffer = new ByteArrayOutputStream();
            int nRead;
            byte[] data = new byte[16384];
            while ((nRead = is.read(data, 0, data.length)) != -1) {
                buffer.write(data, 0, nRead);
            }
            buffer.flush();
            byte[] pdfBytes = buffer.toByteArray();

            // 可选:将PDF转换为邮件附件(不需要可直接移除这部分逻辑)
            MimeMultipart content = new MimeMultipart();
            MimeBodyPart attachment = new MimeBodyPart();
            InputStream pdfStream = new ByteArrayInputStream(pdfBytes);
            // 生成随机文件名避免重复
            String fileName = "document-" + Long.toHexString(Double.doubleToLongBits(Math.random())) + ".pdf";
            attachment.setFileName(fileName);
            attachment.setContent(pdfStream, "application/pdf");
            content.addBodyPart(attachment);

            // 后续可根据需求处理content,比如发送邮件、存储到本地等
        } else {
            System.out.println("转换请求失败,状态码:" + statusCode);
            // 可添加错误响应的详细处理逻辑
        }
    } finally {
        // 关闭资源避免内存泄漏
        if (buffer != null) {
            buffer.close();
        }
        if (connection != null) {
            connection.disconnect();
        }
    }
}

关键细节说明

  • 采用POST请求传递HTML内容,相比GET更适合处理较长的HTML字符串,避免URL长度限制问题
  • URL参数中配置了PDF的核心布局:横向(landscape)、无边距,可根据实际需求调整这些参数
  • 请求头设置Content-Type为application/octet-stream,确保HTML内容能被API正确解析
  • 响应处理部分将API返回的PDF流转换为字节数组,方便后续存储、下载或作为附件使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:12