我如何将 PDF 缓冲区中的 Base64 解析为 HTLM / JSON / PLAIN-TEXT?

发布于 2025-01-16 03:38:38 字数 2690 浏览 5 评论 0原文

我正在实现一个网络抓取服务,它必须能够从 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䟽͵ɘи竒gbR嘱٦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䦎lfʒXﹴƆ�~ⲷ暝=[Dꂃ   QmΒ靔0[|㸇硨뀗x��gt돓墫āꦃᣋh樦塜uΞc܌#jv}pv ,纨E혓ғ.福[wHдD紋ϝഌb؟mGjAfp=<"N�up֊鮓m䈲І焞ꕎz慜ﱽᎤd֔z$y爮0ʉ筤.s0躷 =jⴭђ2猦oM3넲Dɍ圛㑄Z{醨ሓ
椾ᶡhﴲ칌K᜙眕چ꯺:ﯿ
滱䓉ǣE<ꢩ1/JkZ:儝֯=T謌]챐༻쵈ﵭΊؾ缼'얓tV勥뚂Fu뇁g茘쨹լ≂Ԙ)ⷝDNᕷμ텖ਪب*B繤E.w
R攷ո頻C 9Dݮ郚-ҜDڏ=S"ꌄ,RH܂Ԕ田9Ђ觉ՕбE佃q)棃+쾯Ԗ࿣L셄JԎGؓcԒyȈᬻɑA/ЉgΘ꠲AxמƾކE쇒Էt▍>ZꆺA론Ȏ2琢⚋l|픷ij~팈㹼i⵬  ๭눢쑧*
郅⢙J�ӚۊG딈0姕怾˙뺯:flecha_doble_hacia_abajo:зNj8ꗩꕡxa㛝-lշNB8댶⻵O1幋]se+쥧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䟽͵ɘи竒gbR嘱٦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䦎lfʒXﹴƆ�~ⲷ暝=[Dꂃ   QmΒ靔0[|㸇硨뀗x��gt돓墫āꦃᣋh樦塜uΞc܌#jv}pv ,纨E혓ғ.福[wHдD紋ϝഌb؟mGjAfp=<"N�up֊鮓m䈲І焞ꕎz慜ﱽᎤd֔z$y爮0ʉ筤.s0躷 =jⴭђ2猦oM3넲Dɍ圛㑄Z{醨ሓ
椾ᶡhﴲ칌K᜙眕چ꯺:ﯿ
滱䓉ǣE<ꢩ1/JkZ:儝֯=T謌]챐༻쵈ﵭΊؾ缼'얓tV勥뚂Fu뇁g茘쨹լ≂Ԙ)ⷝDNᕷμ텖ਪب*B繤E.w
R攷ո頻C 9Dݮ郚-ҜDڏ=S"ꌄ,RH܂Ԕ田9Ђ觉ՕбE佃q)棃+쾯Ԗ࿣L셄JԎGؓcԒyȈᬻɑA/ЉgΘ꠲AxמƾކE쇒Էt▍>ZꆺA론Ȏ2琢⚋l|픷ij~팈㹼i⵬  ๭눢쑧*
郅⢙J�ӚۊG딈0姕怾˙뺯:flecha_doble_hacia_abajo:зNj8ꗩꕡxa㛝-lշNB8댶⻵O1幋]se+쥧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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紫竹語嫣☆ 2025-01-23 03:38:38

您可以使用 pdf.js-extract

const PDFExtract = require('pdf.js-extract').PDFExtract;
const pdfExtract = new PDFExtract();
const data = pdfExtract.extractBuffer(buffer)

You can use pdf.js-extract

const PDFExtract = require('pdf.js-extract').PDFExtract;
const pdfExtract = new PDFExtract();
const data = pdfExtract.extractBuffer(buffer)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文