awk를 사용하여 PDF의 FitH 값을 수정할 수 있나요?

awk를 사용하여 PDF의 FitH 값을 수정할 수 있나요?

나는 pandocMarkdown 문서를 형식화된 PDF로 변환하는 엔진으로 pdfroff를 사용한 적이 있습니다. 코드는 다음과 같습니다

pandoc -s --toc --pdf-engine=pdfroff -o test.pdf test.md

출력 파일은 test.pdfPDF 책갈피와 링크를 약간 부적절하게 렌더링합니다. 원래보다 약 50단위 더 높습니다. 를 사용하여 다음과 같은 북마크를 표시하는 파일을 jpdftweak출력할 수 있었습니다 .marks.csv

1;O;Table of Contents;1 FitH 707.000061
1;O;Section 1;2 FitH 607.0
1;O;Section 2;2 FitH 565.040039
2;O;Subsection 2.1;2 FitH 524.08
2;O;Subsection 2.2;2 FitH 484.120026
1;O;Conclusion;2 FitH 443.160034

사용 awk: 마지막 열만 표시할 수 있습니다.

awk -F";" '{print $4}' marks.csv | awk -F" " '{print $3}'

또는 수정된 FitH 값이 있는 다른 필드를 포함하도록 수정한 후 다른 파일로 출력할 수도 있습니다.

awk -F";" '{print $4}' marks.csv | awk -F" " '{print $3","$3+50}' > dictionary.csv

~로 이어지다

707.000061,757
607.0,657
565.040039,615.04
524.08,574.08
484.120026,534.12
443.160034,493.16

노트:이와 같은 값에 50을 더하면 숫자의 소수점이 없어지게 된다는 것을 알고 있지만 위치의 물리적 변화가 매우 작기 때문에 이것은 나에게 별로 중요하지 않습니다. 수동을 사용하여 모든 값을 변경할 수 vim있으며 잘 작동한다는 점을 지적하고 싶습니다. 저는 이것을 스크립트로 자동화하고 싶습니다(다시 말하지만 를 사용하는 것이 가장 좋습니다 awk).

vim생성된 PDF를 읽고 pdfroff모든 출력을 표시 할 수 있으므로 이를 사용하여 PDF에서 첫 번째 열의 숫자를 awk검색 dictionary.csv하고 두 번째 열의 숫자로 바꾸고 싶습니다. PDF의 관련 줄은 모두 다음과 같습니다.

<</D [23 0 R /FitH 565.040039]>>endobj

따라서 565.040039북마크 값으로 한 번, 링크 값으로 한 번, 두 번 나타납니다. 이 숫자는 첫 번째 열에도 나타나며 dictionary.csvPDF의 모든 인스턴스를 자동으로 찾아서 두 번째 값( 615.04)으로 바꾼 다음 dictionary.csv전체 PDF 파일의 모든 행에 대해 이 작업을 반복하고 싶습니다.

에서 이 작업을 수행하는 가장 좋은 방법은 무엇입니까 awk?

답변1

최신 GNU Linux에서는 bash 프롬프트에서 다음을 수행할 수 있습니다.

awk '{print $NF}' marks.csv | awk -F. '{print "s/"$0"/"($1+50)"."$2"/g"}' >replace.sed
while read -rs f; do
  sed -f replace.sed "$f" >"$(sed 's/\.[pP][dD][fF]$//' <<<"$f")_adjust.pdf"
done < <(/bin/ls *.[pP][dD][fF])

관련 정보