Skopiuj warstwę tekstową pdf na inny pdf

1

Załóżmy, że masz 2 „zeskanowane” pliki pdf.

  1. Duży, ale bez warstwy tekstowej.
  2. Mniejszy (z obrazami o niższej jakości), ale z prawidłową warstwą tekstową.

Oba pliki zawierają równe obrazy, różniące się jedynie kompresją.

Celem jest osadzenie tej samej warstwy tekstowej w 1. pdf.

„Tylko pierwszy plik OCR” nie jest rozwiązaniem. Wiem, że Acrobat (i niektóre inne narzędzia) są w stanie OCR bez zmiany warstwy obrazu, ale nie jestem zadowolony z ich jakości OCR.

Widzę więc dwa możliwe sposoby:

  1. Jakoś eksportuj i importuj warstwę tekstową
  2. Jakoś zamień obrazy w warstwie obrazu.

Jeśli chodzi o 1. sposób, nic nie znalazłem. Jeśli chodzi o drugi sposób, znalazłem dwa narzędzia, które są dość zbliżone do hocr2pdf i pdf2text , ale o ile rozumiem , wciąż są niewystarczające. :(

PS: użyj przykładu:

Właśnie znalazłem inny przykład, w którym taka operacja jest przydatna w sposób systematyczny.

Jeśli masz zeskanowany plik pdf-1 (bez warstwy tekstowej) z, powiedzmy, kompresją obrazu „jpg”, program do czytania Abbyy udostępnia OCR'd pdf, pdf-2. Byłby albo dość duży, jeśli wybierzesz bezstratną kompresję obrazu, albo miałby jakość obrazu znacznie niższą niż pdf-1. W wielu przypadkach najlepszym wyborem jest utrzymanie kompresji obrazu źródłowego w niezmienionej postaci i nie kompresowanie obrazu.

i3v
źródło
Jak to możliwe, że zeskanowany dokument ma lepszą jakość niż oryginał? Czy coś brakuje?
gronostaj
@gronostaj Em .. Nie powiedziałem tak ... Jest pdf-1, który ma obrazy lepszej jakości i pdf-2, który ma obrazy niższej jakości, ale ma warstwę tekstową. Żadna z nich nie jest „oryginalna”. W rzeczywistości można traktować pdf-2 jak OCR'd i skompresowany pdf-1. Jeśli tak, chciałbym połączyć oba, aby uzyskać zarówno warstwę tekstową, jak i obrazy o wyższej jakości.
i3v

Odpowiedzi:

2

Ta odpowiedź na stackoverflow ma rozwiązanie. Możesz wyodrębnić tekst o współrzędnych ze swojego pdf-2 za pomocą pdftotext -bboxlub pakietu PDFMiner w Pythonie , a następnie zapisać ten ukryty tekst w nowym pliku PDF za pomocą pakietu Python ReportLab , a następnie scalić ten ukryty tekst PDF z pdf-1 za pomocą PDFtk (istnieje GUI dla Windows na stronie internetowej; teraz wiersz poleceń dla Unixa nazywa się teraz PDFtk Server.)

Możesz też spróbować bezpośrednio połączyć pdf-1 i pdf-2 za pomocą PDFtk. Uruchom pdftk pdf-2 multistamp pdf-1 output out.pdf. Spowoduje to umieszczenie każdej strony pdf-1 przed odpowiednią stroną pdf-2, więc zobaczysz tylko obrazy z pdf-1 (zakładając, że są to skany i nie mają przezroczystego tła), ale ukryty tekst z pdf-2 zostaną uwzględnione. Minusem jest to, że może być bardzo duży, ponieważ będzie zawierał dwie kopie każdego obrazu strony. Sprawdziłem, czy to działa, a rozmiar wyjściowego pliku pdf jest sumą rozmiarów danych wejściowych.

Nick Matteo
źródło
Dzięki za podpowiedź, PDFtk faktycznie pozwolił mi rozwiązać ten problem. Nawiasem mówiąc, wersja „PDFtk Free” systemu Windows może robić to samo, o ile istnieje również narzędzie wiersza polecenia „pdftk.exe”.
i3v
Aby uniknąć sytuacji, gdy rozmiar wyjściowego pliku pdf jest równy sumie rozmiarów oryginalnych plików pdf, po prostu „zoptymalizowałem” plik PDF za pomocą tekstu za pomocą funkcji optymalizacji pdf programu Abode Acrobat (Plik-> Zapisz jako-> Zapisz jako typ-> Pliki Adobe PDF, zoptymalizowane (* .pdf) -> Ustawienia-> Obrazy -> [ustaw najniższe możliwe ppi, dla wszystkich typów obrazów, 9 dla mnie itd.] -> OK-> Zapisz). Spowodowałoby to powstanie stosunkowo małego pliku pdf, więc dodanie tego rozmiaru do rozmiaru oryginalnego pliku pdf nie będzie wielkim problemem. Ten przepływ pracy działa nawet prawie OK w przypadku plików PDF z osadzonymi komentarzami (problem polega na tym, że wyróżnianie staje się „nieprzejrzyste”)
i3v
0

Jeśli musisz to zrobić samodzielnie, LibreOffice + GIMP powinien wykonać zadanie. Najpierw użyj LibreOffice Draw, aby wyodrębnić skany wysokiej jakości. Następnie edytuj je za pomocą GIMP, aby usunąć zeskanowany tekst. Na koniec dodaj obraz do pliku OCRed na niższej warstwie.

Ale jeśli zamierzasz to zrobić w ramach rutyny, prawdopodobnie masz problem z przepływem pracy.

gronostaj
źródło
1) W rzeczywistości nie muszę „usuwać zeskanowanego tekstu”. Warstwa tekstowa powinna znajdować się poniżej warstwy obrazu. 2) Jestem w stanie zastąpić obrazy stron jeden po drugim ... Jedyne pytanie brzmi: jak mogę to zautomatyzować dla dużej liczby stron? Przepraszam, że moje początkowe pytanie było tak mylące. Właśnie dodałem „PS” do początkowego pytania, mam nadzieję, że pokazuje on możliwy przykład zastosowania.
i3v