Błąd podczas otwierania kilku PDFów w pętli

0

Witam.

Próbuje napisać w C# programik otwierający kilka PDF'ów na kolejnych zakładkach.
Mam coś takiego:

            TabControl MainTabControl;
            TabPage[] MainTabPages;
            AxAcroPDFLib.AxAcroPDF[] PDFViewers;

            MainTabControl = new TabControl();
            Controls.Add(MainTabControl);
            MainTabControl.Dock = DockStyle.Fill;

            MainTabPages = new TabPage[5];
            PDFViewers = new AxAcroPDFLib.AxAcroPDF[5];

            for (int i = 0; i < 1; i++)
            {
                MainTabPages[i] = new TabPage();
                MainTabControl.Controls.Add(MainTabPages[i]);
                MainTabPages[i].Text = "Zakładka " + (i+1).ToString();
                PDFViewers[i] = new AxAcroPDFLib.AxAcroPDF();
                MainTabPages[i].Controls.Add(PDFViewers[i]);
                PDFViewers[i].Dock = DockStyle.Fill;
                PDFViewers[i].LoadFile(@"d:\test.pdf");
            } 

W takiej postaci kod działa dobrze, tworzy się jedna zakładka i otwiera na niej test.pdf.

Jednak jeśli zmienię warunek np na i < 3 program zwraca błąd.
An unhandled exception of type 'System.Windows.Forms.AxHost.InvalidActiveXStateException' occurred in AxInterop.AcroPDFLib.dll

Program wykłada się na LoadFile - próbowałem otwierać dwa inne pliki, również nie działa.

Nie wiem dlaczego i co z tym zrobić....
Gdzie popełniłem błąd ?


Coś mu te zakładki "nie pasują" bo coś takiego już działa:

             for (int i = 0; i < 4; i++)
           {
                PDFViewers[i] = new AxAcroPDFLib.AxAcroPDF();
                Controls.Add(PDFViewers[i]);
                switch (i)
                {
                    case 1: PDFViewers[i].Dock = DockStyle.Left; break;
                    case 2: PDFViewers[i].Dock = DockStyle.Right; break;
                    case 3: PDFViewers[i].Dock = DockStyle.Top; break;
                    case 4: PDFViewers[i].Dock = DockStyle.Bottom; break;
                }
                PDFViewers[i].LoadFile(@"d:\test1.pdf");
           }

Wyczytałem, że muszę gdzieś użyć CreateControl() tylko nie bardzo wiem gdzie (próbowałem w paru miejscach i bez skutku...)

0

Pozwolę sobie podbić temat i zapytać czy ktoś może w między czasie spotkał się z czymś podobnym ?

0

powinieneś użyć CreateControl()
moim zdaniem pownno być między

PDFViewers[i] = new AxAcroPDFLib.AxAcroPDF();

a

MainTabPages[i].Controls.Add(PDFViewers[i]);

ogólnie po konstruktorze kontrolki a przed jej użyciem

zamiana znaczników `` na <code class="csharp"> - @furious programming

0
 TabControl MainTabControl;
            TabPage[] MainTabPages;
            AxAcroPDFLib.AxAcroPDF[] PDFViewers;

            MainTabControl = new TabControl();
            Controls.Add(MainTabControl);
            MainTabControl.Dock = DockStyle.Fill;

            MainTabPages = new TabPage[5];
            PDFViewers = new AxAcroPDFLib.AxAcroPDF[5];

            for (int i = 0; i < 3; i++)
            {
                MainTabPages[i] = new TabPage();
                MainTabControl.Controls.Add(MainTabPages[i]);
                MainTabPages[i].Text = "Zakładka " + (i + 1).ToString();
                PDFViewers[i] = new AxAcroPDFLib.AxAcroPDF();
                CreateControl();
                MainTabPages[i].Controls.Add(PDFViewers[i]);
                PDFViewers[i].Dock = DockStyle.Fill;
                PDFViewers[i].LoadFile(@"d:\test1.pdf");
            }  

Wywołuje taki sam wyjątek :/

0

Na jednym z for dostałem taką odpowiedź:

Masz problem z AxAcroPDFLib, czyli Adobe PDF Library.
Dziwne, że z problemem takim kierujesz się tutaj, na mało popularne forum, a nie wysyłasz zapytania bezpośrednio do producenta.
Adobe PDF Library jest według dokumentacji płatnym produktem:

Adobe PDF Library (fee-based, license required)
The Adobe PDF Library is an object code library that can be linked to your application. The Adobe PDF Library is not free and is not available for free download from the Adobe public web site. the Acrobat Developer Center provides information about the product.

Trudno jednak znaleźć jego cenę, pozostaje chyba tylko wysłać zapytanie do oficjalnego dystrybutora: http://www.datalogics.com/products/pdf/pdflibrary/
Na sieci można trafić dwie sprzeczne informacje, według jednej korzystanie z AxAcroPDFLib związane jest z jednorazowa opłatą w wysokości $25000 plus kolejne $5000 co roku za przedłużenie licencji, w inny miejscu trafiłem trafiłem na informacje że Adobe PDF Library kosztuje 5 tysięcy dolarów.

Nawet jeśli jest to "tylko" 5 tysięcy dolarów to i tak jest to opłata przy której Adobe powinno pomóc ci przy każdym problemie.

Posiadanie oficjalnego SDK jest o tyle ważne, że większość bibliotek sprzedawana jest z mechanizmem, umieszczającym w skompilowanym programie zakodowany klucz licencyjny, odblokowujący pełne możliwości biblioteki.
Bez takiego klucza cześć bibliotek nie działa całkowicie, a w innych spotkałem się z mechanizmem wyświetlającym przy każdym użyciu okna z informacją że zainstalowana jest wersja testowa i należy zapłacić za pełną wersje.
Możliwe że Adobe umieściło podobny mechanizm w AxAcroPDFLib i ich Adobe Reader potrafi w pełni wykorzystać możliwości tej biblioteki, a dodana jej do innych programów powoduje właśnie błąd InvalidActiveXStateException.

Czy to jest możliwe / czy to prawda ?

Jeżeli tak to jaki darmowy komponent do obsługi (podglądu) pdf'ów możecie polecić?

0

Panowie nadal z tym walczę...

Na jednej ze stron znalazłem informację że powinienem użyć:

this.Controls.Add(activeXagent);

tutaj: http://www.codeproject.com/Articles/8217/How-to-use-Microsoft-Agent-in-C
znalazłem info że muszę dodać Microsoft Agent component, jednak na liście COM Comonents nie mam tego elementu (używam VS Community 2013) - jak w takim razie to zrobić ?

dodanie znacznika <code class="csharp"> - @furious programming

1 użytkowników online, w tym zalogowanych: 0, gości: 1