나는 가지고있다스캔한 PDF 파일, 품질이 낮은 OR 텍스트가 포함되어 있습니다.
OCR 텍스트가 없는 PDF 파일을 원합니다.
OCR 처리된 텍스트가 포함된 스캔한 PDF를 OCR 처리된 텍스트가 포함되지 않은 스캔된 PDF로 변환하는 방법은 무엇입니까?
각 페이지의 너비와 높이를 픽셀 단위로 변경하지 않고, 각 페이지의 인치당 픽셀 수를 변경하지 않고 OCR 이전에 스캔한 원본 PDF 파일에 최대한 가깝게 복원할 수 있는 방법이 있는지 궁금합니다.
어떤 종류의 래스터화가 다시 도움이 될까요? 래스터화하면 이미지 품질이 다시 저하되나요?
많은 시도:
- 나는 Evince에서 인쇄 파일을 사용하고 있는데,
cups-pdf
이는 OCR된 텍스트를 제거하지 않습니다. 다음 명령을 사용해
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 개체의 압축을 푸는 데 사용됩니다.
qpdf
sed
대부분의 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된 텍스트를 제거하는 방법에는 여러 가지가 있습니다.
PDF에서 스캔한 이미지를 내보내고 다시 결합합니다.
pdfimages
(패키지에서)를 사용하여 이를 추출poppler-utils
하고convert
(에서 )imagemagick
다시 변환할 수 있습니다 .pdfimages toc.pdf toctmp convert toctmp*.pbm newtoc.pdf
PDF로 인쇄(PDF 지원
cups-pdf
)
PDF는 이미지 스캔에 적합하지 않은 형식이지만 하나의 파일에 여러 페이지를 포함할 수 있기 때문에 자주 사용됩니다. 그러나 저장 형식은 일반적으로 JPEG(스캔용)에 적합하지 않습니다. 스캔한 이미지에서 PDF를 만드는 것은 일반적으로 스캔 후 품질을 저하시키는 단계이므로 PDF(스캔한 원본 PDF 파일이 없는 경우)에서 원본 이미지를 복구하는 것은 불가능할 수 있습니다. pdfimage
PDF에서 이미지를 사용하거나 가져오려고 시도할 수 있지만 pdftoppm
PDF의 이미지를 처리하는 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 텍스트를 제거하기 위한 다른 접근 방식을 제안할 자신감을 얻었습니다.
- 모든 이미지를 추출합니다.
- 이 이미지로 새 PDF를 만듭니다.
2. PDF에서 모든 이미지 추출
최신 Poppler 버전 중 하나를 사용하는 경우 pdfimages
JBIG2 압축으로 이미지를 추출할 수 있습니다.
pdfimages -jbig2 toc.pdf toc--
결과 이미지 파일의 파일 이름은 toc---000.jb2e
, toc---000.jb2e
, ...(접미사 .jb2e
)입니다. 이러한 각 파일에는 toc---000.jb2g
, toc---000.jb2g
, ...(접미사 .jb2g
)라는 이름의 다른 파일이 있어야 합니다.
.jb2e
이미지를 얻지 못하고 대신 .pbm
JPEG를 생성하기 위해 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