PDFium Delphi Component Docs

Unitatea FPdfXmp

Unit: FPdfXmp
Furnizează un arbore de proprietăți XMP conștient de namespace-uri și mărginit, plus ajutoare pentru stream-urile de metadate PDF

Core API

constructor TPdfXmpPacket.Create;
class function TPdfXmpPacket.Parse(const Xml: TPdfXmpString): TPdfXmpPacket;
class function TPdfXmpPacket.ParseUtf8(const Data: TBytes): TPdfXmpPacket;
function TPdfXmpPacket.Clone: TPdfXmpPacket;
function TPdfXmpPacket.TryGetSimpleValue(const NamespaceUri, Name: TPdfXmpString; out Value: TPdfXmpString): Boolean;
procedure TPdfXmpPacket.SetSimpleValue(const NamespaceUri, PreferredPrefix, Name, Value: TPdfXmpString);
procedure TPdfXmpPacket.SetArrayValues(const NamespaceUri, PreferredPrefix, Name: TPdfXmpString; ContainerKind: TPdfXmpContainerKind; const Values: array of TPdfXmpString);
procedure TPdfXmpPacket.SetLanguageAlternative(const NamespaceUri, PreferredPrefix, Name, Language, Value: TPdfXmpString);
function TPdfXmpPacket.ToXml(PaddingLength: Integer = -1): TPdfXmpString;
function TPdfXmpPacket.ToUtf8(PaddingLength: Integer = -1): TBytes;
function ReadPdfXmpPacket(const PdfData: TBytes; out PacketData: TBytes): Boolean;
function ParsePdfXmpPacket(const PdfData: TBytes): TPdfXmpPacket;
function WritePdfXmpPacketIncremental(const PdfData: TBytes; Packet: TPdfXmpPacket): TBytes;
function ComparePdfAInfoAndXmp(const Info: TPdfAMetadataValues; Packet: TPdfXmpPacket): TPdfAMetadataReport;
function SynchronizePdfAInfoToXmp(const Info: TPdfAMetadataValues; Packet: TPdfXmpPacket): TPdfAMetadataFields;
function TPdf.ReadXmpPacket: TPdfXmpPacket;
function TPdf.InspectPdfAMetadata: TPdfAMetadataReport;
function TPdf.NormalizePdfAMetadata(Stream: TStream; AllowSignedDocument: Boolean = False): Boolean;
function TPdf.SaveAsWithXmpPacket(Stream: TStream; Packet: TPdfXmpPacket; AllowSignedDocument: Boolean = False): Boolean;

Value model

TypeDescription
EPdfXmpErrorExcepție ridicată pentru intrări XMP sau de metadate PDF malformate, nesigure sau nesuportate
TPdfXmpString / TPdfXmpStringsȘir XMP Unicode și forma sa de vector dinamic
TPdfXmpContainerKindpxckSimple pentru o proprietate simplă, pxckBag pentru un bag fără ordine, pxckSequence pentru o secvență ordonată, pxckAlternative pentru o alternativă de limbi sau pxckResource pentru o resursă imbricată
TPdfXmpValueKindTipul valorii pxvkText, pxvkUri sau pxvkResource pentru o resursă RDF imbricată conservată
TPdfXmpNamespace / TPdfXmpNamespacesPerechea namespace Prefix și Uri și forma sa de vector dinamic
TPdfXmpQualifier / TPdfXmpQualifiersCalificator cu câmpurile NamespaceUri, Prefix, Name și Value și forma sa de vector dinamic
TPdfXmpValue / TPdfXmpValuesValoare tipizată cu câmpurile Kind, Text, Language, Qualifiers și RawXml și forma sa de vector dinamic
TPdfXmpProperty / TPdfXmpPropertiesProprietate cu câmpurile NamespaceUri, Prefix, Name, ContainerKind, Qualifiers și Values și forma sa de vector dinamic
TPdfAMetadataValuesValorile decodificate de PDFium plus un set explicit de prezență pentru cele opt chei Info mapate de ISO 19005-1
TPdfAMetadataComparison / TPdfAMetadataReportDovezi de tip RDF, valoare și dată per câmp, plus setul agregat de neconcordanțe și starea parsării XMP

TPdfXmpPacket Members

MemberDescription
CreateCreează un packet vid cu valori implicite sigure pentru înfășurătoare și padding
Parse / ParseUtf8Parsează XML Unicode sau octeți UTF-8 într-un arbore de proprietăți mărginit
CloneReturnează o copie profundă independentă a packetului
NamespaceCount / PropertyCountReturnează numărul de namespace-uri sau de proprietăți înregistrate
TryGetPropertyGăsește o proprietate după URI de namespace și nume local și returnează indexul ei
TryGetSimpleValueReturnează textul unei proprietăți simple, când aceasta există
RegisterNamespaceÎnregistrează un prefix preferat pentru un URI de namespace, evitând coliziunile de prefixe
RemovePropertyElimină proprietatea potrivită, conștientă de namespace
SetSimpleValueCreează sau înlocuiește o proprietate scalară de text
SetArrayValuesCreează sau înlocuiește un bag, o secvență sau o alternativă din valori de text
SetLanguageAlternativeAdaugă sau înlocuiește o valoare marcată cu limbă într-un container alternativ
ToXml / ToUtf8Serializează packetul ca XML Unicode sau octeți UTF-8, cu padding opțional
HasPacketWrapperControlează dacă serializarea emite înfășurătoarea de instrucțiuni de procesare a packetului XMP
Namespaces / PropertiesExpun vectorii de namespace-uri și de proprietăți ai packetului pentru inspecție
PacketEndMode / PacketIdExpun modul de final al înfășurătorii packetului și identificatorul packetului
PaddingLengthCitește sau stabilește lungimea implicită conservată de padding a serializării

PDF Byte Helpers

FunctionDescription
ReadPdfXmpPacketExtrage octeții stream-ului de metadate dintr-un vector complet de octeți PDF
ParsePdfXmpPacketExtrage și parsează packetul de metadate, returnând nil când nu există niciunul
WritePdfXmpPacketIncrementalReturnează octeți PDF cu un nou stream de metadate și o actualizare de catalog adăugate ca revizie incrementală
ComparePdfAInfoAndXmpCompară toate intrările Info prezente din Table 1 din ISO 19005-1 cu proprietățile XMP tipizate corespunzătoare
SynchronizePdfAInfoToXmpRepară doar proprietățile mapate în neconcordanță și returnează câmpurile pe care le-a schimbat

Behaviour

Declarațiile de namespace necunoscute, namespace-urile proprietăților, calificatorii, bag-urile RDF, secvențele, alternativele, resursele URI, resursele imbricate, valorile xml:lang, ID-urile de packet, modurile de final și padding-ul trec round-trip prin arborele de proprietăți

Serializarea atribuie prefixe fără coliziuni, păstrând în același timp prefixele cunoscute ori de câte ori este posibil, și emite UTF-8 fără conversii dependente de locale

ReadXmpPacket returnează nil când un document nu are stream de metadate și respinge sursele progresive incomplete

SaveAsWithXmpPacket scrie un document nativ proaspăt și adaugă o actualizare de metadate și de catalog, apoi înlocuiește atomic destinațiile de tip fișier

Comparația PDF/A rezolvă proprietățile după URI de namespace, cere rdf:Alt cu x-default pentru Title și Subject, cere un rdf:Seq cu un singur element pentru Author și cere valori simple pentru Keywords, Creator, Producer, CreationDate și ModDate

Egalitatea textului este exactă după ce PDFium decodifică șirurile Info în Unicode; egalitatea datelor compară valorile locale potrivite fără zone sau același moment UTC când ambele valori poartă zone

Sincronizarea conservă proprietățile fără legătură, namespace-urile necunoscute și alternativele de limbă non-implicite și emite date XMP UTC canonice când o dată Info poartă un fus orar

Security and limits

Example

var
  Packet: TPdfXmpPacket;
begin
  Packet := Pdf1.ReadXmpPacket;
  if Packet = nil then
    Packet := TPdfXmpPacket.Create;
  try
    Packet.SetSimpleValue('http://ns.adobe.com/xap/1.0/', 'xmp', 'CreatorTool', 'PDFium Delphi Component');
    Pdf1.SaveAsWithXmpPacket('C:\Output\metadata.pdf', Packet);
  finally
    Packet.Free;
  end;
end;