Skip to content

Garbled/Corrupted Text Rendering in PDFs (Letters Out of Position) #10581

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
1 task done
hanieh1995 opened this issue Apr 27, 2025 · 1 comment
Open
1 task done

Garbled/Corrupted Text Rendering in PDFs (Letters Out of Position) #10581

hanieh1995 opened this issue Apr 27, 2025 · 1 comment

Comments

@hanieh1995
Copy link
Contributor

hanieh1995 commented Apr 27, 2025

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

I’m using the BitPDFReader component to display PDF files, but the text renders incorrectly—letters are scrambled or corrupted.
Issue persists across different PDFs (including non-English scripts like Persian).
When I tested the same PDFs in a simple HTML app using PDF.js, text rendered perfectly.

Image

Image

CS file :

pdfContractPath = (await GeneralController.GetContracts(input, CurrentCancellationToken)).Data;

PdfConfig = new BitPdfReaderConfig
{
    Url = pdfContractPath,
    AutoScale = true,
};

Razor file :

<BitPdfReader Config="@PdfConfig" RenderAllPages="true" CanvasClass="canvas-style"/>

Expected Behavior

Text should display clearly and correctly, as seen in other PDF viewers (e.g., Adobe Acrobat, PDF.js).

Simple Html code for testing PDF.js

<style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }

        #pdf-container {
            width: 100%;
            max-width: 800px;
            margin: 0 auto;
            border: 1px solid #ccc;
        }

        #pdf-viewer {
            width: 100%;
            height: 600px;
            overflow: auto;
        }

        .controls {
            margin: 10px 0;
            text-align: center;
        }

        button {
            padding: 8px 15px;
            margin: 0 5px;
            cursor: pointer;
        }
</style>

    <h1>PDF.js Simple Viewer</h1>
    
    <div class="controls">
        <button id="prev-page">Previous Page</button>
        <span>Page: <span id="page-num">1</span> of <span id="page-count">0</span></span>
        <button id="next-page">Next Page</button>
        <input type="file" id="pdf-upload" accept=".pdf" />
    </div>
    
    <div id="pdf-container">
        <canvas id="pdf-viewer"></canvas>
    </div>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.12.313/pdf.min.js"></script>
    <script>
        pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.12.313/pdf.worker.min.js';
        
        let pdfDoc = null,
            pageNum = 1,
            pageRendering = false,
            pageNumPending = null,
            scale = 1.5;
        
        const canvas = document.getElementById('pdf-viewer');
        const ctx = canvas.getContext('2d');
        
        function loadPDF(url) {
            pageNum = 1;
            
            pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
                pdfDoc = pdfDoc_;
                document.getElementById('page-count').textContent = pdfDoc.numPages;
                
                renderPage(pageNum);
            });
        }
        
        function renderPage(num) {
            pageRendering = true;
            
            pdfDoc.getPage(num).then(function(page) {
                const viewport = page.getViewport({ scale: scale });
                canvas.height = viewport.height;
                canvas.width = viewport.width;
                
                const renderContext = {
                    canvasContext: ctx,
                    viewport: viewport
                };
                
                const renderTask = page.render(renderContext);
                
                renderTask.promise.then(function() {
                    pageRendering = false;
                    if (pageNumPending !== null) {
                        renderPage(pageNumPending);
                        pageNumPending = null;
                    }
                });
            });
            
            document.getElementById('page-num').textContent = num;
        }
        
        function queueRenderPage(num) {
            if (pageRendering) {
                pageNumPending = num;
            } else {
                renderPage(num);
            }
        }
        
        document.getElementById('prev-page').addEventListener('click', function() {
            if (pageNum <= 1) return;
            pageNum--;
            queueRenderPage(pageNum);
        });
        
        document.getElementById('next-page').addEventListener('click', function() {
            if (pageNum >= pdfDoc.numPages) return;
            pageNum++;
            queueRenderPage(pageNum);
        });
        
        document.getElementById('pdf-upload').addEventListener('change', function(e) {
            const file = e.target.files[0];
            if (file.type !== 'application/pdf') {
                alert('Please select a PDF file.');
                return;
            }
            
            const fileReader = new FileReader();
            fileReader.onload = function() {
                const typedArray = new Uint8Array(this.result);
                loadPDF(typedArray);
            };
            fileReader.readAsArrayBuffer(file);
        });
        
        loadPDF('https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf');
    </script>

Steps To Reproduce

Load any PDF file (tested with multiple files, including Persian-language PDFs).

Files link :
https://www.aeee.in/wp-content/uploads/2020/08/Sample-pdf.pdf
https://ontheline.trincoll.edu/images/bookdown/sample-local-pdf.pdf
https://pdfobject.com/pdf/sample.pdf

Observe corrupted text rendering in BitPDFReader.

Exceptions (if any)

No response

.NET Version

9.0.100

Anything else?

Microsoft.AspNetCore.Components.Web Version : 9.0.3
Bit.BlazorUI Version : 9.7.2
Bit.BlazorUI.Extras Version=9.7.1

@msynk
Copy link
Member

msynk commented Apr 27, 2025

Thanks for contacting us. We're investigating this issue.
We'll let you know if it's possible to work on this issue.

@msynk msynk moved this to Investigating in Support tracking Apr 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Investigating
Development

No branches or pull requests

2 participants