2016-10-06 2 views
0

Je voudrais générer en Java une annotation de tampon XFDF qui aurait une image transparente à l'intérieur. J'ai beaucoup de mal à reconnaître le format dans lequel l'image est stockée et comment transformer mon image d'entrée à cette forme.Comment créer une annotation XFDF avec une image

Je sais Jusqu'à présent

  • L'élément de timbre est un enfant de l'élément Annots et correspond à l'annotation de timbre en caoutchouc. Une annotation Rubber Stamp affiche du texte ou des graphiques destinés à donner l'impression qu'ils ont été estampillés sur la page avec un tampon en caoutchouc. S'il est présent, l'élément enfant d'apparence (la touche AP dans le dictionnaire d'annotation) a la priorité sur l'attribut d'icône (touche Nom dans le dictionnaire d'annotation de tampon en caoutchouc). modèle de contenu (contenu-richtext? & contenu? & apparence? & pop-up?)
  • L'élément d'apparence est un enfant de l'élément de timbre et correspond à la clé AP dans le dictionnaire d'annotation. La valeur est une chaîne codée en base 64. Modèle de contenu Chaîne codée en base 64. Attributs

J'ai un exemple XFDF qui contient une image, quand je décode l'image que je la chance de voir une syntaxe comme ça, mais malheureusement, je ne sais pas quel genre de données brutes est présent dans < DATA MODE = " RAW " ENCODING = " HEX " > étiquette.

<DICT KEY="AP"> 
<STREAM KEY="N"> 
    <ARRAY KEY="BBox"> 
     <FIXED VAL="250"/> 
     <FIXED VAL="550"/> 
     <FIXED VAL="400"/> 
     <FIXED VAL="575"/> 
</ARRAY> 
    <INT KEY="FormType" VAL="1"/> 
    <INT KEY="Length" VAL="35"/> 
    <DICT KEY="Resources"> 
     <DICT KEY="XObject"> 
      <STREAM KEY="Im1"> 
       <INT KEY="BitsPerComponent" VAL="8"/> 
       <NAME KEY="ColorSpace" VAL="DeviceRGB"/> 
       <NAME KEY="Filter" VAL="FlateDecode"/> 
       <INT KEY="Height" VAL="150"/> 
       <INT KEY="Length" VAL="1907"/> 
       <STREAM KEY="SMask"> 
        <INT KEY="BitsPerComponent" VAL="8"/> 
        <NAME KEY="ColorSpace" VAL="DeviceGray"/> 
        <NAME KEY="Filter" VAL="FlateDecode"/> 
        <INT KEY="Height" VAL="150"/> 
        <INT KEY="Length" VAL="5690"/> 
        <NAME KEY="Subtype" VAL="Image"/> 
        <NAME KEY="Type" VAL="XObject"/> 
        <INT KEY="Width" VAL="300"/> 
        <DATA MODE="RAW" ENCODING="HEX"> 

J'ai réussi à créer une annotation de timbre en caoutchouc avec image personnalisée dans un fichier PDF à l'aide de PDFBox, mais malheureusement PDFBox ne semble pas soutenir l'exportation de ce type d'annotation à XFDF, ils ne supportent que l'exportation de formulaires (AcroForm). Je ne connais aucun autre outil en Java qui me permettra de l'exporter, sauf les outils payants.

Répondre

2

C'est une représentation HEX du format DCT (JPEG). Si vous voulez un tampon d'image transparent, vous aurez deux de ces choses dans votre XFDF, l'image elle-même et le masque.

+0

Est-ce le seul format pris en charge ou vous l'avez supposé à partir du contenu de l'exemple? Pourriez-vous me diriger vers une documentation à ce sujet? – Javo

+0

Je l'ai supposé basé sur un échantillon que j'ai fait en créant un cachet fait sur commande à partir d'un dossier de PNG utilisant Acrobat DC. La documentation de XFDF se trouve sur le lien ci-dessous https://partners.adobe.com/public/developer/en/xml/XFDF_Spec_3.0.pdf – joelgeraci

+0

J'ai essayé de convertir Base64 en texte, de convertir l'hexadécimal en texte et de sauvegarder comme un jpg et ça n'a pas marché. Mais j'avoue que j'aurais pu faire une conversion erronée. La spécification que vous m'avez indiquée ne parle pas beaucoup du format. – Javo

0

Les spécifications XFDF n'expliquent pas à quoi servent ces étiquettes dict. Devinez ils ont omis une partie cruciale de l'information. Ce fil de discussion m'a fait gagner du temps pour comprendre pourquoi l'image de base 64 résultante n'est pas importée dans Acrobat. C'est donc un XML de XOjbect.

Peut-être que les spécifications Acrobat PDF le mentionnent.