Wczytywanie z pliku PDF, wybranego tekstu

0

Cześć,
Ogólnie uczę się programować w Javie, mam 6 miesięcy nauki własnej i zaliczony Bootcamp z programowania w Javie , chciałbym zrobić projekt który będzie mi pomagał w aktualnej pracy nie związanej z programowaniem, aczkolwiek chciałbym zmienić branże na programowanie.
Opis programu:
Chciałbym zrobić program który wczytuje z faktur w formacie PDF pewien ciąg liczb w zakresie od 4 do 15 są to numery katalogowe towarów, następnie ilości(sztuki) które są w zakresie od 1 do 1000, na razie bez cen bo może być skomplikowane, zapisuje te dane do pliku .csv, a najlepiej jakby się udało do formatu .epp.

Wczytywanie faktur w pdf myślałem użyć pdfbox ale nie ma tam możliwości sortowania danych, czy możecie podsunąć jakieś propozycje?

0

Jak sortowanie jest dla Ciebie problemem, to odpuść. Dekomponować złożony problem na podproblemy to raczej nie uczyli?

0

Sortowanie nie jest problemem tylko chodzi mi czy pdfbox będzie dobrym narzędziem do odczytu z pdf-a że wczytam fakturę, wysortuje te dwie pozycje czyli numer katalogowy i sztuki i zapisze do pliku, bo jak szukałem w internecie to strony można tylko wyodrębnić a nie liczby, chyba że zapisać jako text i na tekście operować?

2
Jezyk833 napisał(a):

Sortowanie nie jest problemem tylko chodzi mi czy pdfbox będzie dobrym narzędziem do odczytu z pdf-a że wczytam fakturę, wysortuje te dwie pozycje czyli numer katalogowy i sztuki i zapisze do pliku, bo jak szukałem w internecie to strony można tylko wyodrębnić a nie liczby, chyba że zapisać jako text i na tekście operować?

Zrób program testowy, cóż tu dywagować. Widze że kodem się nie chwalisz, na razie "szukałeś w internecie".
Walcz, najwyżej polegniesz, ale czegoś własnymi pazurami się nauczysz. Życie programisty jest pełne nieudanych podejść, nie miałeś jeszcze takowych?

0

Zacząłem pisać, zobaczymy co z tego wyjdzie:)

0
Jezyk833 napisał(a):

Zacząłem pisać, zobaczymy co z tego wyjdzie:)

I nie "zgaduj" kodu, a na pewno czytaj dokumentację

0

To staram się robić bo nie problem coś skopiować tylko wiedzieć do czego to służy i jak działa

0

Zależy jakie te PDF'y masz. Istnieją pliki generowane które można chyba otworzyć edytorem tekstowym i masz język znaczników i jest fajnie, masz pdfy które strony swoje traktują jak obraz i tego nie przeparsujesz niczym. To czy Ci się uda czy nie zależy od pochodzenia tych faktur. Od tego bym zaczął, czy wgl. te pliki nadają się do obróbki.

1

PDFBox jest ok. https://pdfbox.apache.org/1.8/cookbook/textextraction.html
Można odczytywać cały text, wyszykiwać fragmenty, odczytać kawałek oznaczony jakąś pozycją, jeśli przerabiasz faktury, które są tworzone w jakims systemie to szanse na odczytanie textów łatwo są prawie 100%. Gorzej jak są to skany, ale nawet wtedy OCR daje rade często (tylko, że to juznie pdfbox).

0

Oto co zrobiłem dotyczas:
Mam takie pytanie:

  1. Czemu nie zapisuje mi się ten plik po filtrowaniu liter i znaków, jak ten zapis do formatu .csv wyjmę z pętli for na koniec to też się nie zapisuje.
  2. Po filtracji jest sporo przerw miedzy znakami czy to między liniami czy to w linii, jest możliwość po filtracji scalenia tekstu żeby była linia pod linią?
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class Test {

	public static void main(String[] args) throws IOException {
		
		 PDDocument document = null;
		 BufferedWriter writer = null;
		 
		 try {
			 File input = new File("C:\\Users\\Desktop\\INVOICE.40016008.pdf");  //wczytuje plik
			 File output = new File("C:\\Users\\Desktop\\Faktury1.csv"); //zapis plik po konwersji 
			 document = PDDocument.load(input);
			 
			 System.out.println("Ilość stron: " + document.getNumberOfPages());
			 
			 PDFTextStripper tStripper = new PDFTextStripper();
			 tStripper.	setSortByPosition(true);
	         String pdfFileInText = tStripper.getText(document);
	      	         
	         String lines[] = pdfFileInText.split("[a-zA-Z@/:]");  // filtruje litery oraz znaki niepotrzebne
	         for (String line : lines) { 
	        	 writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output)));
	    		 tStripper.writeText(document, writer);
	        	System.out.println(line);        	
	         }
	        
		 } catch (Exception e){
	         e.printStackTrace();
	     } finally {
			if (document != null) {
				document.close();
			}
			if (writer != null) {
				writer.close();
			}
	     }

	}	
}

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