【发布时间】:2021-11-08 09:14:24
【问题描述】:
我有一个数据库,其中包含一个包含以下字段的表
- 身份证
- 数据
- 时间戳
- client_id
这是一个非常古老的 Web 应用程序的一部分,该应用程序已不再使用,但仍被托管,以防我们想返回以仔细检查信息。字段数据当前是表示文件(xml、html 和 pdf)的字符串。当记录是pdf时,我正在尝试获取字符串 以pdf格式打开。我已经完成了:
- 将字符串复制到记事本并保存为pdf。这会打开文件并匹配页数,但页面看起来是空白的。
- 我使用https://www.base64encode.org/ 之类的网站将数据编码为base64,然后我使用https://base64.guru/converter/decode/file 之类的网站下载文件,这与将文件保存为pdf 格式完全相同显示相同的页数,但全部为空白。
我想知道为了让这个 pdf 显示他们的内容,我会缺少什么?
在理想情况下,我想在本地运行一个脚本来生成这些文件,然后将它们上传到 S3 存储桶,因为我们想停止这个 Web 应用程序所在的服务器
示例字符串:
%PDF-1.4
1 0 obj
<<
/Title (þÿC2B2-3DA7-9410-24DF::BF25-177E)
/Creator (þÿwkhtmltopdf 0.12.1)
/Producer (þÿQt 4.8.6)
/CreationDate (D:20150814130713+10'00')
>>
endobj
3 0 obj
<<
/Type /ExtGState
/SA true
/SM 0.02
/ca 1.0
/CA 1.0
/AIS false
/SMask /None>>
endobj
4 0 obj
[/Pattern /DeviceRGB]
endobj
6 0 obj
<<
/Type /XObject
/Subtype /Image
/Width 594
/Height 72
/ImageMask true
/Decode [1 0]
/Length 7 0 R
/Filter /FlateDecode
>>
stream
xœíÌ1
0ü›&vÒ
hÒ2µI¥R©T*•J¥R©T*•J¥R}©nZœ(ñ
endstream
endobj
7 0 obj
48
endobj
8 0 obj
<<
/Type /XObject
/Subtype /Image
/Width 594
/Height 72
/BitsPerComponent 8
/ColorSpace /DeviceRGB
/Mask 6 0 R
/Length 9 0 R
/Filter /FlateDecode
>>
stream
xœíÕ1
€PA||)h t€äíLNÀu»öc™™™Mßvûý†™™ÙS=33ëì©Þ s©ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@‡êСzt¨ª@Ç«zÌsZ£Å
endstream
endobj
9 0 obj
315
endobj
11 0 obj
<<
/Type /XObject
/Subtype /Image
/Width 634
/Height 100
/BitsPerComponent 8
/ColorSpace /DeviceGray
/Length 12 0 R
/Filter /FlateDecode
>>
stream
xœuX \SǺŸoÎI"Ö-Å´O%D÷%„¢ ¸±/BØ!a_ÃHwq—MQ[ë˵mmµµî·j«Õ.¶µÚÖwkûêmõ¾[Iï›$PÛþ^Îo`æœ93ß|ßþßBÈ ÒD8B¢â¦Í|>äèV¼ÓŠ%3¯¸.·%hÉ5¬? d¤%_Ÿ¥Óo[xŒÙwxÏ7ou—¸ââ†íñù%UÆ'’çŽb{>¶—åduÙºŸ¹¶ëK²Œåd^DÞƒm·Ò¬½4mÊ"l_'\ ÇWÀd""D´C¤Â;ãìÿ¹I.ÅX±ÿ¾"ƒû¢‰¢«
ÖŠ
'Á„ôYÅD $W²ƒ7{Ø3>@Ôƒ
7|]Dt8š7¶9"!ÏáäY@!UpRÀâ¬Àÿ à¼ô¼¯ð?ð¬õySN„>|FVQÏ“}"‰µÁjæ{{¥ÔHkŸÜ§éÖ½ô[šÎŒ‹s~sHÈ`\ƒ‚S‚
” î²µ¨½™zUS¯&˺@¸
B>ŽM…]IzßÜ{|$ñ"Äc¦ÆW)KÄ^b/OµÚGã«ñUÍ”»È•>^žJw‰X&)w¡SªüÒ3Š?17øùçl8V] •ñ û’µÚä˜ðЊœ˜¸)ÓÚ¶õŽÞT??¤°èpcdduõMåõÊ*fqrßÞ
ç•‘ „8{Ì$³Í¯tÇùå8—ŠÙ¤ÆÙñÂû2-Ì ,+ÙpkÕJœSRºáÖÊÕF}ξ½zÝÔi±ñ…/èôtJwƒ9<´£óÉ¨ÝæÆùí½NgÍ
æ«rS~ž¿ÀÜx™¼W~™ R\¹Ø‹M(UI©ÊMƒÿ”\BÉOG´Úè.ÌX½v7èuè»Ö(áʧÜðÞ‹ø~7Æõ
®@ŽƒÉ˜ù.r™T)eÆ¢«$X…³SRÊŽ$&ÔÎYQ–°Ô»–8©Sû@Vöyk½´%<Bëϡ8¢¼ï
EÙF”ªdJ)s€‹Ffw‡T©VI!ñ«¯ncçO‹®×ø]º$Š~̶NK™4žÉ–.k¥7²A†c@DüŒˆxѦ”*ÐþUñ?›-ïšL\°™¾i
õX
t#ö>„3º‹ Û‘Ø[îF£˜E©}tkR†0g†9sZ¬D„8;"$µa£¸¢ììçUµ•Uwß6TA]\lçíô´/:ãâ©—¥};Àašñ„lÞm’ë5Æs`¹YSëÀ÷1zr,ñÆ}è΂VÛ ¡a>•)db;4r10×*"hк²ŠÙsÅÅËÎWWZ,P”ÿB梅‹W
ÿZ–îLWÅ'Œœb2vNBL,X¹æ»ùÉ:“Ò=Òÿ4gÉѽ4´;;‹Ø£I·
ñá©Ûã§’1PÒ-ž“*""µ5é7fŒå>’Àìàë(>àð»CÑúƾÿÀd^ƒoŽ#DããÀ±ÄÎj7Êe¼å..rï 29ýcsûhW×ÑîJ¹Ü…{ç©qDtFÔ‰íp4N!c,ò¹5ÙIJ<¦ûék’¨§Àzû¾ˆ»k/öµ!i`G1d;ö”FÊï
ž[UÓ~}+
^{ D=–±ÛJJýg-3ßå~´xÔåææ¾Î}Þ?û#ûì
%0ß DùG&Ë[f3VÏßéuõô*ø»è‘}}ü)ì;œ<GÂŽÃhgÀ¶ÆWªÆ +O@DZM££¢¢7n~Sø Fþ³u=¬YwWÔ×ÑufÕ¹ŽÎ˜8…õºwu€¨éIgZÒ‚k;-:O<Ð,ÇÂþDVÔAâ<þôèõ÷÷™–…ÌŸÒ¼lÿ÷kWÉÍÓ„î‹ÕµU†sg²³\áâýºú˜˜¶í§Oéh‹‹YÖt°½M°³´·§¥¼Épjîû‘ÿg–3ÎûrXŒŸšÛE&¡vªr–°Ï/å
oj>Ð×½ÂÚ›hj
«ƒšÚkWŒõ`4~p½¦š®½ÜÑoMûÅ]q±11ÛÛÎŽ1Û:ÛÛ…G‚¥½CÑ«ÐÃð€R*E¾—2ÊI¡£èsûj¬÷3¬ß× Ó÷ŠDÈöõtÝßgm´.Ç×ñœgçD“
K6<ݶ.å†[j¸•–ÓƒÈGò¦¾ÀÕÇ7ÞÂ7F°¨Úˆë•37€“25ª‚Þ’ÍðÙw+–ClÜZ(n±üu;2Ò‘õŽ
ciKÔå†Ë
‹½mCé%HNjíJL@«nâÈ‘¶\iç¡H“ [vk9¬ažö`vªÀ‡^³7çç³ÕPÛóXbGüï¦yyØìbéK*<üfårXÖô³°ªe¤§eü]h¡1ÖWТÊêË”V@>$&tµkµ8+*~»-«:Ö«VðÛ…¡&aŸ)
rR^€½\±×ì5ˆÅBÅ&ÍS¿˜¬¿n¥íÜhK•õ6ϵbïpäº7°·3öVIûSª?Õq
Pc|ï#ƒÁ×¹. w´®™Le¥ÿØš²‡Ån)â°q¨Á†=5zjìÜÌhËÕ,WŽ”»Ø/›Flë¦rl
îaBâ×÷òÚ`ÝšO7W‚‚̹¹‡÷çä$']8¯×ù¨p~½³±yÞ|0AUåéƒùy[:7hqÁË/æhütúúí©ZX¸ØXîãë?+*ºäå¼|ðÓää4íLJ^¼ˆEf;Ú€¶rlÅ,¦œ§ƒÖGÚ×ÎrÍ»xz¸º¸¸zxºÈùðwwe¤èú;û±lû
f"5K5èlý®µFcìîÔðë&ªX!䈉eB=t~ÖÌ‚ôø%dv‚ºNá©î'Cæ1•
±È¨p°9“eð‘r™bF£¶ t".ÎÊ.Ù•™
+–?øÂ®iÀj4{^+(P
ƒŒi“?yM§Ÿ2S7iÊÒÄU»ÒRÀT9^ðÜäf¾6õ쎒³ü³
*O Ä5µã.nBË<û„›œýå¥v¡t¨ˆ§Å3Zm°€ìÌZH«ž=gýò¤äÁuÁóVVÄÄxù€ž¬™3nèü|AXiJÿ±9<,6¶ÚêCo¬
à¹ÖÑLkp6ŽFz@5:–±™¥mÝ¿sìD±mõï»èù¾¾nvPacä07ܶCÅ®ôHJîVBtWbüÒäá}QOfö[†Øøñc2³—-*ú¶õpLÔæUÑ‘ùºjüô€õE7z@Ͳ®—ãR;°,PH–;(׎c´‰a6oŽŠñð**<p¼´Ä]W¶ 0`Owt¤§@IÙ±SHô&ˆ‹]½,"œ“4j·1¼üýcb’´›Óƒƒ|Ôñ±“¦xxN˜0+~-F75¥µ `‚ÄøpGÑm?›°VÁO°Ð$g …¦¿qm½íú-Õˬ¢Â÷3xÊ5ά»—ÄöΞg]Ïø/ù³p!WøaèPáç\á¢é·´l.ÐrÅPÀÍé½ÈigZöã(…‰“2NëCă
œÒRJ_~JaÖr-Y¨0ÿ"1mzn'æNΦçÜìw‚Œm&›z•öËl‰ÔF<W^ñν*Cá«ÓeFd󎪨oío¥Ï
ÛÚl뮣°e›ÐË}‚gÐø—®W««Ñz<³Ñ×EÇ™×pß‹Ô*úºQ¨‚‡#EnÛÊO 5FŒþcä)Q¢5Ô~ìp–ް/U*ñ±[#—°ãc(¯¸}«²
_Þ2jcâöíÅ`ÅÇïÝK3„«{^ØÝ
“@ªÝ»:º„OÅOšQõ7<¾ùmÅŠææßX¬²qîG87’ÞmÊtÞ¿~'P5žÆ±/¼”°Íœ±d¢wTô¶
IZ£¿¿^g¾h0Ì›_¹ý^Wµ¥¨4 ÐÙY;’ -㸑…úrnPÜúè¨Ø¸Õåi*UqÉ[IÚI^)éoW@ÊHmhML†èÈÎ-¸ÉÐSÍÈøƒD'É2•q…ÒM"–öÛ(î×!j5Õøzp²~™‡&s‹‡ ÿî蜕šjx§¢|Ô997–·À«Ç ü‹Ê¬EvV÷z4–ŠNæuíÆN›²bÕÇ›*As¡³ã_FXýé'`í ÍË=]k,+=t8?ù03ß`ä1Ë|¨0=¶nm …–óÜ)QÑ“6Ñ¢\†:]ßcîúz™n×l^âœe#]ÔJ±Ï7<.€™Íh™a\ŽÞæÊƒÓ3KÌé*5øùê³[¾¨¯ƒ„ý.A²v°ß˜™>RÒvmÒ¦$/¥{3fªæW”¯ÞT[3/pM÷‹…êaëæóÂ*Cï˜êÀPõòþ²
¶Ž\Ç(´ÏÌÕàÀ‚×@Zø àGYÊáWóôé11·á„µ~¾ù¹-—åAs÷…ÔšJ}7¦§&¯‹‰‚ôŒ6“^7Ë¿ àxn]ýk#9r#é‚>ç)g”2Ü@2´9…mCÔ|NoY7©ªvŸ¯©6®®®Q9"!~SwtRîŽÄ9Aaôz±LÐØôñ·ME…§Û–Dää¼ñ¼^2ùlœwl_ýÁ®¬äHFëKhfqƒx
F'W¿Ÿ¶©IvìdJùJ!•pù÷îqto‹µ”ŽVÃÇza3”Ïç,.8•å‘\“#¶ÁUÜŸÝqAO;5ŽôÊ=%NضSsÊ‘÷ú½yóŠ"–46]ÿ¨—²hASqð\¨®<sº¶:6+»½3#3-mÊIOHHZ¹6. 1~íêÄÞߤ89#sÙÛÅ¥PZò¶);sòDm’áxQ!—XÚW'/…„Äõx¤ˆ‹m¥'ÍŒþ£b—7EFBtúh½0‘–ˆ3™¾u¶cSnÛ\HbËO~𒢆1!ÁsUªqnÓ§ÆÇêÇ4ûúÑ%Ÿ]{ÿïÇLÓjÍ
];ÏxæìÖ¶…K¼ÊNenÂb®ÇñÅýkc_µœá%‹_!°Y˜ášüæäés–úùzª…ü–ÃÜÆÞa~†åˆ'O,ÚÊÏ`R •Õ‘xùöó^vH©¯_aQ󘬄ØÓ§OO̳¬¨Ð_CgyùêÁCaÛ¶^8ûígßíìˆ8xèýŒËXÆa§|•Ú.Ö$v$cÒû—W_…ĸÎ@'U@ŽÆ€
w+»å¥ä$€º!³ƒÊWe[¼Ùh3h4A3Ì1r #Ü¥ÑzÆ ÅB÷fþqŒÑl§d¹Z%uˆB\…ýËØ¾3x9¾4”Ÿû²ª²ºæREn~@Hã+ññ•_œ*7Ø>:¤MŒŠ.µ}v°âqé•îÞÛ7êêU3t'/ݽæhoï]¯1^„ÿÍóó©eYQÈä)Ú"%îYÑ~úg•z90‹Y¹1ÊÓòŠ·îÔÔªïž++3&$v”FEO˜UÚžoKŒÝÖ[¢Ï»Ã6LŒü5£||uÖßÒf̨¯EÏTöMç¬â
Äÿ)Ï\VÉú…ís—x@³HË”j±#Ù¶ÊÊßc¤§Ïy9÷T„1q›"£aÑžW¢#'xåæÓ_.)5BªvßFmä•…‡…ådí|1W7üòeieÕ%&TQ›!¡¾~—äíÓå}çŠþ÷º“’!b Z»¥ï?ˆjdø_¿olùÿ?`0ØŠèùµ¡Ã³¾ý ÅMè `YÄñÃw$Å*}§}ª>•¸É6ÒÓ¿@<Kéø>2–GÒyÑòzÒ…¥›n%røç<HNÀrˆ7bÞhéQÒ
GH#ßDNˆæ‘}¢#ø6–™¤ETHÄÈ ~¶G’ãTAnòlÿ„åñá/W>„ó§HŽÙÆýHºù…D'‘“vþ>öJôÜgÄS<ˆñ:|VFvb9†¥K6–åX"°è±`9ÀMAÛËH–Bº´rï7º“(èK$ˆ."3ør´Û>N%|O¶àšg’(²ž\%@³ðŠ…tØ7á!Oh£è?¹‰ÜbNǵs{¹cÜ—ÜC^ÂOàùùwECE‹EE_‹‹ÇˆÃÄfññ‰»¤DÒ,ùpdPÈ èAeƒ>v9y;%:58wúpðàÁYƒ—ÙãAÉ\vúv´þü“-îràìçaGbFquÔ¹§îóOÕEd2êk{]Œ÷cõa$žbý‡¥
‹Y‚™:äc+–è±VMŠI1DlH%>-#¥Øo&rÊt¼fà¥Æ2Ëvµ}þ0â”§Fd¥Š”£œ†W횊£—cÉÁ§zl•á,yø´ßÊÁ;¥8§Ë4g!æÑPIâðï»ÿC%˜ð
endstream
endobj
36 0 obj
4859
endobj
34 0 obj
<< /Type /Font
/Subtype /CIDFontType2
/BaseFont /Roboto-Light
/CIDSystemInfo << /Registry (Adobe) /Ordering (Identity) /Supplement 0 >>
/FontDescriptor 32 0 R
/CIDToGIDMap /Identity
/W [0 [440 620 511 556 545 545 319 241 702 222 551 512 334 208 558 652 704 650 644 671 858 564 630 264 523 611 592 594 546 588 222 486 531 879 608 502 477 748 544 550 550 550 550 550 550 550 550 550 394 550 550 316 471 323 328 284 550 550 550 237 ]
]
>>
endobj
35 0 obj
<< /Length 777 >>
stream
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
2 beginbfrange
<0000> <0000> <0000>
<0001> <003B> [<0041> <0063> <006F> <0075> <006E> <0074> <0020> <0048> <006C> <0064> <0065> <0072> <003A> <0046> <0055> <004E> <0044> <0043> <004F> <004D> <0045> <0052> <0049> <004C> <0050> <0054> <0059> <004A> <0053> <0069> <006B> <0061> <006D> <0042> <0073> <0076> <0077> <0068> <0062> <0031> <0030> <0033> <0036> <0037> <0039> <0032> <0035> <002F> <0034> <0038> <0028> <0079> <0029> <0066> <002D> <0067> <0070> <0024> <002E> ]
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
endstream
endobj
10 0 obj
<< /Type /Font
/Subtype /Type0
/BaseFont /Roboto-Light
/Encoding /Identity-H
/DescendantFonts [34 0 R]
/ToUnicode 35 0 R>>
endobj
2 0 obj
<<
/Type /Pages
/Kids
[
5 0 R
]
/Count 1
/ProcSet [/PDF /Text /ImageB /ImageC]
>>
endobj
xref
0 37
0000000000 65535 f
0000000009 00000 n
0000023948 00000 n
0000000223 00000 n
0000000318 00000 n
0000008502 00000 n
0000000355 00000 n
0000000560 00000 n
0000000578 00000 n
0000001075 00000 n
0000023809 00000 n
0000001094 00000 n
0000004216 00000 n
0000004237 00000 n
0000008431 00000 n
0000017155 00000 n
0000013032 00000 n
0000008452 00000 n
0000008859 00000 n
0000010796 00000 n
0000008623 00000 n
0000008839 00000 n
0000010817 00000 n
0000011026 00000 n
0000012309 00000 n
0000012560 00000 n
0000012288 00000 n
0000013174 00000 n
0000013437 00000 n
0000016203 00000 n
0000016536 00000 n
0000016182 00000 n
0000017295 00000 n
0000017557 00000 n
0000022528 00000 n
0000022980 00000 n
0000022507 00000 n
trailer
<<
/Size 37
/Info 1 0 R
/Root 17 0 R
>>
startxref
24046
%%EOF
【问题讨论】:
-
您需要将此保存为二进制数据,而不是字符串。
-
@TilmanHausherr 我在数据库的表结构中添加了字段的屏幕截图。能否请您解释一下如何将其保存为二进制数据
-
如果文件保存为 base64 则没问题,但您需要在解码时将其保存为二进制,而不是字符串。请附上您正在使用的代码。
-
您还有将文件存储在数据库中的代码吗?还有那个老程序的数据库连接参数?
-
确实,将二进制数据作为文本处理总是很有可能损坏数据。此外,您必须确保使用相同的编码将二进制文件转换为字符串,就像将字符串转换回可用的二进制文件一样。你说你可以在 web 应用程序中看到 pdf。所以让我们假设数据没有损坏。因此,要取回二进制 pdf 文件,您必须使用与 Web 应用程序相同的编码设置检索字符串并将其存储到文件中。
标签: pdf encoding character-encoding pdfbox