Remove the PDF embedding feature

This commit is contained in:
Laurenz Stampfl 2025-07-22 11:52:47 +02:00
parent cb436f9650
commit 2cd6c13be3
5 changed files with 43 additions and 55 deletions

View File

@ -471,7 +471,6 @@ display_possible_values!(DiagnosticFormat);
#[derive(Debug, Copy, Clone, Eq, PartialEq, ValueEnum)] #[derive(Debug, Copy, Clone, Eq, PartialEq, ValueEnum)]
pub enum Feature { pub enum Feature {
Html, Html,
PdfEmbedding,
} }
display_possible_values!(Feature); display_possible_values!(Feature);

View File

@ -117,7 +117,6 @@ impl SystemWorld {
.iter() .iter()
.map(|&feature| match feature { .map(|&feature| match feature {
Feature::Html => typst::Feature::Html, Feature::Html => typst::Feature::Html,
Feature::PdfEmbedding => typst::Feature::PdfEmbedding,
}) })
.collect(); .collect();

View File

@ -237,7 +237,6 @@ impl FromIterator<Feature> for Features {
#[non_exhaustive] #[non_exhaustive]
pub enum Feature { pub enum Feature {
Html, Html,
PdfEmbedding,
} }
/// A group of related standard library definitions. /// A group of related standard library definitions.

View File

@ -272,62 +272,53 @@ impl Packed<ImageElem> {
.within(loaded)?, .within(loaded)?,
), ),
ImageFormat::Vector(VectorFormat::Pdf) => { ImageFormat::Vector(VectorFormat::Pdf) => {
if engine.world.library().features.is_enabled(Feature::PdfEmbedding) { let document = match PdfDocument::new(loaded.data.clone()) {
let document = match PdfDocument::new(loaded.data.clone()) { Ok(doc) => doc,
Ok(doc) => doc, Err(e) => match e {
Err(e) => match e { LoadPdfError::Encryption => {
LoadPdfError::Encryption => { bail!(
bail!( span,
span, "the PDF is encrypted or password-protected";
"the PDF is encrypted or password-protected"; hint: "such PDFs are currently not supported";
hint: "such PDFs are currently not supported"; hint: "preprocess the PDF to remove the encryption"
hint: "preprocess the PDF to remove the encryption" );
); }
} LoadPdfError::Invalid => {
LoadPdfError::Invalid => { bail!(
bail!( span,
span, "the PDF could not be loaded";
"the PDF could not be loaded"; hint: "perhaps the PDF file is malformed"
hint: "perhaps the PDF file is malformed" );
); }
} },
}, };
};
let page_num = self.page.get(styles); let page_num = self.page.get(styles);
if page_num == 0 { if page_num == 0 {
bail!(
span,
"{page_num} is not a valid page number";
hint: "page numbers for PDF start at 1"
)
};
// The user provides the page number start from 1, but further down the pipeline,
// page numbers are 0-based.
let page_idx = page_num - 1;
let num_pages = document.len();
let Some(pdf_image) = PdfImage::new(document, page_idx) else {
let pages = if num_pages == 1 { "page" } else { "pages" };
bail!(
span,
"page {page_num} doesn't exist";
hint: "the document only has {num_pages} {pages}"
);
};
ImageKind::Pdf(pdf_image)
} else {
bail!( bail!(
span, span,
"embedding PDFs is currently an experimental, opt-in feature"; "{page_num} is not a valid page number";
hint: "enable the corresponding feature to try it out"; hint: "page numbers for PDF start at 1"
hint: "convert your PDF to SVG instead" )
};
// The user provides the page number start from 1, but further down the pipeline,
// page numbers are 0-based.
let page_idx = page_num - 1;
let num_pages = document.len();
let Some(pdf_image) = PdfImage::new(document, page_idx) else {
let pages = if num_pages == 1 { "page" } else { "pages" };
bail!(
span,
"page {page_num} doesn't exist";
hint: "the document only has {num_pages} {pages}"
); );
} };
ImageKind::Pdf(pdf_image)
} }
}; };

View File

@ -198,7 +198,7 @@ fn library() -> Library {
// exactly 100pt wide. Page height is unbounded and font size is 10pt so // exactly 100pt wide. Page height is unbounded and font size is 10pt so
// that it multiplies to nice round numbers. // that it multiplies to nice round numbers.
let mut lib = Library::builder() let mut lib = Library::builder()
.with_features([Feature::Html, Feature::PdfEmbedding].into_iter().collect()) .with_features([Feature::Html].into_iter().collect())
.build(); .build();
// Hook up helpers into the global scope. // Hook up helpers into the global scope.