Skip to content

Text Rendering issue #37

Description

@maa3x

Description

I’m attempting to create a searchable PDF using your package. I have PDF files containing scanned books and their OCR data. However, the output PDF file contains ???? instead of the actual content.

Steps to Reproduce

func MakeSearchablePDF(src, dst string, pages []*models.OCRPage) error {
	data, err := os.ReadFile(src)
	if err != nil {
		return errz.E("read source PDF file", err)
	}
	fontData, err := os.ReadFile("/Users/matrix/Downloads/Noto_Naskh_Arabic/static/NotoNaskhArabic-Regular.ttf")
	if err != nil {
		return errz.E("read font file", err)
	}

	doc, err := gpdf.Open(data, template.WithFont("NotoNaskhArabic", fontData))
	if err != nil {
		return errz.E("open PDF document", err)
	}

	for i := range pages {
		err := doc.Overlay(i, func(pb *template.PageBuilder) {
			fmt.Println("Putting tokens on page", i)
			for _, b := range pages[i].Blocks {
				for _, l := range b.Lines {
					for _, t := range l.Tokens {
						x := float64(t.BoundingBox.X1+t.BoundingBox.X2) / 2 * 100
						y := float64(t.BoundingBox.Y2+t.BoundingBox.Y1) / 2 * 100
						pb.Absolute(document.Pct(x), document.Pct(y), func(cb *template.ColBuilder) {
							cb.Text(t.Content, template.FontFamily("NotoNaskhArabic"))
						})
					}
				}
			}
		})
		if err != nil {
			return errz.F("set overlay on page %d: %w", i, err)
		}
	}

	data, err = doc.Save()
	if err != nil {
		return errz.E("export searchable PDF document", err)
	}
	if err := os.WriteFile(dst, data, 0o644); err != nil {
		return errz.E("write searchable PDF file", err)
	}
	return nil
}

Expected Behavior

Content Rendered as overlay on the pages.

Actual Behavior

?????

Image

Go Version

go version go1.26.5 darwin/arm64

gpdf Version

v1.0.11

PDF Viewer (if relevant)

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions