Формат PDF (Portable Document Format) – переносимый формат документов, разработанный компанией Adobe Systems, используется как основа для создания электронных изданий в среде программного пакета Adobe Acrobat. Формат PDF – это файловый текстовой формат, используемый для представления публикаций или других документов на любой аппаратной платформе и для любой операционной среды. Документ PDF содержит одну или более страниц. Каждая страница может содержать любые компоненты электронного издания: текст, графику и иллюстрации, информацию, обеспечивающую навигацию в электронной публикации. Также документ содержит всю служебную информацию, необходимую для правильного отображения документа.
Экспорт в формат PDF основан на документе "Adobe Portable Document Format, Version 1.3, second edition", с использованием некоторых элементов более поздних спецификаций формата.
Для уменьшения размера файла PDF использует различные методы сжатия. Для сжатия текстового материала используется алгоритм LZW ("Flate"). Для сжатия графической информации используются алгоритмы JPEG или LZW. Алгоритм JPEG - это сжатие с потерями, рекомендуется для полноцветных иллюстраций и изображений. Алгоритм LZW - это сжатие без потерь, рекомендуется для иллюстраций и изображений с небольшим количеством цветов, например графики, чарты, схемы.
Для обеспечения независимости от шрифтов PDF файл содержит описание для каждого шрифта, использованного в документе. Описание включает название, размер, стиль и другие параметры шрифта. В режиме просмотра документа, если шрифт, описанный в документе, доступен, то он используется. Если не доступен, то заменяется на подобный с тем же размером и другими характеристиками. Шрифты можно внедрять в документ. Это значительно увеличивает размер файла, но гарантирует правильное отображение документа на любом компьютере.
Цифровая подпись
Электронная цифровая подпись (ЭЦП)— реквизит электронного документа, предназначенный для защиты данного электронного документа от подделки, полученный в результате криптографического преобразования информации с использованием закрытого ключа электронной цифровой подписи и позволяющий идентифицировать владельца сертификата ключа подписи, а также установить отсутствие искажения информации в электронном документе.
Управление цифровой подписью из кода осуществляется через класс StiPdfExportSettings. За это отвечают следующие свойства этого класса:
|
...
public bool UseDigitalSignature
public bool UseLocalMachineCertificates
public bool GetCertificateFromCryptoUI
public string SubjectNameString
...
|
По умолчанию устанавливаются следующие значения:
|
...
UseDigitalSignature = false;
UseLocalMachineCertificates = true;
GetCertificateFromCryptoUI = true;
SubjectNameString = string.Empty;
...
|
Пример использования:
|
...
StiReport report = new StiReport();
report.Load("c:\\test.mrt");
report.Render(false);
StiPdfExportSettings settings = new StiPdfExportSettings();
settings.UseDigitalSignature = true;
settings.GetCertificateFromCryptoUI = false;
settings.UseLocalMachineCertificates = true;
settings.SubjectNameString = "John Smith <johns@google.com>";
report.ExportDocument(StiExportFormat.Pdf, "c:\\test.pdf", settings);
...
|
|
Шифрование
Документ PDF может быть зашифрован для защиты своего содержимого от несанкционированного доступа. Пользователь может задать следующие параметры шифрования:
Пароль пользователя;
Пароль владельца;
Разрешения доступа;
Длина ключа.
Управление шифрованием из кода осуществляется через класс StiPdfExportSettings. За шифрование отвечают следующие свойства этого класса:
|
...
public string PasswordInputUser
public string PasswordInputOwner
public StiUserAccessPrivileges UserAccessPrivileges
public StiPdfEncryptionKeyLength KeyLength
...
|
Перечисление StiUserAccessPrivileges содержит следующие элементы (флаги):
None,
PrintDocument,
ModifyContents,
CopyTextAndGraphics,
AddOrModifyTextAnnotations,
All
Перечисление StiPdfEncryptionKeyLength содержит следующие элементы:
Bit40 - 40-битное шифрование;
Bit128 - 128-битное шифрование;
Bit256_r5 - 256-битное шифрование с внутренней ревизией версии 5 (Acrobat 9);
Bit256_r6 - 256-битное шифрование с внутренней ревизией версии 6 (Acrobat X).
По умолчанию устанавливаются следующие значения:
|
...
PasswordInputUser = string.Empty;
PasswordInputOwner = string.Empty;
UserAccessPrivileges = StiUserAccessPrivileges.All;
KeyLength = StiPdfEncryptionKeyLength.Bit40;
...
|
Пример использования:
|
...
StiReport report = new StiReport();
report.Load("c:\\test.mrt");
report.Render(false);
StiPdfExportSettings settings = new StiPdfExportSettings();
settings.PasswordInputUser = "user";
settings.PasswordInputOwner = "owner";
settings.UserAccessPrivileges = StiUserAccessPrivileges.PrintDocument;
settings.KeyLength = StiPdfEncryptionKeyLength.Bit128;
report.ExportDocument(StiExportFormat.Pdf, "c:\\test.pdf", settings);
...
|
|
Параметры экспорта
Параметры экспорта в формат PDF описываются в классе StiPdfExportSettings. Ниже приводится таблица с описанием всех свойств этого класса.
Название
|
Тип
|
Описание
|
AutoPrintMode
|
bool
|
Если необходимо, чтобы при открытии документа Pdf появлялось окно печати, необходимо данное свойство установить в значение true.
|
AllowEditable
|
bool
|
При создании отчета, у компоненты можно устанавливать включить (установив флажок) свойство Редактируемый. Это предоставляет возможность, в построенном отчете, редактировать эти компненты. Свойство AllowEditable предоставляет возможность разрешить или запретить изменение редактируемых компонентов в документе Pdf.
|
CertificateData
|
byte
|
При помощи данного свойства, можно передавать сертификат как массив-байт.
|
CertificatePassword
|
string
|
При помощи данного, если это необходимо (зависит от сертификата), свойства указывается пароль к сертификату.
|
DigitalSignatureReason
|
string
|
Свойство цифровой подписи, в котором указывается основание ее использования.
|
DigitalSignatureLocation
|
string
|
Свойство цифровой подписи, в котором указывается ее применение.
|
DigitalSignatureContactInfo
|
string
|
Свойство цифровой подписи, в котором указывается контактная информация того, кто подписал.
|
DigitalSignatureSignedBy
|
string
|
Свойство цифровой подписи. Как правило, данные о том, кем подписан документ, берутся из сертификата и встраиваются в документ Pdf. Иногда, возникает необходимость изменить лицо, которое подписало документ. Это возможность предоставляет данное свойство.
|
ImageQuality
|
float
|
качество изображений; может принимать значение от 0.0 (низкое качество) до 1.0 (высокое качество); по умолчанию 0.75
|
ImageResolution
|
float
|
разрешение изображений, точек на дюйм; может принимать любое значение, по умолчанию 100
|
ImageFormat
|
|
при помощи данного свойства можно указать формат для изображений: монохромный или черно-белые. По умолчанию, изображения экспортируются как цветные.
|
DitheringType
|
enum
|
при помощи данного свойства, определяется формат монохромного изображения (с дизерингом или без).
|
EmbeddedFonts
|
bool
|
внедрять файлы шрифтов внутрь файла PDF; если true, то все необходимые шрифты внедряются внутрь, и PDF показывается одинаково на любом компьютере (никакие дополнительные установленные шрифты не нужны); если false, то шрифты не внедряются; по умолчанию true
|
StandardPdfFonts
|
bool
|
использовать только стандартные шрифты, которые устанавливаются вместе с Adobe Acrobat Reader и их не требуется внедрять в файл; все шрифты заменяются на похожие стандартные (Courier, Helvetica, Times-Roman); по умолчанию false
|
Compressed
|
bool
|
сжимать файл PDF; уменьшает размер файла за счет сжатия текстовой информации (изображения сжимаются всегда); по умолчанию true
|
UseUnicode
|
bool
|
использовать для записи текста в кодировке Unicode; если false, то в отчете может быть только 190 разных символов, и много проблем с национальными символами; если true – можно использовать любые символы; по умолчанию true
|
ExportRtfTextAsImage
|
bool
|
экспортировать объекты RichText как изображения; если false, то экспорт пытается преобразовать RichText объекты в примитивы PDF; если true, то RichText записывается как изображение; по умолчанию false
|
PasswordInputUser
|
string
|
пароль пользователя (см. Encryption); по умолчанию пустая строка
|
PasswordInputOwner
|
string
|
пароль владельца (см. Encryption); по умолчанию пустая строка
|
PdfACompliance
|
bool
|
Использовать или не использовать Pdf/A соглашение. Если значение true, то соглашение будет использоваться.
|
UserAccessPrivileges
|
enum
|
разрешения доступа пользователя (см. Encryption); по умолчанию StiUserAccessPrivileges.All
|
KeyLength
|
enum
|
длина ключа шифрования (см. Encryption); по умолчанию StiPdfEncryptionKeyLength.Bit40
|
UseDigitalSignature
|
bool
|
использовать цифровую подпись документа; по умолчанию false
|
GetCertificateFromCryptoUI
|
bool
|
для выбора необходимого сертификата использовать интерфейс системной библиотеки криптографии; если false - поиск сертификата ведется по идентификатору сертификата без использования интерфейса; по умолчанию true
|
SubjectNameString
|
string
|
идентификатор сертификата; это имя владельца сертификата (полная строка) или часть имени (подстрока); по умолчанию пустая строка
|
UseLocalMachineCertificates
|
bool
|
производить поиск сертификатов в хранилище локального компьютера; если false, то поиск сертификатов производится в хранилище текущего пользователя; по умолчанию false
|
CreatorString
|
string
|
поле "Creator" в описании документа (имя приложения, которое создало оригинальный файл); если не задано (пустая строка), то используется статическое свойство StiOptions.Export.Pdf.CreatorString; по умолчанию пустая строка
|
KeywordsString
|
string
|
поле "Keywords" в описании документа (ключевые слова для поиска документа); если не задано (пустая строка), то используется статическое свойство StiOptions.Export.Pdf.KeywordsString; по умолчанию пустая строка
|
ImageCompressionMethod
|
enum
|
метод сжатия изображений - Jpeg (с потерями) или Flate (без потерь); по умолчанию StiPdfImageCompressionMethod.Jpeg
|
Если используется UseUnicode, то для Acrobat Reader 5.0 нужно обязательно Embedded fonts = true.
Если используется UseUnicode + шифрование, то обязательно должно быть Embedded fonts = true.
Чтобы уменьшить размер выходного файла, можно сделать следующее:
Включить Compressed;
Не включать Embedded fonts;
Если Embedded fonts необходим, то обязательно включить ReduceFontFileSize.
|
Статические параметры
Кроме класса StiPdfExportSettings параметры экспорта в PDF также задаются при помощи статических свойств. Каждое свойство имеет глобальное влияние на любой экспорт в формат PDF из кода или при помощи Web или WinForms Viewer-а. Все свойства с описанием приведены ниже. Для доступа к свойствам нужно добавлять префикс StiOptions.Export.Pdf... например, StiOptions.Export.Pdf.DivideSegmentPages.
Название
|
Тип
|
Описание
|
DivideSegmentPages
|
bool
|
разбивать сегментированные страницы на отдельные страницы выбранного формата; если false - страницы передаются как есть, без разбивки на части; по умолчанию true
|
ConvertDigitsToArabic
|
bool
|
конвертировать ASCII цифры в арабские цифры; по умолчанию false
|
ArabicDigitsType
|
enum
|
выбор типа арабских цифр; по умолчанию Standard
|
ReduceFontFileSize
|
bool
|
оптимизировать внедряемые шрифты - исключать символы, которые не встречаются в отчете; если false - шрифты не изменяются; по умолчанию true
|
AllowEditablePdf
|
bool
|
экспортировать редактируемые поля как редактируемые объекты PDF (при этом шрифты, которые используются в редактируемых полях, не оптимизируются); если false - редактируемые поля экспортируются как простой текст; по умолчанию false
|
AllowImageComparer
|
bool
|
использовать оптимизатор изображений, т.е. удалять дубликаты изображений (см. Common export settings); если false - изображения передаются как есть; по умолчанию true
|
AllowImageTransparency
|
bool
|
использовать прозрачность при экспорте изображений; по умолчанию true
|
AllowInheritedPageResources
|
bool
|
хранить ресурсы страниц в родительском словаре и наследовать от него; если false - ресурсы страниц указываются в каждой странице; это свойство критично для некоторых программ обработки PDF-файлов; по умолчанию true
|
AllowExtGState
|
bool
|
использовать команды управления прозрачностью при создании документа; если false - команды не используются; это свойство критично для некоторых программ обработки PDF-файлов; по умолчанию true
|
CreatorString
|
string
|
поле "Creator" в описании документа (имя приложения, которое создало оригинальный файл); по умолчанию строка "Stimulsoft Reports.NET"
|
KeywordsString
|
string
|
поле "Keywords" в описании документа (ключевые слова для поиска документа); по умолчанию пустая строка
|
|