OCR 텍스트가 있는 스캔한 PDF를 OCR 텍스트가 없는 스캔 PDF로 변환하는 방법은 무엇입니까?

OCR 텍스트가 있는 스캔한 PDF를 OCR 텍스트가 없는 스캔 PDF로 변환하는 방법은 무엇입니까?

나는 가지고있다스캔한 PDF 파일, 품질이 낮은 OR 텍스트가 포함되어 있습니다.

OCR 텍스트가 없는 PDF 파일을 원합니다.

OCR 처리된 텍스트가 포함된 스캔한 PDF를 OCR 처리된 텍스트가 포함되지 않은 스캔된 PDF로 변환하는 방법은 무엇입니까?

각 페이지의 너비와 높이를 픽셀 단위로 변경하지 않고, 각 페이지의 인치당 픽셀 수를 변경하지 않고 OCR 이전에 스캔한 원본 PDF 파일에 최대한 가깝게 복원할 수 있는 방법이 있는지 궁금합니다.

어떤 종류의 래스터화가 다시 도움이 될까요? 래스터화하면 이미지 품질이 다시 저하되나요?

많은 시도:

  1. 나는 Evince에서 인쇄 파일을 사용하고 있는데, cups-pdf이는 OCR된 텍스트를 제거하지 않습니다.
  2. 다음 명령을 사용해 gs도 OCR된 텍스트가 제거되지 않습니다(아직 올바르게 사용하는 방법을 찾지 못한 것 같습니다 gs).

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
       -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf toc.pdf
    

답변1

이 작업을 수행해야 한다면 다음과 같이 OCR 텍스트를 제거합니다.

먼저 PDF의 OCR 텍스트는 OCR 텍스트가 아니라는 점을 알아야 합니다., 하지만 특별한텍스트 렌더링 모드. 아래 스크린샷공식 PDF 사양에서사용 가능한 모든 텍스트 렌더링 모드를 나열합니다.

자세한 배경 정보는 StackOverflow에서 다음 답변을 참조하세요.


이제 내가 구상하는 프로그램은 다음과 같습니다.

0. 원본 PDF 파일 백업

누프가 말했지...

1. qpdf대부분의 PDF 개체의 압축을 푸는 데 사용됩니다.

qpdfsed대부분의 PDF를 텍스트 편집기(또는 다음을 통해 ) 로 조작하기 쉬운 형식으로 변환하는 멋진 명령줄 도구입니다.

qpdf                       \
  --qdf                    \
  --object-streams=disable \
    input.pdf              \
    editable.pdf

2. PDF 코드에 포함된 위치를 검색하세요3 Tr

"보이지 않는" 장소 editable.pdf(일명.패딩도 애무도 아닌) 초기 정의로 표시된 텍스트

3 Tr

지금 읽을 수 있도록 변경하세요.

1 Tr

이렇게 하면 이전에 숨겨진 텍스트가 표시됩니다. 문자 모양은 스캔한 원본 페이지 이미지 위에 두꺼운 윤곽선으로 표시됩니다.

매우 추악해 보일 것입니다.

편집된 PDF를 저장합니다.

3. 스트로크 연산자 Tj와 텍스트를 "no-ops"로 변경합니다.TJ

텍스트 문자열을 렌더링할 준비가 될 때마다 이 작업을 수행하는 실제 연산자의 이름은 Tj또는 입니다 TJ.

그들 모두에게주의를 기울이십시오. tJ및 로 바꾸십시오 tj. 이는 "no-op"로 변경됩니다. PDF 소스 코드에서는 전혀 의미가 없으며 PDF 뷰어나 프로세서도 이를 "이해"할 수 없습니다. (PDF 소스 코드의 내용을 교체할 때 바이트 수를 변경하지 않도록 주의하세요. 이로 인해 "손상"될 수 있습니다.)

PDF 파일을 저장합니다.

4. 지금 PDF 파일이 어떻게 보이는지 확인하세요

이제 PDF가 다시 "깨끗하게" 보입니다. 이름이 바뀐 텍스트 연산자는 더 이상 PDF 뷰어나 PDF 해석기에 아무런 의미가 없습니다.

5. Ghostscript를 사용하여 최종 PDF 만들기

이 명령을 사용하면 원하는 결과를 얻을 수 있습니다.

gs                        \
  -o final.pdf            \
  -sDEVICE=pdfwrite       \
  -dPDFSETTINGS=/prepress \
   editable.pdf

마지막 단계가 editable.pdf입력으로 사용됩니다. 출력 final.pdf은 텍스트의 모든 흔적을 제거합니다. 스틸 입력가지다연산자 이름이 바뀌었기 때문에 "사용할 수 없는" 형식이기는 하지만 텍스트입니다. Ghostscript는 이름이 바뀐 연산자를 "이해"하지 못하므로 기본적으로 해당 연산자를 건너뜁니다.

답변2

파일에서 OR된 텍스트를 제거하는 방법에는 여러 가지가 있습니다.

  1. PDF에서 스캔한 이미지를 내보내고 다시 결합합니다. pdfimages(패키지에서)를 사용하여 이를 추출 poppler-utils하고 convert(에서 ) imagemagick다시 변환할 수 있습니다 .

    pdfimages toc.pdf toctmp
    convert toctmp*.pbm newtoc.pdf
    
  2. PDF로 인쇄(PDF 지원 cups-pdf)

PDF는 이미지 스캔에 적합하지 않은 형식이지만 하나의 파일에 여러 페이지를 포함할 수 있기 때문에 자주 사용됩니다. 그러나 저장 형식은 일반적으로 JPEG(스캔용)에 적합하지 않습니다. 스캔한 이미지에서 PDF를 만드는 것은 일반적으로 스캔 후 품질을 저하시키는 단계이므로 PDF(스캔한 원본 PDF 파일이 없는 경우)에서 원본 이미지를 복구하는 것은 불가능할 수 있습니다. pdfimagePDF에서 이미지를 사용하거나 가져오려고 시도할 수 있지만 pdftoppmPDF의 이미지를 처리하는 OCR 소프트웨어는 이미 해당 PDF에서 최고 품질의 이미지를 얻는 방법을 알고 있으므로 이를 개선하기 위해 아무것도 할 가능성이 없습니다.

문제는 OCR 소프트웨어가 아니라 스캔 소프트웨어에 있을 수 있습니다. 원본 자료가 아직 남아 있는 경우 다른 복사본을 여러 페이지로 구성된 TIFF(lzw 압축)로 스캔하면 JPEG를 포함하여 PDF로 변환된 것보다 더 나은 OCR을 제공할 수 있습니다.

답변3

접속하려고 하면샘플 스캔 파일에 대한 링크이전에는 나에게 효과가 없었습니다. 하지만 그러는 동안 나는 그것을 다운로드하여 자세히 살펴보았습니다.

1. pdfimages -list임베디드 이미지 연구를 위해

Poppler 변형의 최신(!) 버전을 실행하면 매개변수를 사용할 pdfimages수 있습니다 . -list이 매개변수는 PDF 파일에 포함된 유용한 이미지 목록을 인쇄합니다. 이것최대최신 버전에서는 이전에는 쉽게 사용할 수 없었던 몇 가지 추가 정보(예: 이미지 해상도 및 압축 비율)도 제공합니다.

안타깝게도 PDF 파일에는 출력이 왜곡되는 몇 가지 구문 오류가 포함되어 있습니다.

kp@mbp:#175536> pdfimages -l 1 -list toc.pdf
 Syntax Warning: Couldn't link the profiles
 Syntax Warning: Can't create transform
 Syntax Warning: Couldn't link the profiles
 Syntax Warning: Can't create transform
 Syntax Warning: Couldn't link the profiles
 Syntax Warning: Can't create transform
 Syntax Warning: Couldn't link the profiles
 Syntax Warning: Can't create transform
 page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
 --------------------------------------------------------------------------------------
    1   0 image  2000  2650  icc     1   1  jbig2  no       51 0   300   300 12.4K 1.9%

이제 <stderr>출력을 다음으로 리디렉션 /dev/null하고 다시 시도해 보겠습니다.

kp@mbp:#175536> pdfimages -list toc.pdf 2>/dev/null
page num  type width height color comp bpc  enc interp objectID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------
   1   0 image  2000  2650  icc     1   1  jbig2  no       51 0   300   300 12.4K 1.9%
   2   1 image  2012  2659  icc     1   1  jbig2  no      616 0   300   301 16.1K 2.5%
   3   2 image  2014  2661  icc     1   1  jbig2  no      696 0   301   300 16.0K 2.4%
   4   3 image  2000  2650  icc     1   1  jbig2  no      778 0   300   300 16.2K 2.5%
   5   4 image  2000  2650  icc     1   1  jbig2  no      855 0   300   300 16.2K 2.5%
   6   5 image  2000  2650  icc     1   1  jbig2  no      938 0   300   300 15.7K 2.4%
   7   6 image  2000  2650  icc     1   1  jbig2  no     1026 0   300   300 15.5K 2.4%
   8   7 image  2022  2667  icc     1   1  jbig2  no     1103 0   300   300 15.7K 2.4%
   9   8 image  2000  2650  icc     1   1  jbig2  no     1190 0   300   300 15.5K 2.4%
  10   9 image  2011  2658  icc     1   1  jbig2  no     1271 0   300   301 15.7K 2.4%
  11  10 image  2000  2650  icc     1   1  jbig2  no     1347 0   300   300 15.7K 2.4%
  12  11 image  2010  2657  icc     1   1  jbig2  no     1429 0   300   300 15.5K 2.4%
  13  12 image  2000  2650  icc     1   1  jbig2  no     1504 0   300   300 16.8K 2.6%
  14  13 image  2000  2650  icc     1   1  jbig2  no     1589 0   300   300 15.4K 2.4%
  15  14 image  2000  2650  icc     1   1  jbig2  no     1666 0   300   300 17.6K 2.7%
  16  15 image  2010  2657  icc     1   1  jbig2  no     1740 0   300   300 18.7K 2.9%
  17  16 image  2006  2654  icc     1   1  jbig2  no     1823 0   300   301 17.7K 2.7%
  18  17 image  2007  2656  icc     1   1  jbig2  no     1905 0   300   300 16.9K 2.6%
  19  18 image  2000  2650  icc     1   1  jbig2  no     1983 0   300   300 16.7K 2.6%
  20  19 image  2000  2650  icc     1   1  jbig2  no     2065 0   300   300 17.4K 2.7%
  21  20 image  2000  2650  icc     1   1  jbig2  no     2148 0   300   300 17.4K 2.7%
  22  21 image  2011  2658  icc     1   1  jbig2  no     2229 0   300   301 17.2K 2.6%
  23  22 image  2006  2654  icc     1   1  jbig2  no     2305 0   300   301 17.5K 2.7%
  24  23 image  2000  2650  icc     1   1  jbig2  no     2377 0   300   300 14.5K 2.2%

이 출력은 다음을 의미합니다.

  • 24개의 사진이 포함된 24페이지(0~23번)(페이지당 사진 1개).
  • 모든 이미지의 크기(너비/높이)는 매우 유사하며 해상도는 300PPI입니다.
  • 모든 이미지는 동일한 압축 방법을 사용하며,JBIG2.

이러한 결과를 통해 나는 PDF에서 OCR 텍스트를 제거하기 위한 다른 접근 방식을 제안할 자신감을 얻었습니다.

  1. 모든 이미지를 추출합니다.
  2. 이 이미지로 새 PDF를 만듭니다.

2. PDF에서 모든 이미지 추출

최신 Poppler 버전 중 하나를 사용하는 경우 pdfimagesJBIG2 압축으로 이미지를 추출할 수 있습니다.

pdfimages -jbig2 toc.pdf toc--

결과 이미지 파일의 파일 이름은 toc---000.jb2e, toc---000.jb2e, ...(접미사 .jb2e)입니다. 이러한 각 파일에는 toc---000.jb2g, toc---000.jb2g, ...(접미사 .jb2g)라는 이름의 다른 파일이 있어야 합니다.

.jb2e이미지를 얻지 못하고 대신 .pbmJPEG를 생성하기 위해 ImageMagick의 변환을 사용해야 하는 경우:

for i in toc--*.pbm; do
  convert $i ${i/.pbm/.jpg}
done

그러나 JPEG 이미지는 JBIG2 이미지보다 훨씬 큽니다. (시도했습니다: 24개의 이미지가 포함된 JPEG의 경우 총 15MB, PBM의 경우 총 15MB, JBIG2의 경우 총 436KB!)

3. 추출된 이미지에서 새 PDF를 만듭니다.

불행하게도 JPEG로 변환해야 한다면 이제 PDF로 변환할 수 있습니다.

convert toc--*.jpg -density out.pdf

바라보다! , 이제 15MB PDF 파일이 생겼습니다.아니요OCR 처리된 텍스트, 이전에 1.6MB PDF 파일이 있었습니다.그리고OCR 텍스트! (하지만 이전의 자질은 많이 잃지 않습니다...)


내 코드는 pdfimages소스에서 컴파일되기 때문에 때때로 오류가 발생합니다. 현재는 이미지를 JBIG2 파일로 올바르게 추출하지 못합니다. 그렇기 때문에 PDF를 만들 수도 없습니다. 하지만 이 PDF의 크기는 toc.pdf원본 크기와 비슷할 것입니다...

답변4

고품질의 다층 PDF를 위해 제가 찾은 가장 좋은 방법은 inkscape및 를 사용하는 것입니다 img2pdf. 나는 다음과 같은 빠른 bash스크립트를 만들었습니다.

#!/bin/bash
mkdir "$1_temp"
cp "$1" "$1_temp"/to_do.pdf
cd "$1_temp"
pdftk to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
rm *.pdf
ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 - {}.jpg
rm *.pdf
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
rm *.jpg
pdftk *.pdf cat output combined.pdf

관련 정보