Text-Processing

我可以使用 awk 修改 PDF 中的 FitH 值嗎?

  • March 13, 2021

我曾經pandoc使用 pdfroff 作為引擎將 Markdown 文件轉換為格式化的 PDF。程式碼是:

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

輸出文件test.pdf與 PDF 書籤一起呈現,並且連結略微不合適。比應有的水平高出大約 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可以讀取生成的pdfroffPDF 並顯示所有輸出,所以我想用它awk來搜尋dictionary.csvPDF 中第一列中的數字並將其替換為第二列中的數字。pdf中的相關行都如下所示:

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

所以它565.040039出現了兩次:一次作為書籤值,一次作為連結值。該數字也出現在的第一列中,dictionary.csv我想用第二個值(615.04``dictionary.csv

這樣做的最佳方法是什麼awk

在現代 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])

引用自:https://unix.stackexchange.com/questions/638481