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

如何提升Unipdf提取PDF页面生成图片的分辨率与清晰度

Unipdf提取PDF页面为图片时分辨率低、文字模糊的解决方法

问题背景

我使用Unipdf提取PDF页面为图片的Go语言函数如下:

func extractPDFPagesAsImages(pdfPath string, outputDir string) error {
    // Open the PDF file
    f, err := os.Open(pdfPath)
    if err != nil {
        return err
    }
    defer f.Close()

    // Read the PDF document
    doc, err := model.NewPdfReader(f)
    if err != nil {
        return err
    }

    // Iterate over each page
    numPages, err := doc.GetNumPages()
    if err != nil {
        return err
    }
    for i := 0; i < numPages; i++ {
        _, err := doc.GetPage(i + 1)
        if err != nil {
            return err
        }

        // Render the page to an image
        img, err := renderPDFPageToImage(doc, i+1)
        if err != nil {
            return err
        }

        // Save the image as PNG
        outputFilePath := fmt.Sprintf("%s/page_%d.png", outputDir, i+1)
        outFile, err := os.Create(outputFilePath)
        if err != nil {
            return err
        }
        defer outFile.Close()

        err = png.Encode(outFile, img)
        if err != nil {
            return err
        }
    }

    return nil
}

该函数可正常运行,但生成的图片分辨率极低,文字模糊。查阅多篇文档甚至尝试使用ChatGPT,均未找到有效解决方案,请问如何提升图片质量让文字显示清晰?

解决方案

问题根源是PDF页面渲染时的默认DPI(每英寸点数)过低,Unipdf默认采用72DPI的屏幕级分辨率,无法满足清晰文字的需求。只需在渲染页面时显式设置更高的DPI参数即可解决。

修改渲染函数实现

调整renderPDFPageToImage函数,添加高DPI配置:

import (
    "github.com/unidoc/unipdf/v3/render"
    "github.com/unidoc/unipdf/v3/model"
    "image"
)

func renderPDFPageToImage(doc *model.PdfReader, pageNum int) (image.Image, error) {
    page, err := doc.GetPage(pageNum)
    if err != nil {
        return nil, err
    }

    // 初始化图像渲染器并设置高DPI
    renderer := render.NewImageRenderer()
    // 设置DPI为300,可根据需求调整(200-600区间均能获得清晰效果)
    renderer.DPI = 300.0

    // 渲染页面为图像
    img, err := renderer.Render(page)
    if err != nil {
        return nil, err
    }

    return img, nil
}

额外优化点

  • 原代码中重复调用doc.GetPage(i+1)但未使用,直接在渲染函数内获取页面即可,避免冗余操作。
  • 保持PNG格式输出,它的无损压缩特性能最大程度保留渲染后的清晰画质。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:38:12