Формат 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 файл содержит описание для каждого шрифта, использованного в документе. Описание включает название, размер, стиль и другие параметры шрифта. В режиме просмотра документа, если шрифт, описанный в документе, доступен, то он используется. Если не доступен, то заменяется на подобный с тем же размером и другими характеристиками. Шрифты можно внедрять в документ. Это значительно увеличивает размер файла, но гарантирует правильное отображение документа на любом компьютере.

 

Информация

 

При экспорте в PDF поля, для которых свойство Printable установлено в значение false, экспортируются в отдельный слой. Этот слой не выводится на печать в Adobe Acrobat.  При этом стоит учитывать, что в режиме совместимости PDF-A есть ограничение - слои не поддерживаются, поэтому свойство Printable игнорируется.

 

Если же происходит Печать в PDF из web-вьювера - то такие поля не экспортируются.

 

 

 

Цифровая подпись

 

Электронная цифровая подпись (ЭЦП)— реквизит электронного документа, предназначенный для защиты данного электронного документа от подделки, полученный в результате криптографического преобразования информации с использованием закрытого ключа электронной цифровой подписи и позволяющий идентифицировать владельца сертификата ключа подписи, а также установить отсутствие искажения информации в электронном документе.

 

Управление цифровой подписью из кода осуществляется через класс StiPdfExportSettings. За это отвечают следующие свойства этого класса:

 

C#

...

public bool UseDigitalSignature

public bool UseLocalMachineCertificates

public bool GetCertificateFromCryptoUI

public string SubjectNameString

...

 

 

По умолчанию устанавливаются следующие значения:

 

C#

...

UseDigitalSignature = false;

UseLocalMachineCertificates = true;

GetCertificateFromCryptoUI = true;

SubjectNameString = string.Empty;

...

 

 

Пример использования:

 

C#

...

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 может быть зашифрован для защиты своего содержимого от несанкционированного доступа. Пользователь может задать следующие параметры шифрования:

strel11 Пароль пользователя;

strel11 Пароль владельца;

strel11 Разрешения доступа;

strel11 Длина ключа.

 

Управление шифрованием из кода осуществляется через класс StiPdfExportSettings. За шифрование отвечают следующие свойства этого класса:

 

C#

...

public string PasswordInputUser

public string PasswordInputOwner

public StiUserAccessPrivileges UserAccessPrivileges

public StiPdfEncryptionKeyLength KeyLength

...

 

 

Перечисление StiUserAccessPrivileges содержит следующие элементы (флаги):

strel11 None,

strel11 PrintDocument,

strel11 ModifyContents,

strel11 CopyTextAndGraphics,

strel11 AddOrModifyTextAnnotations,

strel11 All

 

Перечисление StiPdfEncryptionKeyLength содержит следующие элементы:

strel11 Bit40 - 40-битное шифрование;

strel11 Bit128 - 128-битное шифрование;

strel11 Bit256_r5 - 256-битное шифрование с внутренней ревизией версии 5 (Acrobat 9);

strel11 Bit256_r6 - 256-битное шифрование с внутренней ревизией версии 6 (Acrobat X).

 

По умолчанию устанавливаются следующие значения:

 

C#

...

PasswordInputUser = string.Empty;

PasswordInputOwner = string.Empty;

UserAccessPrivileges = StiUserAccessPrivileges.All;

KeyLength = StiPdfEncryptionKeyLength.Bit40;

...

 

 

Пример использования:

 

C#

...

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.

 

Чтобы уменьшить размер выходного файла, можно сделать следующее:

strel11 Включить Compressed;

strel11 Не включать Embedded fonts;

strel11 Если 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" в описании документа (ключевые слова для поиска документа); по умолчанию пустая строка