itext - dodawany tekst do PDF jest lustrzanym odbiciem

0

Hejka,

Problem - mam 300-400 PDFów w katalogu. Należy je połączyć w jeden plik PDF sortując według nazwy i "nabić" na nie numery stron według ich ilości w połączonym pliku. Odczytuję zawartość katalogu, sortuję tablicę z nazwami plików i po kolei je łączę w taki sposób:

  foreach (var file in projectFiles)
        {
            PdfDocument projectPdf = new PdfDocument(new PdfReader(file));
            merger.Merge(projectPdf, 1, projectPdf.GetNumberOfPages());
            currentPage += projectPdf.GetNumberOfPages();
            projectPdf.Close();
        }

Plik PDF jest połączony, wyświetla się poprawnie w czytniku. Wywołuję funkcję, która ma nabić numery:

public static void AddPageNumbers(PdfDocument pdfDoc, int totalPages)
    {
        Document doc = new Document(pdfDoc);
        int currentPage = 1;
        
        for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
        {

            var currentPagePara = new Paragraph((currentPage).ToString())
                .SetFontSize(10);
            var totalPagesPara = new Paragraph(totalPages.ToString())
                .SetFontSize(10);
            
            doc.ShowTextAligned(currentPagePara, 500, 20, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 0);
            doc.ShowTextAligned(totalPagesPara, 530, 20, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 0);
            
            currentPage++;
        }
        doc.Close();
    }

Sprawa prosta i oczywista, tylko , że jak uruchomię ten mechanizm, to numery stron się pokazują w taki sposób:

Screenshot 2024-09-19 at 18.05.48.png

Z kolei jak uruchomię dodatkowo ten kod (w tym samym projekcie):

 string dest = "output.pdf";
        PdfWriter writer = new PdfWriter(dest);
        PdfDocument pdf = new PdfDocument(writer);
        Document document = new Document(pdf);
        var para1 = new Paragraph("18");
        var para2 = new Paragraph("1033");
        
        document.ShowTextAligned(para1, 500, 20, 1, TextAlignment.LEFT, VerticalAlignment.TOP, 0);
        document.ShowTextAligned(para2, 530, 20, 1, TextAlignment.LEFT, VerticalAlignment.TOP, 0);
        
        document.Close();

to wszystkie jest prawidłowe:

Screenshot 2024-09-19 at 18.07.31.png

Jakieś koncepcje?

KK

0

Trzeba poczytać jaki układ odniesienia ma ta biblioteka, i to będzie wyjaśnieniem

0

@kal800 Może masz ustawione jakieś transformacje w PDF?
Spróbuj dodać rotację:

doc.ShowTextAligned(currentPagePara, 500, 20, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 180);
doc.ShowTextAligned(totalPagesPara, 530, 20, i, TextAlignment.LEFT, VerticalAlignment.BOTTOM, 180);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.