首页 > 解决方案 > PDF应该如何编码?

问题描述

我正在尝试设置一个从网页生成 PDF 的 API(作为 URL 提供)。API 来自编码机器的 gotenberg。我在 Docker 上有它,它工作得很好,我无法通过使用 curl 发送的 http 请求生成 PDF(现在我只是想让它工作,所以我使用文档中提供的请求作为示例)

现在我正试图让它与我的 groovy/grails 应用程序一起工作。所以我使用java工具来提出请求。

现在这是我的问题:我得到的 PDF 文件是空白的(我的应用程序直接在我的浏览器中打开)。它确实有正确的内容,如果我用文本编辑器打开它,它不是空的,它的内容与我使用 curl 请求(不是空白)所做的几乎相同。

我 99% 确定问题出在编码上。我尝试更改 InputStreamReader 编码参数,但它没有改变任何东西。在这里我放了“X-MACROMAN”,因为 pdf 文件中的编码不是空白的,但它仍然没有改变。

这是我的代码:

static def execute(def apiURL)
{
        def httpClient = HttpClients.createDefault()

        // Request parameters and other properties.
        def request = new HttpPost(apiURL)

        MultipartEntityBuilder builder = MultipartEntityBuilder.create()
        builder.addTextBody("remoteURL", 'https://google.com')
        builder.addTextBody("marginTop", '0')
        builder.addTextBody("marginBottom", '0')
        builder.addTextBody("marginLeft", '0')
        builder.addTextBody("marginRight", '0')


        HttpEntity multipart = builder.build()
        request.setEntity(multipart)
        def response = httpClient.execute(request)

        BufferedReader rd = new BufferedReader(
                new InputStreamReader(response.getEntity().getContent(), "X-MACROMAN"))

        StringBuffer result = new StringBuffer()
        String line = ""

        Boolean a = Boolean.FALSE
        while ((line = rd.readLine()) != null) {
            if(!a){
                a = Boolean.TRUE
            }
            else {
                result.append("\n")
            }

            result.append(line)

        }

        return result

我 99% 确定问题出在编码上。我尝试更改 InputStreamReader 编码参数,但它没有改变任何东西。在这里我放了“X-MACROMAN”,因为 pdf 文件中的编码不是空白的,但它仍然没有改变。

我说清楚了吗?那些理解的人有什么想法为什么我的 PDF 是空白的吗?

标签: pdfgroovycharacter-encodinginputstreambufferedreader

解决方案


推荐阅读