mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-02 14:16:56 -06:00
Export: PDF, EPS, SVG, EMF, WMF and image exports warn about type that doesn't fit its frame
Print and Print Preview name the area type and type on a path that prints without the text past the end of its frame (#2308). The exports that draw type gave no such warning: a PDF, EPS, SVG, EMF, WMF or raster export of a frame too small for its text answered with no warning about it. These exports now add the same warning, with "isn't drawn in the export" in place of "doesn't print". Each export counts the visible objects that it draws. Those are the objects on the pages or artboards it writes, or all of them in an EPS of the visible art and in an SVG without chosen artboards. A PDF leaves out layers that don't print unless includeNonPrinting or createLayers is set. The objects are found with the walk that fonts::printed_type runs for Print, and typecmd.rs builds the message with the code that builds Print's. A .ai file keeps the whole text in its editing data and gives no warning. Docs: docs/mcp.md (Fitting area type), docs/target-app-parity.md.
This commit is contained in:
@@ -385,7 +385,7 @@ pub fn encode(doc: &Document, format: &str, p: &Value) -> Result<Vec<u8>> {
|
||||
|
||||
/// Like [`encode`], also returning the encoder's warnings (PDF and SVG: options not applied yet,
|
||||
/// features approximated or left out; every format that draws type: fonts written in the fallback
|
||||
/// font).
|
||||
/// font; PDF, EPS, SVG, EMF, WMF and the raster formats: type that doesn't fit its frame).
|
||||
pub fn encode_with_warnings(doc: &Document, format: &str, p: &Value) -> Result<(Vec<u8>, Vec<String>)> {
|
||||
let f = super::writable(C, Some(format), None)?;
|
||||
encode_all(doc, f.id, p)?.single(f)
|
||||
@@ -529,6 +529,8 @@ fn encode_files(doc: &Document, f: &Format, p: &Value) -> Result<Encoded> {
|
||||
if enc.files.is_empty() {
|
||||
return Err(bad(C, "the document has no artboard"));
|
||||
}
|
||||
let regions: Vec<Rect> = enc.files.iter().filter_map(|(b, _)| b.and_then(|b| doc.artboards.get(b))).map(|a| a.rect).collect();
|
||||
enc.warnings.extend(crate::cmd::fonts::export_overflow_warning(doc, &doc.layers, Some(®ions)));
|
||||
if format == RasterFormat::WebP && o.lossless == Some(false) {
|
||||
enc.warnings.push("lossy WebP isn't available yet: the file is lossless (exact, but larger)".into());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user