如何提升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
相关产品推荐
相关产品推荐

