@@ -3,8 +3,6 @@ use std::{net::SocketAddr, time::Duration};
33use eyre:: { bail, Context } ;
44use futures:: TryStreamExt ;
55use ipp:: prelude:: * ;
6- use itertools:: Itertools ;
7- use pdfium_render:: prelude:: * ;
86use serde:: { Deserialize , Serialize } ;
97use tap:: TapOptional ;
108use tokio:: { io:: AsyncWriteExt , net:: TcpSocket } ;
@@ -205,30 +203,7 @@ impl Printer {
205203 } else if content_type == "application/pdf" {
206204 let data = resp. bytes ( ) . await ?;
207205
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) ?;
232207
233208 for im in images {
234209 let field = zpl:: image_to_gf ( & im, config. rotate ) ;
@@ -309,4 +284,45 @@ impl Printer {
309284
310285 Ok ( ( ) )
311286 }
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+ }
312328}
0 commit comments