mirror of
https://github.com/typst/typst
synced 2025-07-27 14:27:56 +08:00
Remove the PDF embedding feature
This commit is contained in:
parent
cb436f9650
commit
2cd6c13be3
@ -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);
|
||||||
|
@ -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();
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user