PDF 파일의 코드를 보고 편집하는 방법

PDF 파일의 코드를 보고 편집하는 방법

PDF 파일의 코드를 보고 편집하는 방법을 알고 싶습니다.

  1. 살펴보면 바이너리 형식을 보고 싶지 않아서 hexdump아마도 내가 원하는 것이 아닐 것 같습니다. 시도했지만 geditPDF 콘텐츠를 디코딩하는 데 사용할 수 있는 인코딩 방법이 없습니다.

  2. 편집을 통해 sed 등 /Fit으로 검색하고 변경하고 싶습니다 . /XYZ그러나 내 명령은 sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf오류를 보고하지 않았음에도 PDF의 모양을 예상대로 변경하지 않는 것 같습니다. sedPDF 파일을 일반 텍스트처럼 처리할 수 있는지 알고 싶습니다 .

내 질문의 배경은 다음에서 찾을 수 있습니다.이 문제. 내 운영 체제는 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 파일을 매우 쉽게 편집할 수 있습니다.

관련 정보