Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - open source knihovna pro čtení PDF a RTF

Zdravim potrebuju nejaky open source projekt/knihovnu, ktera by nebyla prilis slozita a dalo by se zni lehce pouzit nacitani metadat z pdf, popr. knihovnu na rtf a vracet je v nejakem rozumnem formatu. Potrebuju nacitat informace typu: autor, datum, velikost, pocet znaku, pocet stran apod, ukladani neni treba. Dekuji za tipy

Předmět Autor Datum
Nepoužíval som žiadne z nich, ale pre PDF by som vyskúšal niektorú z týchto: Open Source PDF Librari…
los 26.08.2008 18:38
los
diky, ja tudle stranku nasel googlem taky, ale spis sem myslel jestli nekdo nedoporuci podle zkuseno…
TN 26.08.2008 19:14
TN
Z te stranky:pdf-libraries jsem zkusil vsechny az na:iTextSharp, ASP.NET FO PDF, PDFjet Open Source…
TN 26.08.2008 23:38
TN
Report.NET a SharpPDF pokud sem se nespletl nepracuji s metady nebo je nenacitaji, resp. pdf jen vyt…
TN 26.08.2008 23:46
TN
Chýba ti tam nejaký riadok s using, takže stlač pravý klik na File a z kontextového menu vyber Resol…
los 27.08.2008 01:18
los
diky using vyreseno, problem byl urcite v namespace, ktera ma nakonci files, mel jsem za samples usi…
TN 27.08.2008 11:00
TN
Na obrázku vidno, že používaš document.Information, ale nie to, ako si sa dostal k objektu document…
los 27.08.2008 11:43
los
openFileDialog1.Filter = "PDF files (*.pdf)|*.pdf"; if (openFileDialog1.ShowDialog() == DialogResul…
TN 27.08.2008 14:22
TN
Tak to by malo fungovať. Ale keďže to nefunguje, začal by som skúšať ten iTextSharp. Ináč ak nie je…
los 27.08.2008 14:58
los
ok program pribalim, pdf sem vzal prvni z disku ktere jsem nasel a pres pravy tlacitko -> vlastnosti…
TN 27.08.2008 15:17
TN
Tie vlastnosti, ktoré nastavuješ, nie sú priamo súčasťou PDF súboru, ale sú uložené v súborovom syst…
los 27.08.2008 18:43
los
ja jsem zkusil i ten iTextSharp, ale nemohu se dostat k metadatum, resp. to musim delat spatne... o…
TN 27.08.2008 17:10
TN
Tak som skúsil ten iTextSharp a vyzerá oveľa lepšie ako PDF Clown. Jednoduchý príklad čítania metadá…
los 27.08.2008 18:55
los
aha to je ale zajimave zjisteni :) ze to z vlastnosti nejsou uplne presne metadata :) takze se zkus…
TN 27.08.2008 19:49
TN
ano po hodine googleni mi neni jasne jakym grafickym programem editovat metadata :-( Zkusil jsem i…
TN 27.08.2008 20:46
TN
jeste dodam, ze PDF nijak chraneny nejsou, proste si v Open Office vygeneruju nejake PDF a zkousim s…
TN 27.08.2008 20:47
TN
vzhledem k tomu ze nemam zadny program po ruce na metadata, zkousim tedy ruzne knihovny a snimi nejd…
TN 27.08.2008 21:03
TN
Vlastnosť Tag sa neukladá do súboru. Je to len pomocná vlastnosť, do ktorej si môžeš uložiť ľubovoľn…
los 27.08.2008 23:08
los
DIKY!!!! ;-);-);-) Muzete oznacit vyresene, moc jste mi pomohl poslední
TN 27.08.2008 23:23
TN

Z te stranky:pdf-libraries

jsem zkusil vsechny az na:iTextSharp, ASP.NET FO PDF, PDFjet Open Source Edition. U tech nasledujicich mam nasledujici problemy:

PDFsharp - nefunguje tam zobrazeni metadata: tag, author, keywords, subject, title :-/
pouzivany kod:

            openFileDialog1.Filter = "PDF files (*.pdf)|*.pdf";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = openFileDialog1.FileName;
                // Read document into memory for modification
                PdfDocument document = PdfReader.Open(filename);
                textBox2.Text += "\r\nLanguage\t:\t\t" + document.Language;     //funkcni ?
                textBox2.Text += "\r\nPage count\t:\t\t" + document.PageCount;
                textBox2.Text += "\r\nPage layout\t:\t\t" + document.PageLayout;
                textBox2.Text += "\r\nTag\t\t:\t\t" + document.Tag;             //asi nefunkcni :(
                textBox2.Text += "\r\nVersion of PDF\t:\t\t" + document.Version/10.0;
                textBox2.Text += "\r\nAuthor\t\t:\t\t" + document.Info.Author;  //asi nefunkcni :(
                textBox2.Text += "\r\nBy program\t:\t\t" + document.Info.Producer + " / " + document.Info.Creator;
                textBox2.Text += "\r\nKeywords\t\t:\t\t" + document.Info.Keywords;//asi nefunkcni :(
                textBox2.Text += "\r\nSubject\t\t:\t\t" + document.Info.Subject;  //asi nefunkcni :(
                textBox2.Text += "\r\nTitle\t\t:\t\t" + document.Info.Title;      //asi nefunkcni :(
            }

vraci to null :-(

text bude pokracovat - maly prostor zde v poradne na post

Report.NET a SharpPDF pokud sem se nespletl nepracuji s metady nebo je nenacitaji, resp. pdf jen vytvareji

PDF Clown - zde potrebuji pomoct rozchodit kod :-|

Koukam uz nakou hodku do samples a zasekavam se tady:

                // Document metadata.
                #region metadata
                File file = new File();
                Document document = file.Document;
 Information info = new Information(document);
                document.Information = info;
                textBox2.Text += "\r\nAuthor\t\t:\t\t" + info.Author;
                textBox2.Text += "\r\nCreation Date\t\t:\t\t" + info.CreationDate;
                textBox2.Text += "\r\nCreator\t\t:\t\t" + info.Creator;
                textBox2.Text += "\r\nTitle\t\t:\t\t" + info.Title;
                textBox2.Text += "\r\nSubject\t\t:\t\t" + info.Subject;
                #endregion metadata

problem je na radku s File file = new File();

VS 2008 hlasi:
error CS0246: The type or namespace name 'File' could not be found (are you missing a using directive or an assembly reference?)

pritom koukam do samples prikladu a tam jmenne prostory mam vsechny a dllka na assembly byla dodana jen jedna a tu samozrejme u projektu mam.

pokud zkusim:

                Document document = fileName;

mam problem s:
error CS0029: Cannot implicitly convert type 'string' to 'it.stefanochizzolini.clown.documents.Document'

DIKY za radu

Chýba ti tam nejaký riadok s using, takže stlač pravý klik na File a z kontextového menu vyber Resolve. Ďalej tam máš zopár chýb: v konštruktore File ti chýba cesta k PDF súboru a objekt Information netreba vytvárať, pretože už je dostupný v document.Information.

Funkčný príklad:

File file = new File(@"C:\esta\k\nejakemu.pdf");
Document document = file.Document;
Information information = document.Information;
Console.WriteLine("Author: " + information.Author);
Console.WriteLine("Creation Date: " + information.CreationDate);
Console.WriteLine("Creator: " + information.Creator);
Console.WriteLine("Title: " + information.Title);
Console.WriteLine("Subject: " + information.Subject);

Pričom sa používajú tieto menné priestory:

using it.stefanochizzolini.clown.files;
using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.documents.interchange.metadata;

Ináč ja by som začal práve s tým iTextSharp, ktorý si preskočil - zo všetkých sa mi zdal na prvý pohľad najsolídnejší.

diky using vyreseno, problem byl urcite v namespace, ktera ma nakonci files, mel jsem za samples using files = ta namespace a to urcite zlobilo...at uz ale pouzivam objekt information nebo ne- postupuju document.Information tak pokazdy stejnej pad:
[img]obr33162_20080827105406.png[/img]

[img]obr33163_20080827105142.png[/img]

iTextSharp jsme preskocil protoze se mi zdal na prvni pohled naddimenzovany, ja potrebuju malou knihovnu z ktery si vezmu nacitani metadat a textu ze stranky... :-|

Diky za dalsi radu

           openFileDialog1.Filter = "PDF files (*.pdf)|*.pdf";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string fileName = openFileDialog1.FileName;
                System.IO.FileInfo fi = new System.IO.FileInfo(fileName);


                // Document metadata.
                #region metadata
                File file = new File(fileName);
                Document document = file.Document;
                //...

Tak to by malo fungovať. Ale keďže to nefunguje, začal by som skúšať ten iTextSharp.

Ináč ak nie je ten PDF dokument tajný, tak mi ho môžeš poslať, aby som sa pozrel, či s ním nemá PDF Clown nejaký problém. A môžeš pribaliť aj samotný program.

ok program pribalim, pdf sem vzal prvni z disku ktere jsem nasel a pres pravy tlacitko -> vlastnosti -> souhrn jsem mu pridal tagy, komentar, autora apod. Zvlastni je ze pri prekopirovani toho pdfka se tyto komentare ztraceji, clovek se porad uci :)

tady je teda ta jednoducha aplikace testujici clown knihovnu + to pdf s popisky:
leteckaposta.cz

diyk moc, pockam jestli s tim nehnete a pujdu na iTextSharp :-|

Tie vlastnosti, ktoré nastavuješ, nie sú priamo súčasťou PDF súboru, ale sú uložené v súborovom systéme (NTFS).

PDF súbor, ktorý si poslal, neobsahuje skoro žiadne metadáta, s čím má zrejme PDF Clown problém. Ak sa nechceš hrabať v zdrojových kódoch PDF Clowna, tak môžeš každý prístup k vlastnostiam inštancie Information obaliť do try-catch bloku - výkonnosť tým samozrejme utrpí, ale čo už.

Ak ťa zaujímajú len metadáta súboru, ktoré vidíš na tej záložke Souhrn, tak na to nepotrebuješ žiadneho PDF klauna ani iTextSharp. Otázka teda je, ktoré metadáta ťa zaujímajú.

ja jsem zkusil i ten iTextSharp, ale nemohu se dostat k metadatum, resp. to musim delat spatne...

openFileDialog1.Filter = "PDF files (*.pdf)|*.pdf";

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                string filename = openFileDialog1.FileName;

                Document document = new Document();
                PdfReader read = new PdfReader(filename);
                document.Open();
                textBox1.Text += "Pages:" + read.NumberOfPages;
                textBox1.Text += "\r\nVersion:" + read.PdfVersion;
                textBox1.Text += "\r\nLength:" + read.FileLength + " bytes";
                textBox1.Text += "\r\nEncrypted?:" + read.IsEncrypted();//jestli true nedostanu se ani k pages...
                textBox1.Text += "\r\nPermissions:" + read.Metadata.???

Zkusil jsem googlit, ale na sourceforge je ukazka jen s vkladanim metadat, nacitanim uz se nezabyvaji a kdyz jsem googlil na codeproject, tak tam zase ten kod neexistuje, priklad:

http://www.codeproject.com/KB/aspnet/Esignature.asp x

 st.MoreInfo = this.metadata.getMetaData();

???

zbytek odkazu po internetu je taky vesmes ukladani metadat :( zadny cteni :(

Tak som skúsil ten iTextSharp a vyzerá oveľa lepšie ako PDF Clown. Jednoduchý príklad čítania metadát cez iTextSharp:

PdfReader reader = new PdfReader(filename);

foreach (DictionaryEntry entry in reader.Info)
	Console.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));

aha to je ale zajimave zjisteni :) ze to z vlastnosti nejsou uplne presne metadata :)

takze se zkusim vratit k PDFsharp a zkusit vyplnit metadata (zajimaji me ty co se ukladaji do souboru, ne ty do NTFS) nejakym programem - adobe acrobat reader?? a jestli to funguje. pote PdfClown, ale iTextSharp vyzkouset. Diky a jeste se za chvili ozvu jak jsem to vykoumal

ano po hodine googleni mi neni jasne jakym grafickym programem editovat metadata :-(

Zkusil jsem i nainstalovat Adobe Acrobat Reader a to k nemu mam velky odpor :(

Tady na tom screenu: pdfmetadata.htm je videt ze metadata jdou editovat, ale ja to jaksi nemohu, mam ty polozky zasedively

Zkusil jsem nainstalovat i tri dalsi programy, poradite?

vzhledem k tomu ze nemam zadny program po ruce na metadata, zkousim tedy ruzne knihovny a snimi nejdrive ulozit metadata a pak si je teda nechat zobrazit. U te nejslibnejsi na zacatku PDFsharp mam problem:

                PdfDocument document = PdfReader.Open(filename);
                document.Tag = "AAAAAAAAA";
                document.Save(filename);
textBox2.Text += "\r\nTag\t\t:\t\t" + document.Tag;             //asi nefunkcni :(

takhle se mi zobrazi tag, ale kdyz pri dalsim spusteni programu odstranim:

document.Tag = "AAAAAAAAA";

tak uz se tag nezobrazi vyplnen, ale hlavne ze vyprodukovane programem se tam uvede ta knihovna - pdfsharp :(

Vlastnosť Tag sa neukladá do súboru. Je to len pomocná vlastnosť, do ktorej si môžeš uložiť ľubovoľný objekt (podobne ako napr. treeNode.Tag, control.Tag, listView.Tag, atď).

Všetky metadáta môžeš v PDFSharp prejsť napríklad takto:

using (PdfDocument document = PdfReader.Open(filename))
	foreach (DictionaryEntry entry in document.Info)
		Console.WriteLine(string.Format("{0}: {1}", entry.Key, entry.Value));

Zpět do poradny Odpovědět na původní otázku Nahoru