如何解决使用带有流的 Node Graphic Magick 将 pdf 转换为图像
背景:
-
我想做的是生成pdf每一页的图像
-
使用的包是 Graphics Magick (gm) https://github.com/aheckmann/gm
-
我有一个包含多页的 PDF 文件。我使用以下代码转换我的 pdf。我使用
stream()
来获取 gm 给我的任何内容。ws
是从readStream
获取流的可写流。ws
是在下一点定义的MyWriteStream
的实例。目前,ws
只需退出终端(阅读我的下一点)。
const fileName = 'file.pdf'; // located in my local directory
const readStream = fs.createReadStream(`./${fileName}`); // create read stream of that pdf file
const MyWriteStream = require('./mywritablestream'); // this is my custom write stream "mywritablestream"
const ws = new MyWriteStream(); // ws takes the chunks from stdout stream
gm(readStream,`${fileName}`)
.command('convert')
.out('+adjoin') // break pdf into individual pages
.stream(function(err,stdout,stderr) {
stdout.pipe(ws);
})
- 到目前为止,我的 mywritablestream.js 如下所示。我不知道如何在我的写入流中生成单个 jpg。所以,现在,我只是注销块的内容。 任何用于从二进制生成 jpg 的指南/提示/参考阅读都将非常有帮助。谢谢。
let stream = require('stream');
MyWriteStream.prototype = Object.create(stream.Writable.prototype,{
constructor: { value: MyWriteStream }
})
function MyWriteStream (options) {
stream.Writable.call(this,options);
}
MyWriteStream.prototype._write = function(chunk,encoding,callback) {
process.stdout.write(chunk); // this is where I log out chunk
callback();
}
module.exports =MyWriteStream
- 我的终端上的日志是一堆我无法理解的胡言乱语,我无法弄清楚如何分解为页面的单个图像。下面是块终端上的输出部分(参见上面的代码),它太长而无法显示所有这些。日志似乎有重复的模式,这表明它是多个图像的连续流。 现在,有人见过这个吗?我确信这是 jpg 二进制文件,它是多页图像的连续二进制流。这是正确的吗?如果这是真的,我如何操作/破坏/组织这个块流以生成单个 jpg 文件?
endobj
9 0 obj
272216
endobj
10 0 obj
[/ICCBased 11 0 R]
endobj
11 0 obj
<<
/N 3
/Filter /ASCII85Decode
/Length 12 0 R
/Alternate /DeviceRGB
>>
stream
!!!?;z!Y>>3D/OH9;Fa%r=BSfMzzz@:O@t5u:BOzzzzzz!!)`D!!*'"!!(J"zzzzzzzzzzzz
!!!!+A7]gl!!!#s!!!"H@rQI1!!!%E!!!!IGB@eG!!!%m!!!!5@V]q)!!!&,!!!!5E`cIJ!!!
&@!!!!5B38;?!!!&T!!!!5@TZc:!!!&h!!!!5E`>q(!!!''!!!95B2hbr!!!''!!!95@T65m!
!!''!!!95A7]glz!!!!C6#q']An?30;f?8iG@>N'+ELFN66Jie6Qf3GDe<^"AH2]1zz,!g6kB
kCq$+B*2jFE_/6AKZ%l7m\=i6UMtmEc5Q(Ch3SHzzzzzzzzFCf]=z6Z6phEbT0"F<EkiFD5>u
GT]q'Aor6*Eb-@K0JP9^=BSfMz!!)Uf!!*'"!!*kZ=BSfMzzzz=BSfMz!!$r3!!#"O!!!+_=B
SfMz!!$Jr!!'K^!!!ki=BSfMz!!":;!!!O_!!'IR@s)g8z!!!-%!!!!&!"&]:!#,DN!$2+b!%
7h!!&=O5!':0G!(?l[!)ESo!*K;.!+Q"B!,V^V!-\Ej!.b-)!/gi=!0mPQ!1s7e!3#t$!3uU6
!5&<J!6,#^!71_r!8@M3!9F4H!:U!^!;cct!=&W7!>>JO!?V=g!@n1+!B:*D!C[#_!E&r$!FP
q@!H%p\!IOp#!K-uA!La%_!N?+)!P&6I!QbAi!SIM4!U0XU!Vuj"!Xo,E!Z_=h!\XU7!^Ql\!
`T5,!bVRS!dXp$!fd>L!hoat!k&0H!m:Yq!oO.G!qcWq!t,2H"!Iau"#pBM"&B#&"(hXU"+C?
0"-s%`"0Ma;"31Mm"5j:J"8N'(";:n\">'a<"@rYq"ChRS"F^K4"I]Il"L\HO"OdM4"RlQn"U
tVT"Y0a;"\Al""_S!_"bm2H"f;I2"iUYq"m#p]"pP8I"t'U6#"Sr$#&4?h#)ibW#-S6H#13Y8
#5&3+#8mas#<`;f#@RjZ#DNJO#HS0F#LWk=#P\Q4#Tj=-#Y#)'#]9p"#aPar#egSm#j2Kj#nR
Ch#s&Ag$"O?f$',Cg$+^Gh$0;Kj$5!Um$9\_q$>Kp!$CD1'$H3A-$M+W5$R,s=$W.:G$\/VP$
a:#[$fMKh$k`su$ptG.%!;u=%&XNL%+u'\%1Nan%6tA+%<N&>%B0fS%GhQh%MK=)%s7.@%Y"t
X%^lkq%dji6%j_`P%pfcm&!da4&'kdQ&.&mp&47";&:P1[&@iA(&G6VK&MXkn&T&,=&ZQGb&a
0i4&ge5[&nDW.&u-)W'&sW-'-e/X'4V].';Q;\'BKo4'IOSd'P\>?'Wi(p'^uhM'f6Y+'mLI_
'tk@?('>=!(.f9X(696:(=j8t(EF;X(M+D>(TnS&(\\ac(djpl(lB06(tBK")'Bec)/C+P)7L
L>)?^s.)GqDs)P.kd)XJCW)`o!K)i>T?)ql85*%Dq+*.&[#*6]Dq*?H4k*H3$e*Q&oa*Yoe^*
bla\*ki][*to_[+))g]+28o_+;H"b+D`0f+N,Dl+WMXr+a"s%+jM8.+t"R7,(_#B,2FIN,<-o
[,EsFi,Ocs#,Y]P3,c`3E,mbkW-"nTk--%>+-7:-A-ANqW-Klfo-V5\3-`\WM-k.Rh-ugZ0.+
B[M.6&bl.@hp7.KV(W.VL<$.aKUH.lJnl/"J3</-RRb/8d#5/CuH^/O:t3/ZUJ^/f$'5/qP^b
0((A<03U#k0?5aF0JtP#0VgDW0bQ350nM-k1%I(L11N)/1=S)h1Ia0M1Uo721b1Co1nHPV2%q
iA22='+2>oEl2KC^Y2X*.G2deS72qL#'3)DSn364)`3C5`U3P7BJ3]9$@3jLg84"WO04/tC+4
=<7&4JY+"4X*$t4eY$s4s3$s5+k*t59W7"5GCC%5U/O)5c-g05q,*76**B?681`H6FB/S6TRS
_6bl(l6q9Y&7*\4679)dF7G^KX7V>2k7dro*7sdbA8-MOW8<HHp8KCB48Z>;N8iK@j9#O@292
eKP9B&Vp9QEh<9`e$]9p8<,:*iYQ::F"!:J"?G:Yehp:iT=D;$Klo;4CGF;DD's;TD]L;dWJ'
;ta0W<0(#5<@Cji<PhcI<a8\)<qfZ`=-?YC=>*d)=Nahc=_V$K=pJ53>,GKr>=Db]>NK*I>_Z
M7>pip&?--Ck?>Nr]?OpLP?aF,D?rpa9@/OG/@A73'@S(%!@dmkpA!^]kA3a[iAEdYgAWgWfA
j'ahB'<kjB9QumBKp0rB^BG#Bprc+C.N*3CA2L>CSttJCfbGVD$XudD7ONsDJO..D]WhADp`M
SE/&>iEB8*)EU\!AEi*mYF'WjsF;/h9FNekUFbOtsG!:)=G5-8^GI)N+G]%cMGq+)rH09KCHD
PrkHXhE>Hm*lgi,TK>IA))jIU[cCIj9GrJ)u2NJ>e#+JSTh]JhVe>K(O[sK=Z^VKRea9Kh$it
L(8rYL=_2BLS'A*LhV[jM)1!VM>iBCMTUi2MjB;!N+7ghNA6E[NW5#NNm<\DO.MF;OD^02O["
u,OqEk'P2ha#PI?\uP_t^tQ!]fuQ8Fo"QO9(%Qf+6)R(/P0R?3j7RV8/?RmNUJS/e&USG/RbS
^O)pT!"\+T8T?<TP:(OTgtfbU*cV#UB[K:UZS@QUrT;kV5^=1VMh>MVf&EjW)BS4WAgfUWZ8%
"Wrf>EX6H]jXO+(;XgkMcY+`$7YD]UbY][28Z!aifZ:hL?ZT,:oZmE)L[1fs*[K3g^[d^b>\)
=c!\C%iZ\\bp>]!].&];N:b]UQSL]oTl7^4a6#^O!Zf^i7*U_.UUE_I(17_cXh+`)4Iu`Cn1k
`^[tca$Ib\a?@VWaZ@PSauIPQb;RPPbVdVPbr*bRc8NtVcSs1[coKIad6,gjdQc0rdmV[)e4J
05eP=ZBelC;Rf3HqcfOWXufkf@3g323IgOS&_gkso!h3Qn;hP/mVhlkrri4\);iQU:[inNL'j
6PcIjS\+mjpgI=k9&ldkVDA7ksjpal<EQ8lYu1em"Xm>m@<Smm^2FJn'(9'nE'1\nc/0=o,7.
toJH3Wohb><p20O#pPS_`po+!Jq8`>5qWIa"r!3.er@.]Vr_*7Gs)%f9~>
endstream
endobj
12 0 obj
3092
endobj
13 0 obj
<<
/Filter [ /RunLengthDecode ]
/Width 1
/Height 1
/ColorSpace 10 0 R
/BitsPerComponent 8
/Length 14 0 R
>>
stream
☻���
endstream
endobj
14 0 obj
5
endobj
15 0 obj
<<
>>
endobj
16 0 obj
5
endobj
17 0 obj
<<
/Type /XObject
/Subtype /Image
/Name /Ma0
/Filter [ /RunLengthDecode ]
/Width 595
/Height 775
/ColorSpace /DeviceGray
/BitsPerComponent 8
/Length 18 0 R
>>
stream
���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
endstream
endobj
18 0 obj
7263
endobj
19 0 obj
<<
/Title <006D0061006700690063006B002D0044004D0046003400660044006C0047007800590051004C007100700033004200700071006D006F0056005A00780076004800460043005F00450055007800540000>
/CreationDate (D:20210308071858)
/ModDate (D:20210308071858)
/Producer (https://imagemagick.org)
>>
endobj
xref
0 20
0000000000 65535 f
0000000010 00000 n
0000000059 00000 n
0000000118 00000 n
0000000300 00000 n
0000000384 00000 n
0000000402 00000 n
0000000440 00000 n
0000000461 00000 n
0000272877 00000 n
0000272899 00000 n
0000272934 00000 n
0000276130 00000 n
0000276151 00000 n
0000276298 00000 n
0000276316 00000 n
0000276338 00000 n
0000276356 00000 n
0000283812 00000 n
0000283833 00000 n
trailer
<<
/Size 20
/Info 19 0 R
/Root 1 0 R
/ID [<6e15ce8c3f67beed160a0b044afd7b81320bf3f81a210c09190aae41a36373f8> <6e15ce8c3f67beed160a0b044afd7b81320bf3f81a210c09190aae41a36373f8>]
>>
startxref
284122
%%EOF
- 我对 Node.js 中的流仍然不熟悉。我迷路了。在这里,据我观察,
stdout
回调中的流gm.stream()
是 PDF 中每个页面图像的连续二进制。因此,从stdout
(stdout.pipe(mywritestream)
) 管道传输的我的 writestream 似乎必须将二进制文件分解为单个页面的图像。 我在正确的轨道上吗?如果没有,还有什么其他方法可以在 pdf 中生成每个页面的图像
我会重视任何输入、指导或参考。提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。