PDF 파일의 코드를 보고 편집하는 방법을 알고 싶습니다.
살펴보면 바이너리 형식을 보고 싶지 않아서
hexdump
아마도 내가 원하는 것이 아닐 것 같습니다. 시도했지만gedit
PDF 콘텐츠를 디코딩하는 데 사용할 수 있는 인코딩 방법이 없습니다.편집을 통해 sed 등
/Fit
으로 검색하고 변경하고 싶습니다 ./XYZ
그러나 내 명령은sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
오류를 보고하지 않았음에도 PDF의 모양을 예상대로 변경하지 않는 것 같습니다.sed
PDF 파일을 일반 텍스트처럼 처리할 수 있는지 알고 싶습니다 .
내 질문의 배경은 다음에서 찾을 수 있습니다.이 문제. 내 운영 체제는 Ubuntu 10.10입니다.
답변1
첫 번째 질문("소스를 보지만 바이너리가 없음")과 관련하여: 많은 개체에 연결된 내부 바이너리 스트림의 압축을 풀 때 사용할 수 있는 옵션이 있습니다.
내가 가장 좋아하는 도구는양자 PDF, 모든 주요 운영 체제 플랫폼에서 사용할 수 있습니다. 다음 명령압축을 푼다모든 스트림 및 모든 객체 스트림:
qpdf --qdf --object-streams=disable orig.pdf expanded.pdf
이제 모든 텍스트 편집기에서 PDF를 열 수 있습니다. (예를 들어 QPDF 확장에는 의미가 없는 글꼴 파일 및 ICC 프로필과 같은 일부 바이너리 얼룩이 여전히 있을 수 있습니다.)
도착하다재압축다시 편집한 후 expanded.pdf
다음을 실행할 수 있습니다.
qpdf expanded.pdf orig2.pdf
(PDF를 수동으로 편집할 때는 주의하세요! 이 작업을 올바르게 수행하려면 내부 구문에 대해 많이 알아야 합니다. 단일 바이트를 추가하거나 제거하면 PDF 리더에서 오류 메시지가 표시될 수 있으며 더 이상 편집하지 못할 수도 있습니다. 편집을 위해 열려면 PDF 내부 디렉토리가 손상되었기 때문에 바이트 오프셋을 기준으로 계산되지만 문자열 Fit
로 바꾸면 XYZ
됩니다...)
답변2
바이너리 파일을 사용할 수 있습니다 sed
(적어도 GNU sed; 일부 구현에서는 파일에 널 문자가 포함되어 있거나 개행 문자로 끝나지 않는 문제가 있을 수 있습니다). 그러나 사용한 명령은 /Fit
각 줄의 첫 번째 항목만 바꾸며 PDF 파일에서는 줄의 의미가 거의 없습니다. 다음 항목을 모두 바꿔야 합니다.
sed s/\/Fit/\/XYZ/g
/Fit
그 뒤에 단어 구성 요소가 없으면 바꾸기만 하면 더 강력해집니다(예: 교체 없음 , 파일에 문제가 발생할 수 있는 /Fitness
내용이 포함되어 있는지 모르겠습니다 ). /Fit
한 가지 방법은 다음과 같습니다.
perl -pe 's!/Fit\b!/XYZ!g'
답변3
LibreOffice 또는 OpenOffice를 사용하여 PDF 열기, 보기, 내용 교체, 새 PDF 작성 등을 수행할 수 있습니다. 처리할 문서가 많은 경우 명령줄에서 사용하거나 프로그래밍 방식으로 사용할 수도 있다고 생각합니다.
PDF의 출처는 다음과 같습니다.일부소스(예: 스캐너)에는 일반적으로 페이지가 텍스트가 아닌 이미지로 포함되어 있으므로 검색 및 바꾸기에 사용할 수 없습니다.
답변4
sed
라인 지향적이므로 라인이 아닌 블록으로 구조화된 바이너리 파일에는 적합하지 않습니다.
대신 bbe(bbe-.sourceforge.net)를 사용해 보세요.
또는 Emacs(GNU 및 XEmacs)와 vim 모두 PDF 파일을 원활하게 열 수 있습니다. 물론 텍스트와 바이너리가 혼합되어 있어서 보기 좋게 인쇄되지는 않지만 편집용으로는 충분합니다.
하나 있다PDF 파일vim 플러그인을 사용하면 모든 것이 더 쉬워집니다. 다운로드여기(압축 파일).
아시다시피 위의 두 편집기 모두 강력한 검색 및 바꾸기 기능을 갖추고 있습니다.
또한 PDF를QDF 모드before를 사용하면 PDF 파일을 매우 쉽게 편집할 수 있습니다.