CAM:: PDF имеет генератор отчетов шрифта, доступный как утилита командной строки или через вызов библиотеки. При выполнении "listfont.pl file.pdf", Вы производитесь как это:
Page 1:
Name: F1.0
Type: TrueType
BaseFont: NZUXSR+Impact
Encoding: MacRomanEncoding
Widths: yes
Characters: 0-255
Embedded: yes
Name: F2.0
Type: TrueType
BaseFont: XSFKRA+ArialMT
Encoding: MacRomanEncoding
Widths: yes
Characters: 0-255
Embedded: yes
Вы можете добавить XDocumentType
к существующему XDocument
, но это должен быть первый добавленный элемент. Документация по этому поводу расплывчата.
Спасибо Jeroen за указание на удобный подход использования AddFirst
в комментариях. Этот подход позволяет вам написать следующий код, который показывает, как добавить XDocumentType
после того, как XDocument
уже содержит элементы:
var doc = XDocument.Parse("<a>test</a>");
var doctype = new XDocumentType("a", "-//TEST//", "test.dtd", "");
doc.AddFirst(doctype);
В качестве альтернативы вы можете использовать Add
, чтобы добавить XDocumentType
к существующему XDocument
, но предостережение заключается в том, что никаких других элементов не должно существовать, поскольку он должен быть первым.
XDocument xDocument = new XDocument();
XDocumentType documentType = new XDocumentType("Books", null, "Books.dtd", null);
xDocument.Add(documentType);
С другой стороны, следующее недопустимо и приведет к InvalidOperationException: "
xDocument.Add(new XElement("Books"));
xDocument.Add(documentType); // invalid, element added before doctype
Просто передайте его в XDocument
конструктор ( полный пример ):
XDocument doc = new XDocument(
new XDocumentType("a", "-//TEST//", "test.dtd", ""),
new XElement("a", "test")
);
или используйте XDocument.Add
( XDocumentType
необходимо добавить перед корневым элементом):
XDocument doc = new XDocument();
doc.Add(new XDocumentType("a", "-//TEST//", "test.dtd", ""));
doc.Add(XElement.Parse("<a>test</a>"));