SkPDF Fix PDF/A to be more valid
Some produced PDFs are recognized by veraPDF 0.13.2
(http://verapdf.org/software/) as valid PDF/A-2B.
BUG=skia:4535
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1864173004
Review URL: https://codereview.chromium.org/1864173004
diff --git a/src/pdf/SkPDFMetadata.cpp b/src/pdf/SkPDFMetadata.cpp
index 5a1d7aa..4ca1903 100644
--- a/src/pdf/SkPDFMetadata.cpp
+++ b/src/pdf/SkPDFMetadata.cpp
@@ -263,7 +263,7 @@
// Validate that we haven't written outside of our string.
SkASSERT(out == &output.writable_str()[output.size()]);
*out = '\0';
- return std::move(output);
+ return output;
}
SkPDFObject* SkPDFMetadata::createXMPObject(const UUID& doc,
@@ -285,7 +285,6 @@
"<pdfaid:conformance>B</pdfaid:conformance>\n"
"%s" // ModifyDate
"%s" // CreateDate
- "%s" // MetadataDate
"%s" // xmp:CreatorTool
"<dc:format>application/pdf</dc:format>\n"
"%s" // dc:title
@@ -303,7 +302,6 @@
SkString creationDate;
SkString modificationDate;
- SkString metadataDate;
if (fCreation) {
SkString tmp;
fCreation->toISO8601(&tmp);
@@ -318,25 +316,25 @@
SkASSERT(0 == count_xml_escape_size(tmp));
modificationDate = sk_string_printf(
"<xmp:ModifyDate>%s</xmp:ModifyDate>\n", tmp.c_str());
- metadataDate = sk_string_printf(
- "<xmp:MetadataDate>%s</xmp:MetadataDate>\n", tmp.c_str());
}
-
- SkString title =
- escape_xml(get(fInfo, "Title"), "<dc:title><rdf:Alt><rdf:li>",
- "</rdf:li></rdf:Alt></dc:title>\n");
- SkString author =
- escape_xml(get(fInfo, "Author"), "<dc:creator><rdf:Bag><rdf:li>",
- "</rdf:li></rdf:Bag></dc:creator>\n");
+ SkString title = escape_xml(
+ get(fInfo, "Title"),
+ "<dc:title><rdf:Alt><rdf:li xml:lang=\"x-default\">",
+ "</rdf:li></rdf:Alt></dc:title>\n");
+ SkString author = escape_xml(
+ get(fInfo, "Author"), "<dc:creator><rdf:Bag><rdf:li>",
+ "</rdf:li></rdf:Bag></dc:creator>\n");
// TODO: in theory, XMP can support multiple authors. Split on a delimiter?
- SkString subject = escape_xml(get(fInfo, "Subject"),
- "<dc:description><rdf:Alt><rdf:li>",
- "</rdf:li></rdf:Alt></dc:description>\n");
- SkString keywords1 =
- escape_xml(get(fInfo, "Keywords"), "<dc:subject><rdf:Bag><rdf:li>",
- "</rdf:li></rdf:Bag></dc:subject>\n");
- SkString keywords2 = escape_xml(get(fInfo, "Keywords"), "<pdf:Keywords>",
- "</pdf:Keywords>\n");
+ SkString subject = escape_xml(
+ get(fInfo, "Subject"),
+ "<dc:description><rdf:Alt><rdf:li xml:lang=\"x-default\">",
+ "</rdf:li></rdf:Alt></dc:description>\n");
+ SkString keywords1 = escape_xml(
+ get(fInfo, "Keywords"), "<dc:subject><rdf:Bag><rdf:li>",
+ "</rdf:li></rdf:Bag></dc:subject>\n");
+ SkString keywords2 = escape_xml(
+ get(fInfo, "Keywords"), "<pdf:Keywords>",
+ "</pdf:Keywords>\n");
// TODO: in theory, keywords can be a list too.
SkString creator = escape_xml(get(fInfo, "Creator"), "<xmp:CreatorTool>",
@@ -347,7 +345,7 @@
SkASSERT(0 == count_xml_escape_size(instanceID));
return new PDFXMLObject(sk_string_printf(
templateString, modificationDate.c_str(), creationDate.c_str(),
- metadataDate.c_str(), creator.c_str(), title.c_str(),
+ creator.c_str(), title.c_str(),
subject.c_str(), author.c_str(), keywords1.c_str(),
documentID.c_str(), instanceID.c_str(), keywords2.c_str()));
}