我有兩個版本的PDF,我知道它們略有不同--灰色條中的 "重新評估 "文本,在第3頁:

我使用pdfcpu來從多頁PDF中提取內容,然后通過diff工具運行第3頁:
% diff out_orig/page_3.txt out_new/page_3.txt
1650a1651,1658
> BT
> 1 0 0 rg
> 0 i
> /RelativeColorimetric ri
> /C2_2 9.96 Tf
> 0 Tw 358.147 648.779 Td
> <0035004800440056005600480056005600500048005100570003003000580056005700030032004600460058005500030028005900480055005C0003001600030030005200510057004B0056>Tj
>ET
我查閱了PDF參考資料中的7.3.4.3十六進制字串:
十六進制字串應寫成十六進制數字的序列 編碼為ASCII字符,并置于角括號內。
所以我想我應該能夠做一些簡單的事情,比如直接將十六進制字符解釋為ASCII文本:
>>> s = '0035004800440056005600480056005600500048005100570003003000580056005700030032004600460058005500030028005900480055005C0003001600030030005200510057004B0056'
>>> import binascii
>>> binascii.a2b_hex(s)
b'x005x00Hx00Dx00Vx00Vx00Hx00Vx00Vx00Px00Hx00Qx00Wx00x03x000x00Xx00Vx00Wx00x03x002x00Fx00Fx00Xx00Ux00x03x00(x00Yx00Hx00Ux00x00x03x00x16x00x03x000x00Rx00Qx00Wx00Kx00V'
但我得到的是垃圾。 即使沒有空位元組:
>>> binascii.a2b_hex(s).replace(b'x00'/span>, b'')
b'5HDVVHVVPHQWx030XVWx032FFXUx03(YHUx03x16x030RQWKV')
我希望它看起來像這樣(反過來):
binascii.b2a_hex(b'ReAssessment Must Occur Every 3 Months')
b'52656173736573736d656e74204d757374204f636375722045766572792033204d6f6e746873'
字面字串(7.3.4.2)--這幾乎是直截了當的,因為你只是走資料的"(. ?)" * -- 這只適用于使用標準字體編碼的簡單例子。同時,嵌入式字體的自定義編碼已經變得非常普遍。
那么......也許那個十六進制字串并不只是十六進制編碼的ASCII?
我在試圖提取文本差異時錯過了什么?
uj5u.com熱心網友回復:
我們來看看:
>>> s = '0035004800440056005600480056005600500048005100570003003000580056005700030032004600460058005500030028005900480055005C0003001600030030005200510057004B0056'
>>> ns = [29 int(c, 16) for c in chunks(s, 4) ]
>>> print(bytes(ns))
b'Reassessment Must Occur Every 3 Months'
chunks是從這里復制的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/317222.html
標籤:
