Konwersja pliku PDF na TXT

0

Witam

Chciałbym pobrać sam text z pliku PDF i umiescic w jakies zmiennej lub zapisac do txt. Pobralem komponent obslugujacy PDF 'AcroPDF' wymagany Acrobat Reader i za nic w swiecie nie moge znalezc metody ktora to umozliwia. Jedynie moge wczytac plik :

acropdf1.LoadFile('c:\test.pdf');
0

nie mam pewności na 100% ale chyba tak łatwo ci nie pójdzie z pdf-em. W zasadzie wszystkie projekty "czytające" pdf-a używają metody OCR.

0

poppler ma taką funkcję. Nie wiem jak z portowaniem bilbioteki C++ do Delphi, ale w razie czego można uruchomić pdftotext jako zewnętrzny program, czemu nie? :)

0
robertz68 napisał(a):

nie mam pewności na 100% ale chyba tak łatwo ci nie pójdzie z pdf-em. W zasadzie wszystkie projekty "czytające" pdf-a używają metody OCR.

W PDF wygenerowanym na komputerze (np. za pomocą wirtualnej drukarki) jest zapisany tekst, bo można go zaznaczyć i skopiować. Do odczytu takiego PDF nie jest potrzebny OCR.

0
andrzejlisek napisał(a):
robertz68 napisał(a):

nie mam pewności na 100% ale chyba tak łatwo ci nie pójdzie z pdf-em. W zasadzie wszystkie projekty "czytające" pdf-a używają metody OCR.

W PDF wygenerowanym na komputerze (np. za pomocą wirtualnej drukarki) jest zapisany tekst, bo można go zaznaczyć i skopiować. Do odczytu takiego PDF nie jest potrzebny OCR.

To że można go zaznaczyć jeszcze nic nie znaczy. Można zaszyfrować pdf tak żeby dało się w nim zaznaczać tekst, ale gdybyś chciał go skopiować gdzieś poza dokument to dostaniesz krzaczki.

1

@TomRiddle:

To że można go zaznaczyć jeszcze nic nie znaczy. Można zaszyfrować pdf tak żeby dało się w nim zaznaczać tekst, ale gdybyś chciał go skopiować gdzieś poza dokument to dostaniesz krzaczki.

Tego typu szyfrowanie już dawno zostało złamane, ba chyba nawet na samym początku przez kogoś z Elcomsoft o ile kojarzę.

W poprzedniej firmie widziałem soft, który potrafił wyciągać dane z dokumentów PDF bez OCRowania ;) Oczywiście mówimy o tym, że PDF nie jest obrazkiem. Tam korzystali z PDFBoxa - https://pdfbox.apache.org, tylko to pod Javę jest.

0

Dziekuje za odpowiedzi. Znalazlem takie ustrojstwo i powiem ze wyglada to nawet fajnie gdyby nie fakt ze robi mi balagan w pliku TXT dodajac losowo znak ENTER i raczej zadne parser tego nie pociagnie. Ten tekst w Pliku PDF ma dosc prosta strukture (nazwa: wartosc_liczbowa) a ja musze(nie muszę) to pobrac do odpowiednich zmiennych. Ciekawe czy cos da sie jeszcze cos zrobic z tego programu bo ma pare opcji ktorych nie rozumiem a ja robie cos zle?

C:\Users\user\Desktop\PDFkonwerter>pdftotext
pdftotext version 4.03 [www.xpdfreader.com]
Copyright 1996-2021 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
  -f <int>               : first page to convert
  -l <int>               : last page to convert
  -layout                : maintain original physical layout
  -simple                : simple one-column page layout
  -simple2               : simple one-column page layout, version 2
  -table                 : similar to -layout, but optimized for tables
  -lineprinter           : use strict fixed-pitch/height layout
  -raw                   : keep strings in content stream order
  -fixed <number>        : assume fixed-pitch (or tabular) text
  -linespacing <number>  : fixed line spacing for LinePrinter mode
  -clip                  : separate clipped text
  -nodiag                : discard diagonal text
  -enc <string>          : output text encoding name
  -eol <string>          : output end-of-line convention (unix, dos, or mac)
  -nopgbrk               : don't insert page breaks between pages
  -bom                   : insert a Unicode BOM at the start of the text file
  -marginl <number>      : left page margin
  -marginr <number>      : right page margin
  -margint <number>      : top page margin
  -marginb <number>      : bottom page margin
  -opw <string>          : owner password (for encrypted files)
  -upw <string>          : user password (for encrypted files)
  -q                     : don't print any messages or errors
  -cfg <string>          : configuration file to use in place of .xpdfrc
  -listencodings         : list all available output text encodings
  -v                     : print copyright and version info
  -h                     : print usage information
  -help                  : print usage information
  --help                 : print usage information
  -?                     : print usage information

C:\Users\user\Desktop\PDFkonwerter>pdftotext test.pdf test.txt

Na przykład gdy odpale plik z Acobe Readera czy przegladarki zaznacze caly plik i wkleje do Nonatnika to jest OK(prawie ok)

0

Dziala... Trzeba tylko w opcjach ustawic odpowiednia konwersje np. w moim przypadku -raw efekt identyczny jak kopiuj/wklej

2

Polecam skorzystania z PDFium. Potrzebujesz do tego komponentu: https://github.com/ahausladen/PdfiumLib oraz bibliotek dll: https://github.com/bblanchon/pdfium-binaries

Przykład pobrania tekstu (jeżeli jest zapisany w pliku jako tekst a nie obrazek):

uses
  PdfiumCtrl;

function PDFText(FileName: String; page: Integer): String; //jeżeli strona = 0 to pobierz z całego dokumentu
var
  pdf: TPdfDocument;
  text: String;
  i: Integer;
begin
  text := '';
  pdf := TPdfDocument.Create;
  pdf.LoadFromFile(FileName);
  for i := 0 to pdf.PageCount - 1 do
  begin
    if (page = 0) or (i = page - 1) then
      text := text + pdf.Pages[i].ReadText(0, PDFCtrl.CurrentPage.GetCharCount);
    if (page > 0) and (i = page - 1) then
      break;
  end;
  pdf.Free;
  Result := text;
end;
0

@Paweł Dmitruk: w/w program zalatwai sprawe, ale jak zainstolowac komponent PDFium na przykladzie darmowego kompilatora Delphi 10.4?

0
0

@Paweł Dmitruk: Niekompatybilne chyba. Kompiluje sie bezblednie, ale w przypadku uruchomienia funkcii PDFText zwraca "Nie mozna odnalezc okreslonego modulu PDFium.dll. Probowalem z trzema wersjami tego dll i to samo. Do uses wrzucilem wszystkie trzy moduly pas. PDFiumCore, PDFiumCtrl, PDFiumLib

Wywala na PDFiumLib a mam ta wersje

{$A8,B-,E-,F-,G+,H+,I+,J-,K-,M-,N-,P+,Q-,R-,S-,T-,U-,V+,X+,Z1}
{$STRINGCHECKS OFF} // It only slows down Delphi strings in Delphi 2009/2010

// Use DLLs (x64, x86) from https://github.com/bblanchon/pdfium-binaries
//
// DLL Version: chromium/4660

Wywala:

Code 126 Nie mozna odnlezc okreslonego modulu PDFium.dll.

Windows 10 64 bit, Delphi 10.4

ps: W kompilatorze na gornym pasku pisze ze 32 bit?

0

Musisz wskazać ścieżkę do pliku dll. Jeżeli plik PDFium.dll umieściłeś w folderze z aplikacją to dodaj poniższą linię w OnCreate formatki:

  PDFiumDllDir := ExtractFilePath(ParamStr(0))';
0

@Paweł Dmitruk: Teraz wyskakuje blad brak okreslonego pliku(przed zmiana brak modulu blad 126) a on tam jest zadnych literowek. Sciezke projektu mam w podstawowym folderze zapisywania projektow + \win32\debug. Czemu tworzy folder win32 jak w Windowsie mam wersje 64bit?

  PDFiumDllDir  = 'C:\Users\user\Documents\Embarcadero\Studio\Projects\Win32\Debug\'

0

W załączniku kod oraz skompilowany program.

0

Dziekuje za gotowca. Z twoim projektem dalej ten problem z bledem 126, ale dopiero zauwazylem ze brakuje mi skompilowanego exe'ca w projekcie. Potem zobacze gdzie on sie podzial. dz

0
ktosik7 napisał(a):

Dziekuje za gotowca. Z twoim projektem dalej ten problem z bledem 126, ale dopiero zauwazylem ze brakuje mi skompilowanego exe'ca w projekcie. Potem zobacze gdzie on sie podzial. dz

Dziś chciałem się z wami podzielić pewnym wskazaniem odnośnie edycji plików PDF. Ostatnio korzystałem z narzędzia dostępnego na https://pdfguru.com/pl/edit-pdf i jestem z niego bardzo zadowolony. Dzięki temu narzędziu mogłem w łatwy sposób dodawać notatki, podkreślać tekst czy nawet dokonywać drobnych zmian w moich dokumentach PDF. Jest to naprawdę przydatne narzędzie dla każdego, kto potrzebuje szybko dokonywać edycji plików PDF!

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