2015-09-11 3 views
0

Я пытаюсь установить некоторые атрибуты в HTML -> PDF-файле, используя EVOPDF.Настройка имени и автора документа PDF с помощью EVOPDF в файле, совместимом с PDF/A-1b

Кажется довольно простым установить свойства PdfDocumentInfo. Как указано в документации: http://www.evopdf.com/help/azure-html-to-pdf/html/T_EvoPdf_HtmlToPdfClient_PdfDocumentInfo.htm

Однако Adobe Acrobat Reader показывает пустые поля при просмотре File-> Properties. И редактор Hex не находит ни одной из данных.

Я попробовал решение «EvoHtmlToPdfDemo_VS2013» v6.4, которое я скачал здесь http://www.evopdf.com/download.aspx, но PdfDocumentInfo не найден во всем решении. Таким образом, нет демонстрационного кода, чтобы показать, как должны быть установлены свойства документа.

Смотрите мой код ниже

var converter = new HtmlToPdfConverter(); 
     converter.ConversionDelay = 0; 
     converter.ClipHtmlView = false; 

     var paperSize = PaperSizeToSizeF(pPaperSize); 
     var pdfPageOrientation = (pIsLandscape) ? PdfPageOrientation.Landscape : PdfPageOrientation.Portrait; 
     converter.PdfDocumentOptions.PdfPageOrientation = pdfPageOrientation; 
     converter.PdfDocumentOptions.PdfStandardSubset = PdfStandardSubset.Pdf_A_1b; 

     //IMPORTANT FOR COMPLIANCE 
     converter.PdfDocumentInfo.AuthorName = "Mike de Klerk"; 
     converter.PdfDocumentInfo.Title = "PDF/A-1b Test"; 
     converter.PdfDocumentInfo.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library."; 
     converter.PdfDocumentInfo.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance"; 
     converter.PdfDocumentInfo.CreatedDate = DateTime.Now; 

EDIT:

При использовании EvoPdf.Document объекта я могу получить это сделать. Но я не могу сделать это, используя объект EvoPdf.HtmlToPdfConverter. Я предпочитаю использовать последний объект, потому что большая часть документации относится к HtmlToPdfConverter. См. Код ниже для использования объекта EvoPdf.Document.

 // Create the PDF document where to add the HTML documents 
     var pdfDocument = new Document(); 

     // Set license key received after purchase to use the converter in licensed mode 
     // Leave it not set to use the converter in demo mode 
     pdfDocument.LicenseKey = LicenseKey; 
     pdfDocument.DocumentInformation.Author = "Mike de Klerk"; 
     pdfDocument.DocumentInformation.Title = "PDF/A-1b Test"; 
     pdfDocument.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library."; 
     pdfDocument.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance"; 
     pdfDocument.DocumentInformation.CreationDate = DateTime.Now; 

EDIT 2:

Существует HtmlToPdfConverter.PdfDocumentOptions.DocumentObject.DocumentInformation объект. Но DocumentObject имеет значение null перед преобразованием. В документации сказано

ссылка на внутренний объект Document инициализирован преобразователем при преобразовании

DocumentObject действительно существует после преобразования, и я могу подтвердить, что DocumentInformation свойства не установлены после преобразования.

EDIT 3:

установка также DocumentInformation в пре/пост преобразования, кажется, события не получить его работу.

converter.PrepareRenderPdfPageEvent += (eventParams) => 
{ 
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Author = "Mike de Klerk"; 
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Title = "PDF/A-1b Test"; 
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library."; 
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance"; 
    converter.PdfDocumentOptions.DocumentObject.DocumentInformation.CreationDate = DateTime.Now; 
}; 
converter.AfterRenderPdfPageEvent += (eventParams) => 
{ 
    eventParams.Page.Document.DocumentInformation.Author = "Mike de Klerk"; 
    eventParams.Page.Document.DocumentInformation.Title = "PDF/A-1b Test"; 
    eventParams.Page.Document.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library."; 
    eventParams.Page.Document.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance"; 
    eventParams.Page.Document.DocumentInformation.CreationDate = DateTime.Now; 
}; 
converter.ConvertHtmlFileToStream(pContentHtmlFile, pOutputStream); 

РЕДАКТИРОВАТЬ 4:

даже не работает при преобразовании в Document объекта во-первых, установка DocumentInformation тогда, и записать Document в выходной поток. Я чувствую, что я бегу из возможных способов решения здесь ...

 var documentObject = converter.ConvertHtmlFileToPdfDocumentObject(pContentHtmlFile); 
     documentObject.DocumentInformation.Author = "Mike de Klerk"; 
     documentObject.DocumentInformation.Title = "PDF/A-1b Test"; 
     documentObject.DocumentInformation.Subject = "Testing generation of PDF/A-1b compliant file by EVOPDF library."; 
     documentObject.DocumentInformation.Keywords = "HTML, PDF, Converter, PDF/A-1b. compliance"; 
     documentObject.DocumentInformation.CreationDate = DateTime.Now; 
     documentObject.Save(pOutputStream); 

EDIT 5:

Я предположил, что, когда один делает documentObject.DocumentInformation.Author = "Value";, и она имеет сеттера, он на самом деле множество. но это не так. Следовательно, не имеет значения, где я пытаюсь установить эти значения. Их просто не помнят. Это должно быть ошибка. Почему существует даже класс EvoPdf.DocumentInfo и класс EvoPdf.PdfDocumentInfo? Один использует AuthorName, а другой Author.И больше этих различий.

+0

@EvoPdfHelpDesk Помогите мне пожалуйста :) –

ответ

0

Вы не можете изменить производителя документов PDF, сгенерированных конвертером EVO HTML в PDF. Это свойство доступно только для чтения.

+0

Я написал это успешно в PDF, используя 'EvoPdf.Document'. Но использование 'EvoPdf.HtmlToPdfConverter' просто не работает. В собственности есть общественный сеттер. Как вы можете сказать, что это только для чтения? –

+0

А как насчет остальных свойств, которые не записываются в файл? –

+0

Я мог бы задать автора, например, с помощью htmlToPdfConverter.PdfDocumentInfo.AuthorName = "author". Но свойство Producer доступно только для чтения. – EvoPdf

0

Проблема в том, что вы создаете документ PDF/A. Этот стандарт не позволяет задать имя автора.

+0

Это неверно, метаданные поддерживаются в файле PDF/A-1b. Но это должно быть записано в поток XMP. http://www.pdfa.org/2009/06/xmp-metadata-in-pdfa-%E2%80%93-metadata-and-the-xmp-format/ –

0

Метаданные, такие как автор, заголовок и т. Д., Должны быть записаны в поток XMP в формате PDF, совместимом с PDF/A-1b. See XMP Metadata in PDF/A

EvoPdf записывает метаданные в поток, который не является потоком XMP. Поэтому, создавая файл совместимого с PDf/A-1b и добавляя (не-XMP-поток) метаданные, вы получите файл, который не соответствует PDF/A-1b. Таким образом, метаданные просто не написаны, чтобы поддерживать совместимость с файлом.

Существует Adobe XMP Toolkit, который может помочь вам добиться добавления метаданных в файл, совместимый с PDF/A-1b, созданный с помощью EvoPdf. Но я не знаю, возможно ли, когда файл подписан и/или защищен паролем во время генерации с помощью EvoPdf.