Expand description
PDF images.
§Test example
use pdf_min::{Writer, html, writer::Fetcher, image::{ImageSpec,Image}};
struct MyFetcher;
impl Fetcher for MyFetcher {
fn image(&mut self, w: &mut Writer, _name: &str) -> Image {
let mut data = Vec::new();
for i in 0..3 * 16 * 16 {
data.push( i as u8 ); // Red
data.push( (i + 85 ) as u8 ); // Green
data.push( (i + 170 ) as u8 ); // Blue
}
let ims = ImageSpec{ data: &data, width:16, height:16,
bits_per_component:8, color_space: b"/DeviceRGB", other: b"" };
Image::new( &ims, &mut w.b )
}
}
let mut w = Writer::default();
w.b.nocomp = true;
w.font_size = 20;
w.fetcher = Some(Box::new(MyFetcher));
// Draw text with image
html( &mut w, b"<p><b>Bold Text Before Image</b> <img width=32 src=myimg> Text after image" );
let bytes = w.finish();
use std::fs::File;
use std::io::prelude::*;
let mut file = File::create("image_test.pdf").unwrap();
file.write_all(bytes).unwrap();§JPG Test example
// Setup the PDF Writer
let mut doc = pdf_min::Writer::default();
doc.b.nocomp = true;
// Read jpg from file
let file_bytes = std::fs::read("one.jpg").unwrap();
// Use jpeg_decoder::Decoder to get jpg info ( color space, bits_per_component, width, height ).
let mut decoder = jpeg_decoder::Decoder::new(std::io::Cursor::new(&file_bytes));
decoder.read_info().unwrap();
let info = decoder.info().unwrap();
use jpeg_decoder::{PixelFormat};
let color_space: &[u8] = match info.pixel_format {
PixelFormat::RGB24 => b"/DeviceRGB",
PixelFormat::CMYK32 => b"/DeviceCMYK",
PixelFormat::L8 | PixelFormat::L16 => b"/DeviceGray",
};
let bits_per_component = match info.pixel_format {
PixelFormat::L16 => 16,
_ => 8
};
// Use img_parts::jpeg::Jpeg to make DCT (Discrete Cosine Transform) compressed data.
let cdata =
{
let mut cdata = Vec::new();
let jpeg = img_parts::jpeg::Jpeg::from_bytes(file_bytes.into()).unwrap();
jpeg.encoder().write_to(&mut cdata).unwrap();
cdata
};
// Make the ImageSpec.
use pdf_min::{Px, image::{ImageSpec, Image}};
let ims = ImageSpec {
data: &cdata,
width: info.width as Px,
height: info.height as Px,
color_space,
bits_per_component,
other: b"/Filter/DCT",
};
// Make the Image from the ImageSpec.
let im = Image::new(&ims, &mut doc.b);
// Draw the image on the current page.
im.draw(&mut doc.p, 20.0, 40.0, 0.20);
// Save the pdf as a file.
let bytes = doc.finish();
let mut file = std::fs::File::create("jpg_image_test.pdf").unwrap();
use std::io::Write;
file.write_all(bytes).unwrap();