Files
Mike Kaganski 8ebe1e51ea Related: tdf#166627 Write font-face-src for each mention of embedded font
Before commit e61a179b4f (tdf#166627: embed
fonts everywhere we emit font data, 2025-05-23),  embedding of fonts only
happened during export of content.xml, to avoid complexity of shared data
between different instances of SvXMLExport, created separately per stream.

The said commit introduced a way to pass the data between these instances,
and embedding now is done by any SvXMLExport instance  that needs to emit
font-face-decls. Currently, only the first declaration of a used embedded
font gets its font-face-src.

But this is wrong, when the same embedded font in another stream, where it
is also used, does not reference its files.  This patch allows all streams
to emit font-face-src for all fonts used in it. File duplication in ZIP is
avoided by passing the embedded file information between SvXMLExport, with
font file hash and its path in ZIP, instead of font names.

Change-Id: I7a62e50c086d8741dbc8aadf61d0f008bad916ff
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/185720
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2025-05-23 23:58:36 +02:00

97 lines
3.3 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#pragma once
#include <com/sun/star/uno/Reference.hxx>
#include "importfilterdata.hxx"
#include <comphelper/errcode.hxx>
namespace com::sun::star {
namespace beans { struct PropertyValue; }
namespace frame { class XModel; }
namespace task { class XStatusIndicator; }
namespace uno { class XComponentContext; }
namespace uno { template <class E> class Sequence; }
namespace embed { class XStorage; }
namespace xml {
namespace sax { struct InputSource; class XWriter; }
}
}
class ScDocument;
class SfxMedium;
class ScMySharedData;
class ScDocShell;
enum class ImportFlags {
Styles = 0x01,
Content = 0x02,
Metadata = 0x04,
Settings = 0x08,
All = Styles | Content | Metadata | Settings
};
namespace o3tl
{
template<> struct typed_flags<ImportFlags> : is_typed_flags<ImportFlags, 0x0f> {};
}
class ScXMLImportWrapper
{
sc::ImportPostProcessData maPostProcessData;
ScDocShell& mrDocShell;
ScDocument& rDoc;
SfxMedium* pMedium;
css::uno::Reference< css::embed::XStorage > xStorage;
std::unordered_map<OString, OUString> maEmbeddedFontFiles;
css::uno::Reference< css::task::XStatusIndicator> GetStatusIndicator() const;
ErrCodeMsg ImportFromComponent(const css::uno::Reference<css::uno::XComponentContext>& xContext,
const css::uno::Reference<css::frame::XModel>& xModel,
css::xml::sax::InputSource& aParserInput,
const OUString& sComponentName, const OUString& sDocName,
const css::uno::Sequence<css::uno::Any>& aArgs,
bool bMustBeSuccessful);
bool ExportToComponent(const css::uno::Reference<css::uno::XComponentContext>& xContext,
const css::uno::Reference<css::frame::XModel>& xModel,
const css::uno::Reference<css::xml::sax::XWriter>& xWriter,
const css::uno::Sequence<css::beans::PropertyValue>& aDescriptor,
const OUString& sName, const OUString& sMediaType, const OUString& sComponentName,
const css::uno::Sequence<css::uno::Any>& aArgs,
std::unique_ptr<ScMySharedData>& pSharedData);
public:
ScXMLImportWrapper(
ScDocShell& rDocSh, SfxMedium* pM, css::uno::Reference<css::embed::XStorage> xStor );
bool Import( ImportFlags nMode, ErrCodeMsg& rError );
bool Export(bool bStylesOnly);
const sc::ImportPostProcessData& GetImportPostProcessData() const { return maPostProcessData;}
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */