@@ -3,8 +3,6 @@ use std::{net::SocketAddr, time::Duration};
3
3
use eyre:: { bail, Context } ;
4
4
use futures:: TryStreamExt ;
5
5
use ipp:: prelude:: * ;
6
- use itertools:: Itertools ;
7
- use pdfium_render:: prelude:: * ;
8
6
use serde:: { Deserialize , Serialize } ;
9
7
use tap:: TapOptional ;
10
8
use tokio:: { io:: AsyncWriteExt , net:: TcpSocket } ;
@@ -205,30 +203,7 @@ impl Printer {
205
203
} else if content_type == "application/pdf" {
206
204
let data = resp. bytes ( ) . await ?;
207
205
208
- let images: Vec < _ > = {
209
- let pdfium = Pdfium :: default ( ) ;
210
- let doc = pdfium. load_pdf_from_byte_slice ( & data, None ) ?;
211
-
212
- let ( width, height) = if config. rotate {
213
- ( config. label_height , config. label_width )
214
- } else {
215
- ( config. label_width , config. label_height )
216
- } ;
217
-
218
- let render_config = PdfRenderConfig :: new ( )
219
- . use_print_quality ( true )
220
- . set_target_width ( width)
221
- . set_maximum_width ( width)
222
- . set_maximum_height ( height) ;
223
-
224
- doc. pages ( )
225
- . iter ( )
226
- . map ( |page| {
227
- page. render_with_config ( & render_config)
228
- . map ( |page| page. as_image ( ) )
229
- } )
230
- . try_collect ( ) ?
231
- } ;
206
+ let images = Self :: render_pdf_to_images ( config, & data) ?;
232
207
233
208
for im in images {
234
209
let field = zpl:: image_to_gf ( & im, config. rotate ) ;
@@ -309,4 +284,45 @@ impl Printer {
309
284
310
285
Ok ( ( ) )
311
286
}
287
+
288
+ #[ cfg( feature = "pdf" ) ]
289
+ fn render_pdf_to_images (
290
+ config : & ZplPrintConfig ,
291
+ data : & [ u8 ] ,
292
+ ) -> eyre:: Result < Vec < image:: DynamicImage > > {
293
+ use itertools:: Itertools ;
294
+ use pdfium_render:: prelude:: * ;
295
+
296
+ let pdfium = Pdfium :: default ( ) ;
297
+ let doc = pdfium. load_pdf_from_byte_slice ( data, None ) ?;
298
+
299
+ let ( width, height) = if config. rotate {
300
+ ( config. label_height , config. label_width )
301
+ } else {
302
+ ( config. label_width , config. label_height )
303
+ } ;
304
+
305
+ let render_config = PdfRenderConfig :: new ( )
306
+ . use_print_quality ( true )
307
+ . set_target_width ( width)
308
+ . set_maximum_width ( width)
309
+ . set_maximum_height ( height) ;
310
+
311
+ doc. pages ( )
312
+ . iter ( )
313
+ . map ( |page| {
314
+ page. render_with_config ( & render_config)
315
+ . map ( |page| page. as_image ( ) )
316
+ } )
317
+ . try_collect ( )
318
+ . map_err ( eyre:: Report :: from)
319
+ }
320
+
321
+ #[ cfg( not( feature = "pdf" ) ) ]
322
+ fn render_pdf_to_images (
323
+ _config : & ZplPrintConfig ,
324
+ _data : & [ u8 ] ,
325
+ ) -> eyre:: Result < Vec < image:: DynamicImage > > {
326
+ eyre:: bail!( "no pdf support included" )
327
+ }
312
328
}
0 commit comments