我如何将 PDF 缓冲区中的 Base64 解析为 HTLM / JSON / PLAIN-TEXT?
我正在实现一个网络抓取服务,它必须能够从 pdf 中读取特定数据。该服务正在EC2实例中执行,并且其中有很多用户,这就是为什么我不能只下载pdf。我需要读取文件以从中获取数据。现在,我正在使用 Playwright 库来执行此操作。 这就是我主要获取缓冲区的方式:
const [download] = await Promise.all([
page.waitForEvent('download'),
btn.click(),
])
const encodedFile = readFileSync(
await download.path() as PathOrFileDescriptor,
{ encoding: 'base64' },
)
现在,这个 B64 string
可以在 标记中使用来显示 html 内容。但我想以某种格式读取此内容,以使用正则表达式(HTML、txt)或使用键/值对作为 json 提取数据。有没有好的方法可以做到这一点? 这是 base64-to-json 输出的一个非常简短的版本。
%PDF-1.4
%⣏ӊ4 0 obj
<</Filter/FlateDecode/Type/XObject/Length 5585/BitsPerComponent 4/Height 290/ColorSpace[/Indexed/DeviceRGB 7(Ș놕湺C`嶼쿦yW⩝/DecodeParms<</Columns 1168/Predictor 15/Colors 1/BitsPerComponent 4>>/Subtype/Image/Width 1168>>stream
ꎟ︢̔<Y㌼7㙐य़w⺀xd+cM*ⶉ솼紃5☠N͟퇣TƝgu6{ޝ̒`֙ZEhը愣@*Q䵫걢딗ځ쎧䪔AO6B䞧쀙�։㾳跰xⰅ⥈౪팱a্x<쥗Uꆁyﷹٷ}@驫秲
㜛<珘郖բȣ版
슯66g㬳⦘9hĞ,s>u߹ߴk彮+v9a祦d詊z풫ҝyPQ럅뗇}GǢ ⬰趍䭀2矉(Ӵۋ腵嫀g抭룫꧄薻hgÀ蛧`#价k͵@WpܷU&㼂UO⡞⒬ݔ赜굁q⨜_잕D{Ϋݡ뀪Sg供kü칆:triángulo_doble_negro_en_dirección_derecha_con_barra_vertical: Ū䖔_w껴1띑Yyᐩ肍(嚛ꞙ'2֦:²ꤷ5IVi鱚Ά瞒fܭͅ簛2⬌Jװ̱큌hͩ灁f僟30ⱳݬ4䳁㺵#m冦楅ޏŇ_cL蹾Ј藁l乕l䁿�~檯|tɽВ쌼ΌkWMH)°䄟vA뭏辕E썣!NG얀'鿲쏞ꤒߋh穹쎽7䟽͵ɘи竒gbR嘱٦1�劓翟@ᢔPۊ疙ꑓ!歌၍pѧG[뽡Ʀꁔ탟]θ╌䐇ˢᾰ䝶ด㲱:decepcionado_aliviado:iA⊐랝ᰂעk都�{
봦픂'iܹ{n[䦅BWґ̜蚏\殹`仈�䰔㪷踗o僕㲫V:s蘹|YP{yXAa֜D隓ﻂ痧갃搖_ʛ<xᗯ։㡝지ᕅ`⏈೮םٸ붳@rf-Ҥ껴{\犌߭뜪�䒗⃮s徿yߤ⅊abᶆl8佣T,7툡㴊[2Ԋ⒡u틚뺕}I즉;�v3馫쳹左ؚ4̇04I鮭$M䦎lfʒXﹴƆ�~ⲷ暝=[Dꂃ QmΒ靔0[|㸇硨뀗x��gt돓墫āꦃᣋh樦塜uΞc܌#jv}pv ,纨E혓ғ.福[wHдD紋ϝഌb؟mGjAfp=<"N�up֊鮓m䈲І焞ꕎz慜ﱽᎤd֔z$y爮0ʉ筤.s0躷 =jⴭђ2猦oM3넲Dɍ圛㑄Z{醨ሓ
椾ᶡhﴲ칌K眕چ:ﯿ
滱䓉ǣE<ꢩ1/JkZ:儝֯=T謌]챐༻쵈ﵭΊؾ缼'얓tV勥뚂Fu뇁g茘쨹լ≂Ԙ)ⷝDNᕷμ텖ਪب*B繤E.w
R攷ո頻C 9Dݮ郚-ҜDڏ=S"ꌄ,RH܂Ԕ田9Ђ觉ՕбE佃q)棃+쾯ԖL셄JԎGؓcԒyȈᬻɑA/ЉgΘ꠲AxמƾކE쇒Էt▍>ZꆺA론Ȏ2琢⚋l|픷ij~팈㹼i 눢쑧*
郅⢙J�ӚۊG딈0姕怾˙뺯:flecha_doble_hacia_abajo:зNj8ꗩꕡxa㛝-lշNB8댶O1幋]se+쥧OW趜N뿿
ْ6䣧紒惙ו܍蟃3Ӳ啳嚀
ᷙꇋ̅u럿z괄S胀报ndstream
endobj
14 0 obj
<</Filter/FlateDecode/Length 2012>>stream
싸u糹͡ڂ Ū ]l6䍚ц‟VBԆㄮxz
DM뮣6ѴzՀ㨄朶삥AϭZ$ܘ㬮.厼�ڽpqȊ獛!j闻ҁF芚Q綔씉I"|>ꔡ꠲;D쮮7CO헀߀ꨨȕӯ6᬴鰻䛧
괮妙hע>筜~❁ưjעP㜘Ö殃Ro~ჿĝԪk�즲ೳ
d?㰭l㰷
܋
I٘B8咋睈䍯푇WnȄQ㛁Ȃ}<ڥ㠔
`b$!ς汛&Ըᐋ}0CȎʫ/ᮥ㱏saф>ФΙޖ4狡ཱྀᅏexꅈ幹-T菂@A_ᴉᴏGHꬸ*Ӱnߚ&Η;٧䷋~,ݴﲨeﲧ᷆塯Ziʎ(Rwrȴ藒唸١ȳ}Ԗ9xӕՓ
endstream
endobj
15 0 obj
ۻ)>>
endobj
xref
0 28
0000000000 65535 f
0000051849 00000 n
trailer
<</ID [<35dc5404145de6f083a2eee8e5350260><48fb18db1fea355a7b6cea32335f7114>]/Root 25 0 R/Encrypt 27 0 R/Size 28/Info 26 0 R>>
startxref
51988
%%EOF
这是 base64-to-json 的一个非常简短的版本
I'm implementing a web scrapping service, and it must have the capability to read specific data from pdf's. This service is being executed in a EC2 instance and there's a lot of users in it, thats why I can't just download the pdf. I need to read the files to get the data from them. Right now, I'm using the Playwright library to do so.
This is how I primarily get the buffer:
const [download] = await Promise.all([
page.waitForEvent('download'),
btn.click(),
])
const encodedFile = readFileSync(
await download.path() as PathOrFileDescriptor,
{ encoding: 'base64' },
)
Now, this B64 string
can be used in an <embed>
tag to display html content. But I want to read this content in some format to extract the data using regex (HTML, txt) or as a json using keys/values pairs. Is there a good way to do this?
Here's a very short version of the base64-to-json output.
%PDF-1.4
%⣏ӊ4 0 obj
<</Filter/FlateDecode/Type/XObject/Length 5585/BitsPerComponent 4/Height 290/ColorSpace[/Indexed/DeviceRGB 7(Ș놕湺C`嶼쿦yW⩝/DecodeParms<</Columns 1168/Predictor 15/Colors 1/BitsPerComponent 4>>/Subtype/Image/Width 1168>>stream
ꎟ︢̔<Y㌼7㙐य़w⺀xd+cM*ⶉ솼紃5☠N͟퇣TƝgu6{ޝ̒`֙ZEhը愣@*Q䵫걢딗ځ쎧䪔AO6B䞧쀙�։㾳跰xⰅ⥈౪팱a্x<쥗Uꆁyﷹٷ}@驫秲
㜛<珘郖բȣ版
슯66g㬳⦘9hĞ,s>u߹ߴk彮+v9a祦d詊z풫ҝyPQ럅뗇}GǢ ⬰趍䭀2矉(Ӵۋ腵嫀g抭룫꧄薻hgÀ蛧`#价k͵@WpܷU&㼂UO⡞⒬ݔ赜굁q⨜_잕D{Ϋݡ뀪Sg供kü칆:triángulo_doble_negro_en_dirección_derecha_con_barra_vertical: Ū䖔_w껴1띑Yyᐩ肍(嚛ꞙ'2֦:²ꤷ5IVi鱚Ά瞒fܭͅ簛2⬌Jװ̱큌hͩ灁f僟30ⱳݬ4䳁㺵#m冦楅ޏŇ_cL蹾Ј藁l乕l䁿�~檯|tɽВ쌼ΌkWMH)°䄟vA뭏辕E썣!NG얀'鿲쏞ꤒߋh穹쎽7䟽͵ɘи竒gbR嘱٦1�劓翟@ᢔPۊ疙ꑓ!歌၍pѧG[뽡Ʀꁔ탟]θ╌䐇ˢᾰ䝶ด㲱:decepcionado_aliviado:iA⊐랝ᰂעk都�{
봦픂'iܹ{n[䦅BWґ̜蚏\殹`仈�䰔㪷踗o僕㲫V:s蘹|YP{yXAa֜D隓ﻂ痧갃搖_ʛ<xᗯ։㡝지ᕅ`⏈೮םٸ붳@rf-Ҥ껴{\犌߭뜪�䒗⃮s徿yߤ⅊abᶆl8佣T,7툡㴊[2Ԋ⒡u틚뺕}I즉;�v3馫쳹左ؚ4̇04I鮭$M䦎lfʒXﹴƆ�~ⲷ暝=[Dꂃ QmΒ靔0[|㸇硨뀗x��gt돓墫āꦃᣋh樦塜uΞc܌#jv}pv ,纨E혓ғ.福[wHдD紋ϝഌb؟mGjAfp=<"N�up֊鮓m䈲І焞ꕎz慜ﱽᎤd֔z$y爮0ʉ筤.s0躷 =jⴭђ2猦oM3넲Dɍ圛㑄Z{醨ሓ
椾ᶡhﴲ칌K眕چ:ﯿ
滱䓉ǣE<ꢩ1/JkZ:儝֯=T謌]챐༻쵈ﵭΊؾ缼'얓tV勥뚂Fu뇁g茘쨹լ≂Ԙ)ⷝDNᕷμ텖ਪب*B繤E.w
R攷ո頻C 9Dݮ郚-ҜDڏ=S"ꌄ,RH܂Ԕ田9Ђ觉ՕбE佃q)棃+쾯ԖL셄JԎGؓcԒyȈᬻɑA/ЉgΘ꠲AxמƾކE쇒Էt▍>ZꆺA론Ȏ2琢⚋l|픷ij~팈㹼i 눢쑧*
郅⢙J�ӚۊG딈0姕怾˙뺯:flecha_doble_hacia_abajo:зNj8ꗩꕡxa㛝-lշNB8댶O1幋]se+쥧OW趜N뿿
ْ6䣧紒惙ו܍蟃3Ӳ啳嚀
ᷙꇋ̅u럿z괄S胀报ndstream
endobj
14 0 obj
<</Filter/FlateDecode/Length 2012>>stream
싸u糹͡ڂ Ū ]l6䍚ц‟VBԆㄮxz
DM뮣6ѴzՀ㨄朶삥AϭZ$ܘ㬮.厼�ڽpqȊ獛!j闻ҁF芚Q綔씉I"|>ꔡ꠲;D쮮7CO헀߀ꨨȕӯ6᬴鰻䛧
괮妙hע>筜~❁ưjעP㜘Ö殃Ro~ჿĝԪk�즲ೳ
d?㰭l㰷
܋
I٘B8咋睈䍯푇WnȄQ㛁Ȃ}<ڥ㠔
`b$!ς汛&Ըᐋ}0CȎʫ/ᮥ㱏saф>ФΙޖ4狡ཱྀᅏexꅈ幹-T菂@A_ᴉᴏGHꬸ*Ӱnߚ&Η;٧䷋~,ݴﲨeﲧ᷆塯Ziʎ(Rwrȴ藒唸١ȳ}Ԗ9xӕՓ
endstream
endobj
15 0 obj
ۻ)>>
endobj
xref
0 28
0000000000 65535 f
0000051849 00000 n
trailer
<</ID [<35dc5404145de6f083a2eee8e5350260><48fb18db1fea355a7b6cea32335f7114>]/Root 25 0 R/Encrypt 27 0 R/Size 28/Info 26 0 R>>
startxref
51988
%%EOF
That was a very short version of the base64-to-json
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 pdf.js-extract
You can use pdf.js-extract