Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Zusammenfassung: Erstellen Sie ein COM-Add-In für Office 2024, Office LTSC 2024 und Microsoft 365 Version 2408 und höher mit Ihrer eigenen Logik für den Export in das PDF-Format. Die beschriebene Technik erfordert Kenntnisse in C++ und COM.
Gilt für: Excel, OneNote, PowerPoint, Publisher, Visio und Word in Office 2024, Office LTSC 2024, Microsoft 365 Version 2408 und höher.
Einführung in das Fixed-Format-Exportfeature von Office (2024)
In diesem Artikel wird erläutert, wie Softwareentwickler von Drittanbietern sich an das Exportfeature mit festem Format in Office 2024, Office LTSC 2024, Microsoft 365 Version 2408 und höher anschließen können, sodass sie ihren eigenen Exporter hinzufügen können.
Die Anwendungen enthalten integrierte Exporteure für Microsoft XML Paper Specification (XPS) und Portable Document Format (PDF). Feste Dateiformate machen den Inhalt eines Dokuments in einer paginierten Form verfügbar, die sowohl anwendungsunabhängig als auch plattformunabhängig ist.
Softwareentwickler können ihren eigenen Exporter hinzufügen, indem sie ein Office-Add-In schreiben, das die IMsoDocExporter-COM-Schnittstelle implementiert. In diesem Artikel wird IMsoDocExporter und seine Interaktion mit einer Hostanwendung von Microsoft 365 beschrieben, z. B. Word.
Der Export mit festem Format ist seit der Office 2007-Version verfügbar, und dieser Artikel enthält Informationen zu den Features, die in den Versionen von Office 2024, Office LTSC 2024, Microsoft 365 Version 2408 neu sind.
Wichtig |
---|
Das Exportfeature mit festem Format ist in allen Anwendungen verfügbar, die im vorherigen Abschnitt Gilt für aufgeführt sind. In der folgenden Erläuterung wird Jedoch Publisher als Beispielanwendung verwendet, außer in den Fällen, in denen eine Erklärung für eine andere Anwendung relevanter ist. |
Initialisieren von Add-Ins
Damit der Benutzer auf die Add-In-Funktionalität zugreifen kann, sollte das Add-In der Anwendung ein neues Menüelement oder eine neue Symbolleistenschaltfläche hinzufügen. Wenn der Benutzer dieses Menüelement oder diese Schaltfläche auswählt, sollte das Add-In das Microsoft Office-Objektmodell verwenden, um einen Zeiger auf das aktive Dokument abzurufen. Anschließend sollte die ExportAsFixedFormat-Methode des aktiven Dokuments mit einem IUnknown-Schnittstellenzeiger aufgerufen werden, der die IMsoDocExporter-Schnittstelle durch einen Aufruf der QueryInterface-Methode unterstützt. Der Objektmodellparameter für den Schnittstellenzeiger ist ein VARIANT mit VT_UNKNOWN Typ.
Hinweis |
---|
Für OneNote ruft das Add-In die Publish-Methode mit einem Zeichenfolgenparameter auf, der der Klassen-ID der Implementierung der IMsoDocExporter-Schnittstelle des Add-Ins entspricht. OneNote ruft dann CoCreateInstance mit der Klassen-ID auf, um einen IUnknown-Schnittstellenzeiger aus der Klassenfactory des Add-Ins abzurufen. |
Nachdem Publisher über einen Zeiger auf die IMsoDocExporter-Schnittstelle verfügt, wird das Add-In über die methoden, die von IMsoDocExporter verfügbar gemacht werden, zurückgerufen. Über diese Rückrufe stellt Word dem Add-In Dokumentinhalte und andere Informationen zum Dokument bereit.
Eine hervorragende Informationsquelle zum Erstellen von COM-Add-Ins für Microsoft Office-Anwendungen ist der codeproject.com Artikel Erstellen eines Office2K-COM-Add-Ins mit VC++/ATL.
IMsoDocExporter
Die IMsoDocExporter-Schnittstelle macht die folgenden Methoden verfügbar.
Tabelle 1. Methoden, die von der IMsoDocExporter-Schnittstelle verfügbar gemacht werden
Methode |
Beschreibung |
---|---|
HrCreateDoc |
Wird zu Beginn des Exportprozesses mit festem Format aufgerufen. |
HrAddPageFromEmf |
Wird aufgerufen, um dem Add-In eine erweiterte Metadatei (EMF) zu übergeben, die eine gerenderte Ansicht des zu exportierenden Inhalts darstellt. |
HrAddDocumentMetadataString |
Wird aufgerufen, um Metadaten im Zeichenfolgenformat für das Dokument anzugeben. |
HrAddDocumentMetadataDate |
Wird aufgerufen, um Datumsformatmetadaten für das Dokument anzugeben. |
HrSetDefaultLcid |
Wird aufgerufen, um die Standardgebietsschema-ID (LCID) für den zu exportierenden Inhalt anzugeben. |
HrAddOutlineNode |
Wird aufgerufen, um Gliederungsinformationen für benutzer navigierbare Dokumente anzugeben. |
HrGetPageBreaks |
Wird aufgerufen, um Paginierungsinformationen vom Add-In abzurufen. |
HrSetPageHeightForPagination |
Wird aufgerufen, um die Seitenhöhe anzugeben, damit das Add-In das Dokument paginieren kann. |
HrFinalize |
Wird am Ende des Exportprozesses mit festem Format aufgerufen. Ermöglicht es dem Add-In, jede endgültige Verarbeitung durchzuführen. |
HrBeginStructNode |
Wird aufgerufen, um dem Add-In die Startstruktur für einen Dokumentstrukturknoten zu übergeben, der sich über mehrere Seiten erstreckt. |
HrEndStructNode |
Wird aufgerufen, um dem Add-In die Endstruktur für einen Dokumentstrukturknoten zu übergeben, der sich über mehrere Seiten erstreckt. |
EnableCancel |
Wird aufgerufen, um dem Add-In einen Zeiger an eine IDocExCancel-Schnittstelle zu übergeben. |
GetOutputOption |
Wird aufgerufen, um Ausgabeoptionen im festen Format abzurufen. |
SetOutputOption |
Wird von Office aufgerufen, um Ausgabeoptionen im festen Format festzulegen. |
SetDocExporterSite |
Wird aufgerufen, um dem Add-In einen Zeiger auf eine IMsoDocExporterSite-Schnittstelle zur erweiterten Farbunterstützung bereitzustellen. |
Darüber hinaus macht IMsoDocExporter auch die folgenden Methoden verfügbar, die von der IUnknown-Schnittstelle geerbt werden.
Tabelle 2. Methoden, die von der IUnknown-Schnittstelle geerbt werden
Methode |
Beschreibung |
---|---|
AddRef |
Erhöht den Referenzzähler. |
QueryInterface |
Gibt Zeiger auf unterstützte Schnittstellen zurück. Die Implementierung von QueryInterface des Add-Ins sollte die Rückgabe eines IMsoDocExporter-Schnittstellenzeigers aus IID_IMsoPdfWriter unterstützen. |
Freigabe |
Verringert den Referenzzähler. |
Informationen zum Implementieren der IUnknown-Schnittstellenmethoden finden Sie unter IUnknown (COM).
Anruffluss
Das folgende Diagramm zeigt die Reihenfolge, in der Publisher die methoden aufruft, die in IMsoDocExporter verfügbar gemacht werden. Nicht alle Methoden werden von jeder Microsoft Office-Anwendung verwendet, und nicht alle Methoden werden für jedes exportierte Dokument verwendet.
Abbildung 1: Aufrufen von Methoden über die IMsoDocExporter-Schnittstelle
In den folgenden Abschnitten werden die Von der IMsoDocExporter-Schnittstelle verfügbar gemachten Methoden weiter beschrieben. Die Methoden werden ungefähr in der Reihenfolge beschrieben, in der sie von Publisher aufgerufen werden.
GetOutputOption und SetOutputOption
Publisher ruft die Methoden GetOutputOption und SetOutputOption auf, um Ausgabeoptionen für den Exportprozess mit festem Format abzurufen und festzulegen.
void GetOutputOption(
MSODOCEXOPTION docexoption,
DWORD* pdwVal
);
void SetOutputOption(
MSODOCEXOPTION docexoption,
DWORD dwVal
);
Der docexoption-Parameter gibt die Ausgabeoption an, und der Parameter (p)dwVal gibt den Wert für die Option an.
Während der integrierte Exporter in Office GetOutputOption und SetOutputOption verwendet, kann ein Add-In eine eigene Methode zum Abrufen und Festlegen von Optionen und eine eigene Benutzererfahrung für die Optionen implementieren.
Microsoft Office ruft GetOutputOption nur mit msodocexOptionTargetDPIColor für Fixed-Format Add-Ins
Für die Implementierung des Exports mit festem Format in Office ruft Publisher die GetOutputOption-Methode auf, um Ausgabeoptionen abzurufen, die dem Benutzer im Dialogfeld Als PDF oder XPS veröffentlichen angezeigt werden. Für Add-Ins, die von Softwareentwicklern von Drittanbietern entwickelt wurden, ruft Publisher GetOutputOption nur mit dem Wert msodocexOptionTargetDPIColor auf. Dies ist der einzige Wert, den ein Add-In unterstützen muss. Wenn die Implementierung von GetOutputOption des Add-Ins mit diesem Wert aufgerufen wird, sollte es die Zielpunkte pro Zoll (DPI) für die Rasterung von 3D-Effekten zurückgeben.
Microsoft Office Calls SetOutputOption für Fixed-Format Add-Ins
Sowohl für die Implementierung des Exports mit festem Format in Office als auch für Add-In-Implementierungen ruft Publisher SetOutputOption zu Beginn des Exportprozesses mit festem Format auf. In der Implementierung in Office geben die übergebenen Parameterwerte Ausgabeoptionen im festen Format an. Wenn das Add-In jedoch einen eigenen Satz von Optionen implementiert, kann das Add-In die von Publisher übergebenen Optionen ignorieren.
EnableCancel
Publisher ruft die EnableCancel-Methode auf, um dem Add-In einen Zeiger an eine IMsoDocExCancel-Schnittstelle zu übergeben. Das Add-In kann diese Schnittstelle verwenden, um abzufragen, ob ein Benutzer einen langen Dokumentexportvorgang abbricht.
void EnableCancel(
IMsoDocExCancel* pdec
);
HrBeginStructNode
Publisher ruft die HrBeginStructNode-Methode auf, um den Anfang eines Dokumentstrukturknotens für Inhalte anzugeben, die mehrere vollständige Seiten im Dokument umfassen. Dokumentstrukturknoten für Elemente des Dokuments, die sich vollständig auf einer Seite befinden (z. B. Absätze), werden von Publisher mithilfe der DocExComment_BeginStructNode - und DocExComment_EndStructNode-Strukturen in die erweiterte Metadatei (EMF) selbst eingebettet. Weitere Informationen zu Dokumentstrukturknoten finden Sie in den Abschnitten HrAddPageFromEmf und DocExComment_BeginStructNode in diesem Artikel.
HRESULT HrBeginStructNode(
int idNodeParent,
int iSortOrder,
const MSODOCEXSTRUCTNODE* pnode,
BOOL fNoEndNode
);
Der Parameter idNodeParent gibt die ID des Knotens an, der dem An das Add-In übergebenen Knoten übergeordnet ist. Wenn dieser Parameter 0 ist, befindet sich der Knoten unter dem Stamm der Dokumentstrukturstruktur. Mehrere gleichgeordnete Knoten können sich unter dem Stamm befinden. Wenn dieser Parameter -1 ist, befindet sich der Knoten unter dem derzeit geöffneten Knoten, d. h. unter dem letzten knoten, der von HrBeginStructNode angegeben wurde und nicht durch einen Aufruf von HrEndStructNode geschlossen wurde.
Der Parameter iSortOrder gibt die Sortierreihenfolge des Strukturknotens unter seinen gleichgeordneten Knoten an. Keine zwei Knoten können dieselbe Sortierreihenfolge aufweisen. Der Satz von ganzen Zahlen, die die Sortierreihenfolge bilden, muss jedoch nicht zusammenhängend sein. Der Wert -1 gibt an, dass die gleichgeordnete Sortierreihenfolge dieselbe Reihenfolge ist, in der die Knoten in den EMF-Kommentaren angezeigt werden.
Der pnode-Parameter verweist auf eine MSODOCEXSTRUCTNODE-Struktur , die über die folgende Deklaration verfügt:
typedef struct _MsoDocexStructNode
{
int idNode;
MSODOCEXSTRUCTTYPE nodetype;
WCHAR* pwchAltText;
union
{
int iHeadingLevel;
ULONG idPara;
ULONG idDropCap;
int iPage;
WCHAR* pwchActualText;
MSODOCEXLINEBREAKTYPE bt;
int iListLevel;
MSODOCEXLISTTYPE listType;
ULONG idAtn;
long cpLim;
int shapeProperty;
MsoDocexTableAttr tableAttr;
long cpNoteRef;
WCHAR* idTableHeader;
long cpXchAtnMainDod;
int iTargetParentId;
WCHAR* wzMathMlText;
MsoDocexListAttr* pListAttr;
};
} MSODOCEXSTRUCTNODE;
Der idNode-Member gibt die ID des Knotens an, der im Aufruf von HrBeginStructNode übergeben wird. Dieser Member darf nicht den Wert 0 aufweisen. Der Wert -1 gibt an, dass untergeordnete Knoten den parameter idNodeParent nicht verwenden, um diesen Knoten als übergeordnetes Element anzugeben. Stattdessen kann dieser Knoten nur ein übergeordneter Knoten sein, indem er untergeordnete Knoten in den EMF einschließt. Mehrere Knoten können die ID -1 aufweisen. Wenn die ID nicht -1 ist, ist der Wert im gesamten Dokument eindeutig.
Die eingebettete Union am Ende des MSODOCEXSTRUCTNODE wird je nach Knotentyp unterschiedlich interpretiert:
- iHeadingLevel ist die Überschriftenebene für ein msodocexStructTypeHeading.
- idPara ist die Absatz-ID für ein P-, TOCI- oder ListBody-Objekt.
- idDropCap ist die ID eines msodocexStructTypeDropCap.
- iPage ist die Seitenzahl für eine msodocexStructTypePage.
- bt ist der Zeilenumbruchtyp für eine msodocexStructTypeTextLine.
- iListLevel ist die Listenebene für ein msodocexStructTypeList- oder msodocexStructTypeListItem-Objekt.
- listType ist der Listentyp für ein msodocexStructTypeListItem-Objekt.
- idAtn ist die ID eines msodocexStructTypeAnnotationBegin oder msodocexStructTypeAnnotationEnd.
- cpLim wird verwendet, um die Schachtelungsreihenfolge von Tabellen in Tabellen für eine msodocexStructTypeTable, msodocexStructTypeTOC oder msodocexStructTypeListBody zu bestimmen.
- shapeProperty ist für eine msodocexStructTypeFigure, bei der der Inhalt eine Form, ein Textfeld oder eine Tabellenzelle ist und Bitfelder aus der MSODOCEXSHAPEPROPERTY-Enumeration enthält.
- tableAttr ist die Tabellenzellenattribute für eine msodocexStructTypeTH oder msodocexStructTypeTD.
- cpNoteRef wird verwendet, um msodocexStructTypeIntLinkNoteRef mit msodocexStructTypeFootnote/msodocexStructTypeEndnote zu verknüpfen. Dies wird weiter unten in diesem Abschnitt ausführlicher erläutert.
- idTableHeader ist die eindeutige ID für eine msodocexStructTypeTH oder msodocexStructTypeTD.
- cpXchAtnMainDod wird verwendet, um msodocexStructTypeCommentAnchor mit msodocexStructTypeAnnot zu verknüpfen. Dies wird weiter unten in diesem Abschnitt ausführlicher erläutert.
- iTargetParentId ist die ID des Knotens, dem ein msodocexStructTypeDiagram zugeordnet werden soll.
- wzMathMlText ist eine MathML-Zeichenfolge für msodocexStructTypeEquation.
- pListAttr ist Listenattribute für msodocexStructTypeList.
Hinweis: cpNoteRef, cpXchAtnMainDod, wzMathMlText und pListAttr sind verfügbar, wenn Word. Document.ExportAsFixedFormat3 wird mit ImproveExportTagging = true aufgerufen. Die erforderliche Mindestversion ist Microsoft 365 Beta Channel 16.0.18720.20000.
Tabelle 3. Aufgezählte Werte von MSODOCEXLINEBREAKTYPE
Wert |
Beschreibung |
---|---|
msodocexLineBreakTypeNormal |
Normaler Zeilenumbruch. |
msodocexLineBreakTypeManual |
Manueller Zeilenumbruch. |
msodocexLineBreakTypeEOP |
Absatzende. |
Tabelle 4. Aufgezählte Werte von MSODOCEXLISTTYPE
Wert |
Beschreibung |
---|---|
msodocexListTypeNone |
Keine Aufzählungszeichen oder Nummerierung. |
msodocexListTypeBulletDisc |
Scheibenförmige Aufzählungszeichen. |
msodocexListTypeBulletCircle |
Kreisförmige Aufzählungszeichen. |
msodocexListTypeBulletSquare |
Quadratische Aufzählungszeichen. |
msodocexListTypeBulletDecimal |
Dezimalzahl. |
msodocexListTypeUpperRoman |
Nummerierung römischer Großbuchstaben. |
msodocexListTypeLowerRoman |
Römische Nummerierung in Kleinbuchstaben. |
msodocexListTypeUpperAlpha |
Alphabetische Nummerierung in Großbuchstaben. |
msodocexListTypeLowerAlpha |
Kleinbuchstaben der alphabetischen Nummerierung. |
Tabelle 5. Aufzählungswerte von MSODOCEXSHAPEPROPERTY-Bitfeldern
Wert |
Numerischer Wert |
Beschreibung |
---|---|---|
msodocexShape |
0x00000001 |
Das Objekt ist eine Form oder ein Textfeld. |
msodocexShapeText |
0x00000002 |
Das -Objekt weist Text ohne Leerzeichen auf. |
msodocexShapePath |
0x00000004 |
Das Objekt verfügt über eine Füllung und/oder kontur. |
msodocexShapeAltText |
0x00000008 |
Das Objekt verfügt über Alternativtext. |
msodocexShapeEquation |
0x00000010 |
Das -Objekt enthält Text, der eine Formel enthält. |
msodocexShapeTabelCell |
0x00000020 |
Das Objekt ist eine Zelle in einer Tabelle. |
MsoDocexTableAttr
Die MsoDocexTableAttr-Struktur passt in 32 Bits und enthält die Zeilen- und Spaltenspanne sowie Informationen zum Headerbereich für eine Tabellenzelle.
struct MsoDocexTableAttr
{
static constexpr unsigned int MaxSpanBits = sizeof(unsigned int) * 8 / 2 - 1;
static constexpr unsigned int MaxSpanValue = (1u << MaxSpanBits) - 1;
unsigned int rowSpan : MaxSpanBits;
unsigned int fRowScope : 1;
unsigned int colSpan : MaxSpanBits;
unsigned int fColScope : 1;
};
Die Elemente der MsoDocexTableAttr-Struktur sind wie folgt:
MaxSpanBits Gibt die Anzahl von Bits an, die für die RowSpan- und colSpan-Werte verfügbar sind( 15).
MaxSpanValue Gibt den Maximalwert an, der für rowSpan und colSpan angegeben werden kann.
rowSpan Gibt die Anzahl der Zeilen an, die eine Tabellenzelle umfasst.
fRowScope Gibt an, ob der Header Zeile/Beide oder Spalte ist.
colSpan Gibt die Anzahl der Spalten an, die eine Tabellenzelle umfasst.
fColScope Gibt an, ob die Kopfzeile Column/Both oder Row ist.
MsoDocexListAttr
Die MsoDocexListAttr-Struktur enthält Informationen für eine Liste.
struct MsoDocexListAttr
{
int iListLevel;
long cpLim;
};
Die Elemente der MsoDocexListAttr-Struktur sind wie folgt:
iListLevel Gibt die Schachtelungsreihenfolge der Liste an.
cpLim Gibt die Position im Dokument an, an der die Liste endet.
Tipps zur Nachbearbeitung
In einigen Fällen müssen die Knoten nachverarbeitet werden, um die gewünschten Ergebnisse zu erzielen.
Nachbearbeitung von Fußnoten/Endnoten
Während des Exports werden Fuß-/Endnotenlinks als msodocexStructTypeIntLinkNoteRef gekennzeichnet. Fußnoten-/Endnotentexte werden als msodocexStructTypeFootnote bzw. msodocexStructTypeEndnote gekennzeichnet, und sie sind immer Knoten der obersten Ebene unter dem Knoten msodocexStructTypeDocument. Der MsodocexStructTypeIntLinkNoteRef-Knoten und der entsprechende MsodocexStructTypeFootnote/msodocexStructTypeEndnote-Knoten weisen denselben cpNoteRef-Wert auf. Dies kann verwendet werden, um Fußnoten-/Endnotenknoten unter die entsprechenden Linkknoten zu verschieben, um eine logische Lesereihenfolge beizubehalten.
Nachbearbeitung von Kommentaren
Während des Exports wird jeder Kommentaranker als msodocexStructTypeCommentAnchor gekennzeichnet. Kommentartexte werden als msodocexStructTypeAnnot gekennzeichnet und sind immer Knoten der obersten Ebene unter dem Knoten msodocexStructTypeDocument. Der MsodocexStructTypeCommentAnchor-Knoten und der entsprechende MsodocexStructTypeAnnot-Knoten weisen denselben cpXchAtnMainDod-Wert auf. Dies kann verwendet werden, um Anmerkungsknoten unter die entsprechenden Kommentarankerknoten zu verschieben, um eine logische Lesereihenfolge beizubehalten.
Layouttabellen nach der Verarbeitung
Wenn beim Export erkannt wird, dass eine Tabelle eine Layouttabelle ist, markieren wir sie als msodocexStructTypeTable, legen aber cpLim des Knotens auf -2 fest (unser konstanter Wert, um anzugeben, dass es sich um eine Layouttabelle handelt). Dieser Wert kann dann verwendet werden, um zu bestimmen, ob Tabellenknoten als Absatzknoten erneut gekennzeichnet werden sollen.
Knoten für seitenübergreifende Nachbearbeitung (Absätze, Listen, Tabellen)
Bei Absätzen können idPara-Werte von zwei Para-Knoten überprüft werden, um zu bestimmen, ob sie denselben Absatz auf seitenübergreifend darstellen. Bei Tabellen können die cpLim-Werte überprüft werden, um festzustellen, ob sie identisch sind.
Für Listen haben wir msoDocexStructNode eine neue Klasse hinzugefügt, MsoDocexListAttr, die den cpLim einer Liste enthält. Dies kann verwendet werden, um zu überprüfen, ob zwei Listenknoten über denselben cpLim verfügen, was bedeutet, dass beide die gleiche Liste im Dokument darstellen.
Bei Tabellenstrukturknoten wird die Union als eine Reihenfolge der Tabellenenden relativ zu anderen Tabellen interpretiert, indem cpLim verwendet wird, mit dem die Schachtelungsreihenfolge von Tabellen innerhalb von Tabellen bestimmt werden kann.
Im Kontext der DocExComment_BeginStructNode kann das Add-In das pwchActualText-Element dieser Union ignorieren.
Der pwchAltText-Member gibt alternativen Text für den Strukturknoten an.
Der fNoEndNode-Parameter für HrBeginStructNode gibt an, ob Publisher die HrEndStructNode-Methode aufruft, um das Ende des Strukturknotens zu markieren. Wenn fNoEndNode false ist, ruft Publisher HrEndStructNode auf, um den inhalt zu schließen, der durch den Knoten begrenzt ist. Wenn dieser Parameter über einen true-Wert verfügt, gebundene der Knoten keinen Inhalt.
Der fNoEndNode-Parameter wirkt sich auf die Interpretation des übergeordneten ID-Werts nachfolgender Knoten aus. Wenn fNoEndNodefalse ist, sind Knoten, die zwischen diesem Aufruf von HrBeginStructNode und dem nachfolgenden Aufruf von HrEndStructNode eingefügt werden und über die übergeordnete ID -1 verfügen, untergeordnete Elemente dieses Knotens. Wenn fNoEndNode jedoch true ist, sind knoten, die nach diesem Aufruf von HrBeginStructNode eingefügt werden und die die übergeordnete ID -1 aufweisen, keine untergeordneten Elemente dieses Knotens, sondern untergeordnete Elemente des nächst kurzem angegebenen Knotens, dessen fNoEndNodegleich false ist.
Dokumentstrukturknoten können in beliebiger Tiefe geschachtelt werden.
Die von HrBeginStructNode angegebenen knoten und die von DocExComment_BeginStructNode teilen sich denselben ID-Bereich und sind in derselben Dokumentstrukturstruktur vorhanden. HrBeginStructNode und DocExComment_BeginStructNode sind zwei alternative Möglichkeiten zum Hinzufügen von Knoten zu dieser Struktur. Wenn beispielsweise der zuletzt geöffnete Knoten von HrBeginStructNode geöffnet wurde und der nächste gefundene Knoten aus einem DocExComment_BeginStructNode EMFcommentrecord mit idNodeParent gleich -1 stammt, bedeutet dies, dass der Knoten von HrBeginStructNode das übergeordnete Element des Knotens aus dem DocExComment_BeginStructNode Datensatz ist.
HrEndStructNode
Publisher ruft die HrEndStructNode-Methode auf, um das Ende eines Dokumentstrukturknotens für Inhalte anzugeben, die mehrere Seiten im Dokument umfassen. Der Strukturknoten, der von HrEndStructNode beendet wurde, wurde zuvor durch einen Aufruf der HrBeginStructNode-Methode gestartet. Weitere Informationen finden Sie in diesem Artikel unter HrBeginStructNode.
HRESULT HrEndStructNode();
HrCreateDoc
Publisher ruft die HrCreateDoc-Methode auf, um die Erstellung eines neuen, leeren Dokuments im festen Format anzugeben.
HRESULT HrCreateDoc(
const WCHAR* wzDocExFile
);
Publisher ruft die HrCreateDoc-Methode zu Beginn des Exportprozesses mit festem Format auf, um die Erstellung eines leeren Dokuments im festen Format anzugeben. Der wzDocExFile-Parameter gibt einen Namen für die Ausgabedatei an, in die das Dokument im festen Format geschrieben werden soll.
Für eine Add-In-Implementierung ruft Publisher HrCreateDoc mit dem Dateinamen auf, den das Add-In im Aufruf der ExportToFixedFormat-Methode im Microsoft Office-Objektmodell bereitgestellt hat. Da Add-Ins jedoch in der Regel eine Konfigurationsbenutzeroberfläche bereitstellen, mit der der Benutzer einen Ausgabedateinamen angeben kann, kann das Add-In diesen Dateinamen während des Exportvorgangs ignorieren.
Für Microsoft Office-Anwendungen, die das Add-In zum Paginieren des Dokuments benötigen, wird HrCreateDoc zweimal aufgerufen, einmal zu Beginn der Paginierungsaufrufsequenz und erneut, nachdem das Add-In das Dokument paginiert hat. Weitere Informationen finden Sie in den Beschreibungen für die HrSetPageHeightForPagination-Methode und die HrGetPageBreaks-Methode.
HrSetDefaultLcid
Publisher ruft die HrSetDefaultLcid-Methode auf, um die Standardgebietsschema-ID (LCID) für den zu exportierenden Inhalt anzugeben.
HRESULT HrSetDefaultLcid(
DWORD lcid
);
Eine Liste der gültigen LCIDs finden Sie unter List of Locale ID (LCID) Values as Assigned by Microsoft.
HrAddPageFromEmf
Publisher ruft die HrAddPageFromEmf-Methode auf, um dem Add-In ein Handle an eine In-Memory-EMF zu übergeben, die den Inhalt im zu exportierenden Dokument darstellt.
HRESULT HrAddPageFromEmf(
HENHMETAFILE hemf
);
Das von Microsoft Office an das Add-In übergebene EMF ist die primäre Quelle des Inhalts, den das Add-In als Datei mit festem Format exportiert. Microsoft Office ruft HrAddPageFromEmf einmal für jede Seite des Inhalts im Quelldokument der Anwendung auf.
EMF-Kommentare vermitteln semantische Informationen
Ein EMF ist eine Sequenz von Zeichnungsbefehlen (GDI- und GDI+-Befehle), die angeben, wie die visuellen Elemente des Dokuments gerendert werden sollen. Das EMF enthält keine Informationen, die über diese Befehle hinausgehen (z. B. "Zeichnen Sie hier ein Bild" oder "Zeichnen einer Linie dort"). Insbesondere unterstützen herkömmliche EMF keine semantischen Aspekte des Dokuments, z. B. Links, Gebietsschemainformationen und Informationen zur Barrierefreiheit. Um semantische Informationen im exportierten Dokument beizubehalten, fügt Publisher spezielle Datensätze in das EMF ein. Diese Datensätze enthalten die semantischen Informationen.
Die Datensätze, die die semantischen Informationen darstellen, werden als speziell formatierte EMF-Kommentare implementiert. Das EMF-Format ermöglicht Kommentardatensatztypen, die von der Rendering-Engine für Graphics Device Interface (GDI) ignoriert werden, aber beliebige Informationen enthalten können.
Betrachten Sie beispielsweise ein Dokument, das alternativen Text enthält. (Alternativer Text wird von Dokumentlesern verwendet, um Bilder für Benutzer mit Sehbehinderungen zu beschreiben.) Publisher fügt EMF-Kommentare vor und nach dem Rendern des Bilds ein, und diese EMF-Kommentare geben den alternativen Text für das Bild an. Das Add-In interpretiert die Kommentare und schreibt die Informationen in die Exportdatei mit festem Format.
In der folgenden Tabelle sind die semantischen Datensatztypen aufgeführt, die von der Microsoft Office-Exportfunktion mit festem Format unterstützt werden. Diese Typen werden von der MSODOCEXSTRUCTTYPE-Enumeration aufgezählt. Jeder Typ entspricht einem Strukturtyp, der das Format für den Datensatz beschreibt.
Tabelle 6. Semantische Datensatztypen, die vom Export mit festem Format unterstützt werden
Kommentarwert |
Strukturtyp |
---|---|
msodocexcommentExternalHyperlink |
DocExComment_ExternalHyperlink |
msodocexcommentExternalHyperlinkRctfv |
DocExComment_ExternalHyperlink |
msodocexcommentInternalHyperlink |
DocExComment_InternalHyperlink |
msodocexcommentInternalHyperlinkRctfv |
DocExComment_InternalHyperlink |
msodocexcommentColorInfo |
DocExComment_ColorInfo |
msodocexcommentColorMapEnable |
DocExComment_ColorEnable |
msodocexcommentBeginTextRun |
DocExComment_BeginTextRun |
msodocexcommentBeginTextRunRTL |
DocExComment_BeginTextRun |
msodocexcommentEndTextRun |
DocExComment_EndTextRun |
msodocexcommentBeginStructNode |
DocExComment_BeginStructNode |
msodocexcommentEndStructNode |
DocExComment_EndStructNode |
msodocexcommentUnicodeForNextTextOut |
DocExComment_UnicodeForNextTextOut |
msodocexcommentUnicodeForNextTextOutRTL |
DocExComment_UnicodeForNextTextOut |
msodocexcommentEPSColor |
DocExComment_EPSColor |
msodocexcommentEPSCMYKJPEG |
DocExComment_EPSColorCMYKJPEG |
msodocexcommentEPSSpotImage |
DocExComment_EPSColorSpotImage |
msodocexcommentEPSStart |
DocExComment_EPSStart |
msodocexcommentPageName |
DocExComment_PageName |
msodocexcommentTransparent |
DocExComment_Transparent |
DocExComment_ExternalHyperlink(Rctfv)
Die DocExComment_ExternalHyperlink(Rctfv) -Struktur beschreibt einen Link, der auf einen Link außerhalb des Dokuments verweist, z. B. zu einer Website im Internet.
struct DocExComment_ExternalHyperlink
{
DWORD ident {};
DWORD iComment {};
union
{
RECT rcdvRegion;
struct
{
float xLeft;
float yTop;
float dxWidth;
float dyHeight;
} rctfvRegion;
};
WCHAR wzLink[MAX_PATH];
};
Die Elemente der DocExComment_ExternalHyperlink(Rctfv) -Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentExternalHyperlink oder msodocexcommentExternalHyperlinkRctfv an.
rcdvRegion und rctfvRegion Eine Union, die den Bereich der Seite angibt, der den Quellspeicherort des Links darstellt. Der Bereich kann als RECT-Typ (rcdvRegion) dargestellt werden, der Gerätepixel als Maßeinheit verwendet, oder als Struktur, die Gleitkommakoordinaten (rctfvRegion) enthält. In diesem Fall ist die Maßeinheit Punkte.
Wenn das iComment-Element gleich msodocexcommentExternalHyperlink ist, sollte das Add-In rcdvRegion verwenden. In diesem Fall muss das Add-In die aktuelle EMF-Transformationsmatrix auf rcdvRegion anwenden, um sie in den Seitenbereich zu konvertieren.
Wenn das iComment-Element gleich msodocexcommentExternalHyperlinkRctfv ist, sollte das Add-In rctfvRegion verwenden. In diesem Fall befindet sich rctfvRegion bereits im Seitenbereich, sodass keine Transformation erforderlich ist.
wzLink[MAX_PATH] Gibt die Ziel-URL für diesen Link an.
DocExComment_InternalHyperlink(Rctfv)
Die DocExComment_InternalHyperlink(Rctfv) -Struktur beschreibt einen Link, der mit einer Position innerhalb des Dokuments verknüpft ist. Beachten Sie, dass Publisher zwar ein separates EMF für jede Seite des Dokuments übergibt, das ziel des durch DocExComment_InternalHyperlink(Rctfv) angegebenen Links sich jedoch auf einer anderen Seite als der Quellspeicherort befinden könnte.
struct DocExComment_InternalHyperlink
{
DWORD ident {};
DWORD iComment {};
union
{
RECT rcdvRegion;
struct
{
float xLeft;
float yTop;
float dxWidth;
float dyHeight;
} rctfvRegion;
};
DWORD iTargetPage {};
float xtfvTarget {};
float ytfvTarget {};
float dytfTargetPage {};
};
Die Elemente der DocExComment_InternalHyperlink(Rctfv) -Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentInternalHyperlink oder msodocexcommentInternalHyperlinkRctfv an.
rcdvRegion und rctfvRegion Wie bei der DocExComment_ExternalHyperlink-Struktur ist dieser Member eine Union, die den Bereich der Seite angibt, der den Quellspeicherort des Links darstellt. Der Bereich kann als RECT-Typ (rcdvRegion) dargestellt werden, der Gerätepixel als Maßeinheit verwendet, oder als Struktur, die Gleitkommakoordinaten (rctfvRegion) enthält. In diesem Fall ist die Maßeinheit Punkte.
Wenn das iComment-Element gleich msodocexcommentInternalHyperlink ist, sollte das Add-In rcdvRegion verwenden. In diesem Fall muss das Add-In die aktuelle EMF-Transformationsmatrix auf rcdvRegion anwenden, um sie in den Seitenbereich zu konvertieren.
Wenn das iComment-Element gleich msodocexcommentInternalHyperlinkRctfv ist, sollte das Add-In rctfvRegion verwenden. In diesem Fall befindet sich rctfvRegion bereits im Seitenbereich, sodass keine Transformation erforderlich ist.
iTargetPage Gibt die Seitenzahl der Zielseite im Dokument an.
xtfvTarget Gibt die X-Koordinate des Zielspeicherorts auf der Zielseite an. Die Maßeinheit für diesen Wert ist Punkte.
ytfvTarget Gibt die y-Koordinate des Zielspeicherorts auf der Zielseite an. Die Maßeinheit für diesen Wert ist Punkte.
dytfTargetPage Die Höhe der Zielseite in Punkt. Der durch das ytfvTarget-Element angegebene Offset ist relativ zur linken oberen Ecke der Seite. Einige Typen mit festem Format verwenden jedoch ein Koordinatensystem, das relativ zur linken unteren Ecke der Seite ist. Für diese Arten von Dokumenten ist die Seitenhöhe erforderlich, um den Offset zu konvertieren.
DocExComment_ColorInfo
Die DocExComment_ColorInfo-Struktur gibt Farbzustandsinformationen für den EMF an. Weitere Informationen zu dieser Struktur finden Sie im Abschnitt Erweiterte Farbunterstützung.
struct DocExComment_ColorInfo
{
DWORD ident {};
DWORD iComment {};
COLORREF clr { 0 };
BOOL fForeColor {};
};
Die Elemente der DocExComment_ColorInfo-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentColorInfo an.
clr Gibt eine Farb-ID an, die einen aktuellen Farbzustand im EMF darstellt.
fForeColor Gibt an, ob die Farb-ID im clr-Element eine Vordergrundfarbe oder eine Hintergrundfarbe darstellt. Wenn dieses Element den Wert true aufweist, stellt die Farb-ID eine Vordergrundfarbe dar. Wenn dieses Element den Wert false aufweist, stellt die Farb-ID eine Hintergrundfarbe dar.
DocExComment_ColorEnable
Die DocExComment_ColorEnable-Struktur gibt an, ob die Farbzuordnung für nachfolgende Inhalte im EMF aktiviert ist. Weitere Informationen zu dieser Struktur finden Sie im Abschnitt Erweiterte Farbunterstützung.
struct DocExComment_ColorEnable
{
DWORD ident {};
DWORD iComment {};
BOOL fEnable {};
};
Die Elemente der DocExComment_ColorEnable-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentColorMapEnable an.
fEnable Gibt an, ob die Farbzuordnung für nachfolgende Inhalte aktiviert ist. Der Wert true gibt an, dass die Farbzuordnung aktiviert ist. Der Wert false gibt an, dass die Farbzuordnung deaktiviert ist.
DocExComment_BeginStructNode
Die DocExComment_BeginStructNode-Struktur markiert den Anfang eines Dokumentstrukturknotens. Strukturknoten dienen einem von zwei möglichen Zwecken:
Strukturknoten können den Inhaltstyp identifizieren, den sie enthalten, und die hierarchische Beziehung zwischen diesem Inhalt und anderen Inhalten im Dokument angeben.
Strukturknoten können alternativen Text für Elemente im Dokument angeben.
Wenn das fContentNode-Element über einen true-Wert verfügt, folgt auf die DocExComment_BeginStructNode später im Dokument eine DocExComment_EndStructNode. Die DocExComment_EndStructNode markiert das Ende des Inhalts, der von den Informationen im DocExComment_BeginStructNode umschlossen wird.
Die Auflistung von Strukturknoten innerhalb des Dokuments bildet eine Struktur. Jeder Knoten verfügt über einen übergeordneten Knoten und kann auch gleichgeordnete Knoten aufweisen. Die Elemente idNodeParent und iSortOrder beschreiben die Struktur dieser Struktur. Beachten Sie, dass ein untergeordneter Knoten zwischen den DocExComment_BeginStructNode und DocExComment_EndStructNode Strukturen des übergeordneten Knotens im EMF angezeigt werden kann.
struct DocExComment_BeginStructNode
{
DWORD ident {};
DWORD iComment {};
int idNodeParent {};
int iSortOrder {};
MSODOCEXSTRUCTNODE desn;
BOOL fContentNode {};
int cwchAltText {};
};
Die Elemente der DocExComment_BeginStructNode-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentBeginStructNode an.
idNodeParent Gibt die ID des übergeordneten Knotens an. Der Wert 0 gibt den Stammknoten an. Der Wert -1 gibt den derzeit geöffneten Strukturknoten an, d. h. den einschließenden Strukturknoten.
iSortOrder Gibt die Sortierreihenfolge des Strukturknotens zwischen seinen gleichgeordneten Knoten an. Die Sortierreihenfolge ermöglicht es dem Add-In, den Inhalt im exportierten Dokument richtig zu sortieren.
Keine zwei Knoten können dieselbe Sortierreihenfolge aufweisen. Der Satz von ganzen Zahlen, die die Sortierreihenfolge bilden, muss jedoch nicht zusammenhängend sein.
Der Wert -1 gibt an, dass die gleichgeordnete Reihenfolge dieselbe Reihenfolge ist, in der die Knoten in den EMF-Kommentaren angezeigt werden. Beachten Sie, dass die Reihenfolge, in der der Inhalt im EMF angezeigt wird, nicht notwendigerweise die Reihenfolge ist, in der der Inhalt von einem Benutzer des Dokuments genutzt wird.
desn Gibt eine MSODOCEXSTRUCTTYPE-Struktur an, die weiter oben im Dokument definiert ist.
Der idNode-Member gibt die ID des Knotens an. Dieser Member darf nicht den Wert 0 aufweisen. Der Wert -1 gibt an, dass untergeordnete Knoten den idNodeParent-Member nicht verwenden, um diesen Knoten als übergeordnetes Element anzugeben. Stattdessen kann dieser Knoten nur ein übergeordneter Knoten sein, indem er untergeordnete Knoten in den EMF einschließt. Mehrere Knoten können die ID -1 aufweisen. Wenn die ID nicht -1 ist, ist der Wert im gesamten Dokument eindeutig.
Der Knotentyp gibt den Typ des Strukturknotens an. Dieser Member ist gleich einem der Werte aus dem MSODOCEXSTRUCTTYPE-Enumerationstyp . In der folgenden Tabelle sind Beispiele für Dokumentstrukturknotentypen aufgeführt.
Tabelle 7. Knotentypen der Dokumentstruktur
Typwert |
Beschreibung |
---|---|
msodocexStructTypePara |
Ein Textblock in einem Artikel. Der übergeordnete Knoten muss ein Artikel sein. |
msodocexStructTypeFigure |
Ein grafisches Element (z. B. ein Bild oder eine Sammlung von Formen), das über eine Textdarstellung verfügt. Die Textdarstellung ist der alternative Text, der zum Lesen oder Durchsuchen des Dokuments verwendet wird. |
msodocexStructTypeArticle |
Eine Gruppe von Knoten, die einen einzelnen Textfluss bilden, der als zusammenhängender Inhaltsblock gelesen oder durchsucht werden soll. Einige Dokumente enthalten einen einzigen Artikel und andere mehrere Artikel. |
msodocexStructTypeHeading |
Eine Überschrift im Text. |
msodocexStructTypeTable |
Ein Textblock, der eine Tabelle bildet. |
msodocexStructTypeTR |
Ein Textblock, der eine einzelne Zeile einer Tabelle bildet. |
msodocexStructTypeTD |
Ein Textblock, der eine einzelne Zelle in einer Tabellenzeile bildet. |
msodocexStructTypeTH |
Ein Textblock, der eine einzelne Kopfzeile in einer Tabellenzeile bildet. |
msodocexStructTypeList |
Ein Textblock, der eine Liste bildet. |
msodocexStructTypeListItem |
Ein Textblock, der ein Listenelement bildet. |
msodocexStructTypeListBody |
Ein Textblock, der den Textkörper eines Listenelements bildet. |
msodocexStructTypeDocument |
Ein Dokument. |
msodocexStructTypePage |
Eine Seite im Dokument. |
msodocexStructTypeTOC |
Ein Inhaltsverzeichnis. |
msodocexStructTypeTOCI |
Ein Element in einem Inhaltsverzeichnis. |
msodocexStructTypeExtLink |
Ein Link zu einer externen Ressource. |
msodocexStructTypeIntLink |
Ein Link zu einer internen Ressource. |
msodocexStructTypeFootnote |
Fußnote. |
msodocexStructTypeEndnote |
Endnote. |
msodocexStructTypeTextbox |
Ein Textfeld. |
msodocexStructTypeHeader |
Ein Textblock, der eine Kopfzeile bildet. |
msodocexStructTypeFooter |
Eine Fußzeile. |
msodocexStructInlineShape |
Eine Inlineform. |
msodocexStructAnnotation |
Eine Anmerkung. |
msodocexStructTypeSpanBlock |
Ein Textblock. |
msodocexStructTypeWorkbook |
Eine Arbeitsmappe. |
msodocexStructTypeWorksheet |
Ein Arbeitsblatt. |
msodocexStructTypeMacrosheet |
Ein Makroblatt. |
msodocexStructTypeChartsheet |
Ein Diagrammblatt. |
msodocexStructTypeDialogsheet |
Ein Dialogfeldblatt. |
msodocexStructTypeSlide |
Eine Folie. |
msodocexStructTypeChart |
Ein Diagramm. |
msodocexStructTypeDiagram |
Ein SmartArt-Diagramm. |
msodocexStructTypeBulletText |
Bullertext. |
msodocexStructTypeTextLine |
Eine Textzeile. |
msodocexStructTypeDropCap |
Eine Schlagkappe. |
msodocexStructTypeSection |
Abschnitt. |
msodocexStructTypeAnnotationBegin |
Der Anfang einer Anmerkung. |
msodocexStructTypeAnnotationEnd |
Das Ende einer Anmerkung. |
msodocexStructTypeParaRTLAttr |
Ein Textblock in einem Artikel mit rechts-nach-links-Layout. |
msodocexStructTypeTableRTLAttr |
Ein Textblock, der eine Tabelle mit einem Layout von rechts nach links bildet. |
msodocexStructTypeHeadingRTLAttr |
Eine Überschrift im Text mit rechts-nach-links-Layout. |
msodocexStructTypeListItemRTLAttr |
Ein Textblock, der ein Listenelement mit einem Layout von rechts nach links bildet. |
msodocexStructTypeParaUnannotatableAttr |
Ein Textblock in einem Artikel, der nicht annotaierbar ist. |
msodocexStructTypeTHead |
Der Kopfzeilenbereich in einer Tabelle. |
msodocexStructTypeTBody |
Der Textbereich in einer Tabelle, d. h. der Teil zwischen THead und TFoot. |
msodocexStructTypeLabel |
Eine Bezeichnung. |
msodocexStructTypeEquation |
Formel. |
msodocexStructTypeIntLinkNoteRef |
Ein Verweiszeichenlink für Fuß- oder Endnoten. |
msodocexStructTypeTFoot |
Der Zeilenbereich der Fußzeile in einer Tabelle. |
msodocexStructTypeTitle |
Ein Titel im Text. |
msodocexStructTypeBlockQuote |
Ein Absatzzitat oder ein intensives Anführungszeichen. |
msodocexStructTypeCommentAnchor |
Text, der mit einem Kommentar verknüpft ist. |
msodocexStructTypeAnnot |
Inhalt eines einzelnen Kommentars. |
msodocexStructTypeQuote |
Ein Inline-Anführungszeichen. |
msodocexStructTypeCaption |
Ein Untertitel für eine Formel/Abbildung/Tabelle. |
Hinweis: msodocexStructTypeTitle, msodocexStructTypeBlockQuote, msodocexStructTypeCommentAnchor, msodocexStructTypeAnnot, msodocexStructTypeQuote und msodocexStructTypeCaption sind verfügbar, wenn Word. Document.ExportAsFixedFormat3 wird mit ImproveExportTagging = true aufgerufen. Die erforderliche Mindestversion ist Microsoft 365 Beta Channel 16.0.18720.20000.
fContentNode Gibt an, ob eine DocExComment_EndStructNode-Struktur das Ende dieses Strukturknotens markiert. Wenn fContentNodetrue ist, schließt eine DocExComment_EndStructNode-Struktur den Inhalt, der durch den Knoten begrenzt ist. Wenn dieser fContentNode einen false-Wert aufweist, gebundene der Knoten keinen Inhalt.
Das fContentNode-Element wirkt sich auf die Interpretation des übergeordneten ID-Werts nachfolgender Knoten aus. Wenn fContentNodetrue ist, sind Knoten, die zwischen diesem DocExComment_BeginStructNode und einem nachfolgenden DocExComment_EndStructNode eingefügt werden und über die übergeordnete ID -1 verfügen, untergeordnete Knoten dieses Knotens. Wenn fContentNode jedoch true ist, sind Knoten, die nach diesem DocExComment_BeginStructNode eingefügt werden und die die übergeordnete ID -1 aufweisen, keine untergeordneten Elemente dieses Knotens. Sie sind untergeordnete Elemente des zuletzt angegebenen Knotens, dessen fContentNodegleich false ist.
Sie können Dokumentstrukturknoten in beliebiger Tiefe schachteln.
cwchAltText Gibt die Anzahl der Unicode-Zeichen im Block des alternativen Texts an, der der -Struktur folgt. Diese Unicode-Zeichenfolge gibt alternativen Text für den Knoten an (z. B. alternativer Text für ein Bild).
DocExComment_EndStructNode
Die DocExComment_EndStructNode-Struktur markiert das Ende des Inhalts, der durch die Informationen im DocExComment_BeginStructNode ergänzt wird.
struct DocExComment_EndStructNode
{
DWORD ident {};
DWORD iComment {};
};
Die Elemente der DocExComment_EndStructNode-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentEndStructNode an.
DocExComment_BeginTextRun
Die DocExComment_BeginTextRun-Struktur identifiziert die Sprache einer Textsequenz im Dokument und stellt die Unicode-Codepunkte für den Text bereit.
Obwohl einige EMF-Datensätze zum Rendern von Text Unicode als Textdarstellung verwenden, verwenden andere anstelle des ursprünglichen Quelltexts die auf dem Bildschirm gezeichneten Glyphen. Eine Glyphe ist der Index einer bestimmten Form in der Schriftart, die sich von Schriftart zu Schriftart unterscheiden kann.
Es kann vorkommen, dass mehrere Unicode-Codepunkte zu einer einzelnen Glyphe kombiniert werden oder ein einzelner Unicode-Codepunkt in mehrere Glyphen unterteilt wird. Da die Zuordnung von Codepunkten zu Glyphen kontextabhängig ist, kann ein Benutzer weder textsuchen noch ein Dokument kopieren/einfügen, das nur Glyphen enthält. Daher stellt Publisher manchmal sowohl den Unicode-Text als auch die Glyphen bereit.
struct DocExComment_BeginTextRun
{
DWORD ident {};
DWORD iComment {};
DWORD lcid {};
int cGlyphIndex {};
int cwchActualText {};
};
Die Elemente der DocExComment_BeginTextRun-Struktur sind wie folgt:
Ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentBeginTextRun an.
lcid Gibt die LCID für die Textsequenz an.
cGlyphIndex Gibt die Größe eines Arrays an, das dieser Struktur folgt. Dieses Array implementiert eine Glyphenindextabelle, die Unicode-Codepunkte im tatsächlichen Text den entsprechenden Glyphen im EMF zuordnet. Jedes Element des Arrays entspricht einem Codepunkt im Text. Der Wert dieses Elements gibt die erste Glyphe an, die zum Rendern dieses Codepunkts im EMF verwendet wird. Zwei oder mehr angrenzende Codepunkte können denselben Wert im Array aufweisen, was bedeutet, dass beide in die gleiche Glyphe aufgelöst werden. Der Wert kann auch 0 sein, was bedeutet, dass dieser Codepunkt keiner Glyphe zugeordnet wird.
cwchActualText Gibt die Größe der Sequenz von Unicode-Codepunkten an, die der Glyphenindextabelle folgen. Dies ist der Text, den ein Benutzer des Dokuments für die Suche, das Kopieren/Einfügen und die Barrierefreiheit verwenden kann. Der Wert dieses Elements kann 0 sein, was bedeutet, dass kein Unicode-Text bereitgestellt wird.
DocExComment_EndTextRun
Die DocExComment_EndTextRun-Struktur markiert das Ende einer Textsequenz, deren Anfang durch eine DocExComment_BeginTextRun-Struktur markiert wurde.
struct DocExComment_EndTextRun
{
DWORD ident {};
DWORD iComment {};
};
Die Elemente der DocExComment_EndTextRun-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentEndTextRun an.
DocExComment_UnicodeForNextTextOut
Die DocExComment_UnicodeForNextTextOut-Struktur funktioniert ähnlich wie die DocExComment_BeginTextRun - und DocExComment_EndTextRun-Strukturen . DocExComment_UnicodeForNextTextOut gibt jedoch Unicode-Codepunkte nur für den folgenden EMF-TextOut-Datensatz und nicht für einen EMF-Inhaltsblock an, der durch Start- und Endstrukturen begrenzt ist.
struct DocExComment_UnicodeForNextTextOut
{
DWORD ident {};
DWORD iComment {};
int cGlyphIndex {};
int cwchActualText {};
};
Die Elemente der DocExComment_UnicodeForNextTextOut-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentUnicodeForNextTextOut an.
cGlyphIndex Gibt die Größe eines Arrays an, das dieser Struktur folgt. Dieses Array implementiert eine Glyphenindextabelle, die Unicode-Codepunkte im tatsächlichen Text den entsprechenden Glyphen im EMF zuordnet. Jedes Element des Arrays entspricht einem Codepunkt im Text. Der Wert dieses Elements gibt die erste Glyphe an, die zum Rendern dieses Codepunkts im EMF verwendet wird. Zwei oder mehr angrenzende Codepunkte können denselben Wert im Array aufweisen, was bedeutet, dass beide in die gleiche Glyphe aufgelöst werden.
cwchActualText Gibt die Größe der Sequenz von Unicode-Codepunkten an, die der Glyphenindextabelle folgen. Dies ist der Text, den ein Benutzer des Dokuments für die Suche, das Kopieren/Einfügen und die Barrierefreiheit verwenden kann.
DocExComment_EPSColor
Die DocExComment_EPSColor-Struktur gibt Farbinformationen für eine gekapselte PostScript-Datei (EPS) an, die in emf eingebettet ist. Weitere Informationen zu dieser Struktur finden Sie im Abschnitt Erweiterte Farbunterstützung.
typedef struct
{
DWORD ident {};
DWORD iComment {};
BYTE colorInfo[];
} DocExComment_EPSColor;
Die Elemente der DocExComment_EPSColor-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentEPSColor an.
colorInfo[] Gibt die Farbinformationen für die EPS-Datei an. Das Add-In sollte diese Informationen mithilfe der IMsoDocExporterSite::SetEPSInfo-Methode an Publisher übergeben.
DocExComment_EPSColorCMYKJPEG
Die DocExComment_EPSColorCMYKJPEG-Struktur gibt den Start eines binären Objekts im EMF an, bei dem es sich um einen CMYKJPEG-Dateistream handelt. Weitere Informationen zu dieser Struktur finden Sie im Abschnitt Erweiterte Farbunterstützung.
typedef struct
{
DWORD ident {};
DWORD iComment {};
} DocExComment_EPSColorCMYKJPEG;
Die Elemente der DocExComment_EPSColorCMYKJPEG-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert an, msodocexcommentEPSCMYKJPEG;
DocExComment_EPSColorSpotImage
Die DocExComment_EPSColorSpotImage-Struktur stellt Spotfarbinformationen für das nachfolgende RGB-Bild bereit. Weitere Informationen zu dieser Struktur finden Sie im Abschnitt Erweiterte Farbunterstützung.
typedef struct
{
DWORD ident {};
DWORD iComment {};
COLORREF cmykAlt { 0 };
COLORREF rgbAlt { 0 };
float flTintMin {};
float flTintMax {};
char szSpotName[1];
} DocExComment_EPSColorSpotImage;
Die Elemente der DocExComment_EPSColorSpotImage-Struktur sind wie folgt:
ident Gibt den konstanten Wert msodocexsignature an, der diesen EMF-Kommentar als mit semantischen Informationen identifiziert.
iComment Gibt den MSODOCEXCOMMENT-Wert msodocexcommentEPSSpotImage an.
cmykAlt Gibt eine CMYK-Farb-ID an.
rgbAlt Gibt eine RGB-Farb-ID an.
flTintMin Gibt den minimalen Farbton an.
flTintMax Gibt den maximalen Farbton an.
szSpotName[1] Gibt eine Zeichenfolge mit variabler Länge an, die den Spotnamen enthält.
Erweiterte Farbunterstützung
Um erweiterte Farbräume in Publisher zu unterstützen, sind zusätzliche EMF-semantische Datensätze und Schnittstellen erforderlich, da EMF nur RGB-Farben (Rot-Grün-Schwarz) unterstützt. Zu den erweiterten Farbräumen gehören CMYK (Cyan-Magenta-Yellow-Black) und Spotfarbraum, die häufig im kommerziellen Druck verwendet werden.
Publisher verwendet die Farbzuordnung, um erweiterte Farben im EMF-Dokument darzustellen. Publisher erstellt eine Farbtabelle für alle im Dokument verwendeten Farben und ersetzt die tatsächlichen Farben im EMF durch Farb-IDs. Der Typ für die Farb-ID ist COLORREF. Dies ist der gleiche Typ, der für RGB-Farben verwendet wird. Informationen zur COLORREF-Struktur finden Sie unter COLORREF.
Um Farb-IDs im EMF wieder in den Erweiterungsfarbraum aufzulösen, ruft das Add-In über die HrResolveColor-Methode der IMsoDocExporterSite-Schnittstelle an Publisher zurück. Das Add-In übergibt Publisher einen Schnittstellenzeiger an eine IDOCEXCOLOR-Schnittstelle als einen der Parameter an HrResolveColor. Publisher übernimmt die Farb-IDs, die auch im Aufruf von HrResolveColor angegeben sind, konvertiert sie in erweiterte Farben (RGB, CMYK oder Spotfarbe) und übergibt sie über die Methoden in der IDOCEXCOLOR-Schnittstelle an das Add-In zurück.
Vektorfarbe und neu eingefärbte Bilder
Vektorfarben sind alle COLORREF-Werte , die das Add-In von Publisher empfängt. Beispiel: Textfarbe, Linienstrichfarbe und Farbe für metafile recolor.For example, text color, line stroke color, and color for metafile recolor. Wenn die Farbzuordnung aktiviert ist, verwendet Publisher eine Farb-ID für COLORREF anstelle eines echten RGB-Farbwerts. Wenn Publisher dem Add-In einen IMsoDocExporterSite-Schnittstellenzeiger bereitstellt, indem die SetDocExporterSite-Methode der IMsoDocExporter-Schnittstelle aufgerufen wird, sollte das Add-In immer die IMsoDocExporterSite::HrResolveColor-Methode aufrufen, um die COLORREF in eine erweiterte Farbe zu konvertieren, die das Add-In über die Methoden in der IDOCEXCOLOR-Schnittstelle empfängt.
Um die Vektorfarbzuordnung zu unterstützen, muss das Add-In folgende Aktionen ausführen:
Implementieren sie Klassenunterstützung für eine IDOCEXCOLOR-Schnittstelle . Mit den Methoden in dieser Schnittstelle kann Publisher erweiterte Farben an das Add-In zurückgeben.
Speichern Sie die folgenden Farbzustandswerte aus den semantischen Datensätzen im EMF zwischen.
Legen Sie die Vordergrundfarbe für die Neufärbung fest. Dies wird über die DocExComment_ColorInfo-Struktur festgelegt.
Legen Sie die Hintergrundfarbe für die Neufärbung fest. Dies wird über die DocExComment_ColorInfo-Struktur festgelegt.
Bestimmen Sie, wann die Farbzuordnung aktiviert ist. Dies wird über die DocExComment_ColorEnable-Struktur festgelegt.
Erstellen Sie für eine Vektorfarbe eine IDOCEXCOLOR-Schnittstelle mit der Farb-ID, sodass IDOCEXCOLOR::GetUnresolvedRGB die Farb-ID zurückgibt. Das Add-In sollte die IMsoDocExporterSite::HrResolveColor-Methode mit der IDOCEXCOLOR-Schnittstelle und zwischengespeicherten Farbzuständen aufrufen. Publisher ruft die IDOCEXCOLOR-Schnittstellenmethoden mit der endgültigen Farbe auf, die RGB, CMYK, Spot oder Registrierungsfarbton sein kann.
Wenn entweder Vordergrund- oder Hintergrundfarbe für die Neufärbung aus einem EMF-semantischen Datensatz angegeben wird, sollte das Add-In Bilder im Add-In neu einfärben (z. B. Metadateien oder Rasterbilder).
Nicht neu eingefärbte Bilder
EMF unterstützt CMYK-Bilder mit GDI+. Daher können Bilder im EMF entweder RGB oder CMYK sein. Wenn es sich bei dem Bild um ein CMYK-Bild handelt, muss das Add-In das Bild in den Zielfarbraum konvertieren.
Publisher verwaltet einen Zielfarbraum für das Dokument. Das Add-In kann diesen Zielfarbraum verwenden, indem die IMsoDocExporterSite::HrConvertImageColorSpace-Methode mit dem Farbraum des Bilds aufgerufen wird.
Farbe aus EPS-Dateien
Encapsulated Postscript (EPS) ist ein Metadateityp, der erweiterte Farbräume unterstützt. Benutzer, die EPS-Bilder in ein Publisher-Dokument einbetten, erwarten, dass die Farbinformationen in der Ausgabe im festen Format verwendet werden. Innerhalb von Publisher wird das EPS in ein EMF mit EPS-bezogenen semantischen Datensätzen konvertiert. Diese EMF wird dann in die EMF-Datei der Seite eingebettet, die die Anwendung an das Add-In übergibt.
Um Farben in EPS-Dateien zu unterstützen, muss das Add-In folgende Aktionen ausführen:
Rufen Sie die IMsoDocExporterSite::SetEPSInfo-Methode für DocExComment_EPSColor Datensätze auf, die im EMF gefunden wurden.
Extrahieren Sie das CMYK-Image aus dem DocExComment_EPSColorCMYKJPEG Datensatz im EMF. Dieser Datensatz enthält ein binäres Objekt, bei dem es sich um den tatsächlichen CMYK-JPEG-Dateistream handelt. Verwenden Sie es, um das RGB-Bild zu ersetzen, das im nachfolgenden Aufruf der StretchDIBits-Funktion angegeben wurde.
Der DocExComment_EPSColorSpotImage Datensatz enthält Spotfarbinformationen für das nachfolgende RGB-Bild, bei dem es sich immer um ein Indexbild handelt. Das Add-In muss das Spotbild in den Zielfarbraum konvertieren.
Das Add-In kann optional die IMsoDocExporterSite:: HrGetSpotRecolorInfo-Methode aufrufen, um die Zielfarbe des Dokuments von Publisher abzurufen. Anschließend kann das Add-In das nachfolgende RGB-Bild neu einfärben, indem Farben aus der Palette des RGB-Bilds den im DoxExComment_EPSColorSpotImage-Datensatz angegebenen flTintMin- und flTintMax-Farbtons zugeordnet werden. Die Leuchtkraft für jede Farbe der Palette wird für die Zuordnung verwendet.
Beachten Sie, dass der DocExComment_EPSStart Datensatz nur informativ ist. Das Add-In kann diesen Datensatz ignorieren.
SetDocExporterSite
Publisher ruft SetDocExporterSite auf, um das Add-In mit einem Zeiger auf eine IMsoDocExporterSite-Schnittstelle bereitzustellen. Die IMsoDocExporterSite-Schnittstelle macht Methoden verfügbar, die erweiterte Farbunterstützung ermöglichen.
void SetDocExporterSite(
IMsoDocExporterSite* pDocExporterSite
);
Der pDocExporterSite-Parameter gibt den Schnittstellenzeiger auf die IMsoDocExporterSite-Schnittstelle an.
HrSetPageHeightForPagination
Eine Anwendung kann die HrSetPageHeightForPagination-Methode aufrufen, um die Seitenhöhe in Punkt anzugeben.
HRESULT HrSetPageHeightForPagination(
float dytfPageHeight
);
Einige Anwendungen verwalten das Dokument des Benutzers in einem nichtpaginierten Format. In diesen Fällen paginiert das Add-In das Dokument mithilfe der Seitenhöhe, die von der Anwendung im Aufruf von HrSetPageHeightForPagination angegeben wurde. Der dytfPageHeight-Parameter gibt die Seitenhöhe in Punkt an.
Nach dem Angeben der Seitenhöheninformationen übergibt die Anwendung das Add-In im gesamten Dokument als einzelne IN-Memory-EMF-Datei in einem Aufruf von HrAddPageFromEmf. Das Add-In verwendet dann die Seitenhöhe und die EMF-Datei, um das Dokument zu paginieren.
Das Add-In gibt die Paginierungsinformationen in nachfolgenden Aufrufen der HrGetPageBreaks-Methode an die Anwendung zurück.
HrGetPageBreaks
Eine Anwendung kann die HrGetPageBreaks-Methode aufrufen, um die Anzahl und den Speicherort von Seitenumbrüchen für Dokumente abzurufen, die vom Add-In paginiert werden.
HRESULT HrGetPageBreaks(
float* rgdytfPageBreaks,
int* pcchPageBreaks,
BOOL* pfCanTrustLastBreakIsEndOfDocument
);
Nachdem das Add-In ein Dokument mit der von der HrSetPageHeightForPagination-Methode angegebenen Seitenhöhe paginiert hat, gibt es die Paginierungsinformationen in nachfolgenden Aufrufen zurück, die die Anwendung an die HrGetPageBreaks-Methode sendet.
Der Parameter rgdytfPageBreaks ist ein Zeiger auf ein Array von Gleitkommawerten, die die Positionen der Seitenumbrüche in Punkt angeben. Das erste Element im Array (Index 0) ist die Position des ersten Seitenwechsels, das zweite Element die Position des zweiten Seitenwechsels usw. Daher steigen die Werte dieser Elemente sukzessive an.
Der Parameter pcchPageBreaks ist ein Zeiger auf einen ganzzahligen Wert, der die Anzahl der Seitenumbrüche im Dokument angibt.
Der PfCanTrustLastBreakIsEndOfDocument-Parameter gibt an, ob die Position des letzten Seitenumbruchs das Ende des Dokuments oder der Anfang der letzten Seite des Dokuments ist. Ein true-Wert gibt an, dass der letzte Seitenwechsel das Ende des Dokuments ist.
Die Anwendung ruft HrGetPageBreaks zweimal auf, um die Paginierungsinformationen abzurufen. Beim ersten Aufruf ruft die Anwendung HrGetPageBreaks auf, um die Anzahl der Seitenumbrüche zu erhalten.
HrGetPageBreaks(NULL, &nPageBreaks, NULL);
Die Anwendung ruft dann hrGetPageBreaks ein zweites Mal auf, um die tatsächlichen Speicherorte abzurufen. Beim zweiten Aufruf übergibt die Anwendung einen Puffer mit ausreichender Größe, um das Array von Seitenwechselpositionen aufzunehmen.
HrGetPageBreaks(rgPageBreaks, &nPageBreaks, fCanStopAtLastPageBreak);
Nachdem die Seitenwechselinformationen vom Add-In empfangen wurden, initiiert die Anwendung den Exportprozess im festen Format erneut, beginnend mit einem Aufruf der HrCreateDoc-Methode , gefolgt von einem Aufruf von HrAddPageFromEmf für jede der Seiten, die durch die Seitenwechselinformationen angegeben werden.
HrAddOutlineNode
Publisher ruft die HrAddOutlineNode-Methode auf, um dem Add-In eine Struktur zu übergeben, die einen Knoten in einer vom Benutzer navigierbaren Gliederung für das exportierte Dokument beschreibt.
HRESULT HrAddOutlineNode(
int idNodeParent
const MSODOCEXOUTLINENODE* pNode
);
Der Exportcode im festen Format kann die von der HrAddOutlineNode-Methode übergebenen Informationen verwenden, um eine vom Benutzer navigierbare Gliederung des Exportdokuments zu erstellen. Aus Sicht des Benutzers wird jeder Knoten in der Gliederung durch einen Titeltext dargestellt, der einer bestimmten Position innerhalb des Dokuments zugeordnet ist.
Jeder Aufruf von HrAddOutlineNode gibt Informationen für einen einzelnen Knoten in dieser Gliederung an. Jeder Knoten wird durch eine Knoten-ID identifiziert, die innerhalb der Gliederung eindeutig ist. Die ID 0 ist für den Stammknoten reserviert. Die Gliederung ist hierarchisch, d. h., sie verfügt über eine Strukturstruktur, in der jeder Knoten über einen einzelnen übergeordneten Knoten und null oder mehr untergeordnete Knoten verfügt.
Der erste Parameter für HrAddOutlineNode stellt die ID des Knotens bereit, der dem übergebenen Knoten übergeordnet ist.
Publisher ruft immer HrAddOutlineNode für einen übergeordneten Knoten auf, bevor die -Methode für die untergeordneten Elemente des übergeordneten Knotens aufgerufen wird. Anders ausgedrückt: Der Exportcode verfügt bereits über die Knoteninformationen für den Knoten, der durch den parameter idNodeParent identifiziert wird. Die einzige Ausnahme ist der anfängliche Aufruf von HrAddOutlineNode , der den Stammknoten angibt. Für diesen Aufruf ist der Wert von idNodeParent0.
Zusätzliche Informationen, die der Exportcode für jeden Knoten benötigt, werden von HrAddOutlineNode in einer MSODOCEXOUTLINENODE-Struktur übergeben, auf die der pNode-Parameter zeigt.
typedef struct _MsoDocexOutlineNode
{
int idNode {};
WCHAR rgwchNodeText[cwchMaxNodeText];
int iDestPage {};
float dytfvDestPage {};
float dxtfvDestOffset {};
float dytfvDestOffset {};
} MSODOCEXOUTLINENODE;
Die Member des MSODOCEXOUTLINENODE werden wie folgt beschrieben:
idNode Die ID für den Knoten. Der Wert -1 gibt an, dass dieser Knoten keine untergeordneten Knoten in der Gliederung haben kann. Andernfalls verfügt dieses Element über einen Wert, der im gesamten Dokument eindeutig ist.
rgwchNodeText Eine Unicode-Zeichenfolge, die den Titeltext für jeden Knoten darstellt. Dieser Text muss nicht in der Gliederung eindeutig sein.
iDestPage Die Seitenzahl der Seite, die die Zielposition im Dokument enthält.
dytfvDestPage Die Höhe der Zielseite in Punkt. Der durch das dytfvDestOffset-Element angegebene Offset ist relativ zur linken oberen Ecke der Seite. Einige Typen mit festem Format verwenden jedoch ein Koordinatensystem, das relativ zur linken unteren Ecke der Seite ist. Für diese Arten von Dokumenten ist die Seitenhöhe erforderlich, um den Offset zu konvertieren.
dxtfvDestOffset Der horizontale Offset der Zielposition auf der Zielseite.
dytfvDestOffset Der vertikale Offset der Zielposition auf der Zielseite.
HrAddDocumentMetadataString
Publisher ruft die HrAddDocumentMetadataString-Methode auf, um Dokumentmetadaten in Form einer Unicode-Zeichenfolge anzugeben.
HRESULT HrAddDocumentMetadataString(
MSODOCEXMETADATA metadataType,
const WCHAR* pwchValue
);
Der metadatatype-Parameter gibt den Typ der Metadaten an, die durch die Zeichenfolge dargestellt werden. Der metadatatype-Parameter muss einer der folgenden Werte aus dem MSODOCEXMETADATA-Enumerationstyp sein.
Tabelle 8. Aufgezählte Werte von MSODOCEXMETADATA
Wert |
Beschreibung |
---|---|
msodocexMetadataTitle |
Der Titel des Dokuments. |
msodocexMetadataAuthor |
Der Autor des Dokuments |
msodocexMetadataSubject |
Zeichenfolge, die den Gegenstand des Dokuments (z. B. Wirtschaft oder Wissenschaft) beschreibt. |
msodocexMetadataKeywords |
Schlüsselwort, das für den Dokumentinhalt relevant ist. |
msodocexMetadataCreator |
Der Ersteller des Dokuments, möglicherweise anders als der Autor. |
msodocexMetadataProducer |
Der Produzent des Dokuments, der sich möglicherweise vom Autor oder Ersteller unterscheidet. |
msodocexMetadataCategory |
Zeichenfolge, die den Typ des Dokuments (z. B. Memo, Artikel oder Buch) beschreibt. |
msodocexMetadataStatus |
Status des Dokuments. In diesem Feld kann angegeben werden, wo sich das Dokument im Veröffentlichungsprozess befindet (z. B. Entwurf oder Final). |
msodocexMetadataComments |
Sonstige für das Dokument relevante Kommentare. |
Für ein bestimmtes Dokument kann jedem Metadatentyp nur eine Zeichenfolge zugeordnet sein. Wenn das Dokument also beispielsweise mehrere Schlüsselwörter enthält, werden diese als eine verkettete Zeichenfolge an das Add-In übergeben.
Der pwchValue-Parameter gibt eine Unicode-Zeichenfolge an, die die Metadaten selbst enthält.
Wie das Add-In die Textzeichenfolgenmetadaten in das exportierte Dokument integriert, hängt von den Implementierungsdetails des Exportcodes und dem Typ des im exportierten Dokument verwendeten festen Formats ab.
HrAddDocumentMetadataDate
Publisher ruft die HrAddDocumentMetadataDate-Methode auf, um Dokumentmetadaten in Form einer FILETIME-Struktur anzugeben.
HRESULT HrAddDocumentMetadataDate(
MSODOCEXMETADATA metadataType,
const FILETIME* pftLocalTime
);
Der metadatatype-Parameter gibt den Typ der Metadaten an, die durch die FILETIME-Struktur dargestellt werden. Der metadatatype-Parameter muss einer der folgenden Werte aus dem MSODOCEXMETADATA-Enumerationstyp sein.
Tabelle 9. Aufgezählte Werte von MSODOCEXMETADATA
Wert |
Beschreibung |
---|---|
msodocexMetadataCreationDate |
Das Erstellungsdatum für das Dokument. |
msodocexMetadataModDate |
Das Datum der letzten Änderung des Dokuments. |
Der Parameter pftLocalTime gibt einen Zeiger auf eine FILETIME-Struktur an, die die Datums- und Uhrzeitinformationen für die Metadaten enthält. Der folgende Codeausschnitt veranschaulicht, wie diese Informationen aus der -Struktur extrahiert werden.
SYSTEMTIME st = { 0 };
WCHAR s[100];
FileTimeToSystemTime(pfiletime, &st);
swprintf(s, 99, L" %04d-%02d-%02dT%02d:%02d:%02dZ", st.wYear % 10000,
st.wMonth % 100, st.wDay % 100, st.wHour % 100, st.wMinute % 100,
st.wSecond % 100);
Wie das Add-In die Datums- und Uhrzeitmetadaten in das exportierte Dokument integriert, hängt von den Implementierungsdetails des Exportcodes und dem Typ des im exportierten Dokument verwendeten festen Formats ab.
HrFinalize
Publisher ruft die HrFinalize-Methode am Ende des Dokumentexportprozesses auf.
HRESULT HrFinalize();
Der Code, der den Export im festen Format implementiert, sollte HrFinalize verwenden, um Aufgaben wie das Leeren von Datenpuffern, das Schreiben der verbleibenden Daten auf den Datenträger und das Freigeben von Arbeitsspeicher und anderen Ressourcen auszuführen.
Zusammenfassung
Sie können die Exportfunktion mit festem Format von Office-Anwendungen erweitern, indem Sie die IMsoDocExporter-Schnittstelle implementieren. Die Methoden dieser Schnittstelle stellen einen Kanal bereit, über den Office-Anwendungen mit dem Add-In den visuellen Inhalt und die semantischen Informationen im zu exportierenden Dokument kommunizieren können. Der visuelle Inhalt des Dokuments wird dem Add-In als eine oder mehrere erweiterte In-Memory-Metadateien bereitgestellt. Die semantischen Informationen werden in diesem EMF als speziell formatierte Kommentardatensätze bereitgestellt. Zusätzliche Methoden in der Schnittstelle ermöglichen es Office-Anwendungen, Metadaten und Strukturinformationen zum Dokument zu kommunizieren.
Weitere Ressourcen
Weitere Informationen finden Sie in den folgenden Ressourcen: