You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Tilman Hausherr (JIRA)" <ji...@apache.org> on 2014/09/18 08:31:33 UTC

[jira] [Updated] (PDFBOX-2356) Error Validating PDF Archive Document with half hour timezone

     [ https://issues.apache.org/jira/browse/PDFBOX-2356?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tilman Hausherr updated PDFBOX-2356:
------------------------------------
    Summary: Error Validating PDF Archive Document with half hour timezone  (was: Error Validating PDF Archive Document)

> Error Validating PDF Archive Document with half hour timezone
> -------------------------------------------------------------
>
>                 Key: PDFBOX-2356
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-2356
>             Project: PDFBox
>          Issue Type: Bug
>          Components: Preflight
>    Affects Versions: 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8
>            Reporter: Cetra Free
>         Attachments: pdfafile.pdf
>
>
> When trying to validate a PDF archive file (attached to this ticket) we get the following error:
> {code}
> 7.2   - Error on MetaData, ModificationDate present in the document catalog dictionary doesn't match with XMP information
> {code}
> This is because the the Modification Date in the Dictionary is parsed differently from the XMP Metadata.  The XMP Metadata is correct, but the Date from the Dictionary appends an extra 30 minutes.
> The following is the raw COSObject from the PDF File
> {code}
> COSString{D:20140917122850+09'30'}
> {code}
> The Long value should be *1410922730000*
> The *org.apache.pdfbox.util.DateConverter* *parseDate* method returns the Date with Long *1410924530000* which is 30 minutes ahead.
> XMP Modification Date is parsed differently and returns the correct date.
> This means that validation will fail for PDF Archives.
> My suggestion would be to refactor the parseDate function to use the Standard Java library.
> Here's an example class which will be compatible with the PDF Specification:
> {code}
> static class DateParser {
>  private Map<Integer, SimpleDateFormat> formats =
>    new HashMap<Integer, SimpleDateFormat>();
>  
>  public DateParser() {
>    String expr = "";
>  
>   for(String part: Arrays.asList("yyyy", "MM", "dd", "HH", "mm", "ss", "Z")) {
>      expr = expr + part;
>      formats.put(expr.length(), new SimpleDateFormat(expr));
>    }
>  }
>  
>  public Calendar parseDate(String expr) {
>    try {
>      expr = expr.replace("D:", "").replace("'", "").replace("Z", "+0000");
>      Date date = formats.get(Math.min(expr.length(), 15)).parse(expr);
>  
>  
>      Calendar calendar =  Calendar.getInstance();
>      calendar.setTime(date);
>  
>      return calendar;
>    } catch (ParseException e) {
>      return null;
>    }
>  }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)