获取itext 7 pdf文档的自定义元数据

时间:2016-12-11 19:31:03

标签: pdf itext itext7

我使用下面给出的链接来使用:Get and set metadata for itext pdf document

在itext 5中获取元数据

目前,我也可以使用代码片段在itext7中获取元数据:

      <script type='text/javascript'>
 function men(e){
    var ok = $(e).attr('id');
     var ol = $(e).attr('id');
    // alert(ol[0].currentTime); --- GIVES ME UNDEFINED
    $.ajax({
          type : 'POST',
           url : 'updatetime.php', 
          data :  {ok: ok, om: om}, 
            success : function(r)
           {

           }
    });
 }
 </script>

     <?php
$tl="channel";
$ooa="playing";
$played="played";
$timeline = mysqli_query($con, "SELECT * FROM plays WHERE streamers_type ='$tl' AND played !='$played' GROUP BY streamers_id ORDER BY id ASC") or die ();
    while($row = mysqli_fetch_array($timeline)) {
    $id = $row['id'];
    $file1 = $row['file1'];
    $video_name = $row['video_name'];
    $video_type = $row['video_type'];
    ?>  

  <video class="uopi spinal" id="<?php echo $id ?>"  style="height:180px; width:100%!important;" autoplay muted onended="run(this)" ontimeupdate="men(this)"><source src="plays/<?php echo $file1 ?>" type="<?php echo $video_type ?>"></video>

            <?php } ?>

我不知道如何使用相同的方式获取自定义属性。 我可以使用以下方式设置自定义元数据:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
info.getAuthor();
info.getCreator();
info.getProducer();

如何在不对密钥名称进行硬编码的情况下以编程方式获取此值? 此外,有没有办法获得这些元数据值(包括自定义元数据),而无需实际写入:

pdfDoc.getDocumentInfo().setMoreInfo("Test", "test");

2 个答案:

答案 0 :(得分:2)

不用担心,得到了答案。 之前没有意识到:

PdfDictionary map = info.getPdfObject();

返回地图类型对象。解析地图以获取包括自定义属性在内的所有键值对。 以下是完整的代码段:

import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfObject;
import com.itextpdf.kernel.pdf.PdfReader;

import java.io.File;
import java.io.IOException;
import java.util.Map.Entry;

public class GetInfo {

    public static final String SRC = "hello.pdf";

    public static void main(String[] args) throws IOException {
        File file = new File(SRC);
        file.getParentFile().mkdirs();
        new GetInfo().manipulatePdf(SRC);
    }

    public void manipulatePdf(String src) throws IOException {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
        PdfDocumentInfo info = pdfDoc.getDocumentInfo();
        PdfDictionary map = info.getPdfObject();
        for(Entry<PdfName, PdfObject> entry : map.entrySet()){
            System.out.println(entry.getKey().getValue() + " - " + entry.getValue() );
        }
        pdfDoc.close();
    }
}

答案 1 :(得分:0)

在iText 7.0.8+中,您可以通过这种方式获取pdf元数据映射。

npm run build

您可以使用以下方法设置自定义元数据:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
//get metadata map
PdfDictionary catalog = pdfDoc.getTrailer();
PdfDictionary map = catalog.getAsDictionary(PdfName.Info);
for (Map.Entry<PdfName, PdfObject> entry : map.entrySet()) {
 System.out.println(entry.getKey().getValue() + " - " + entry.getValue());
}
pdfDoc.close();