Укажите параметры рендеринга при преобразовании в PDF

Формат PDF - это формат с фиксированной страницей, который очень популярен среди пользователей и широко поддерживается различными приложениями, поскольку документ PDF выглядит одинаково на любом устройстве. По этой причине преобразование в PDF является важной функцией Aspose.Words.

PDF - сложный формат. В процессе преобразования документа в PDF требуется выполнить несколько этапов вычислений, включая расчет макета. Поскольку эти этапы включают сложные вычисления, они отнимают много времени. Кроме того, формат PDF сам по себе довольно сложен. Он имеет определенную файловую структуру, графическую модель и встроенные шрифты. Кроме того, он обладает некоторыми сложными функциями вывода, такими как теги структуры документа, шифрование, цифровые подписи и редактируемые формы.

Aspose.Words механизм верстки имитирует работу механизма верстки страниц Microsoft Word. Таким образом, Aspose.Words позволяет PDF выводимым документам выглядеть как можно ближе к тому, что вы можете видеть в Microsoft Word. Иногда необходимо указать дополнительные параметры, которые могут повлиять на результат сохранения документа в формате PDF. Эти параметры могут быть заданы с помощью класса PdfSaveOptions, содержащего свойства, которые определяют, как будут отображаться выходные данные PDF.

Ниже приведены некоторые примеры использования PdfSaveOptions.

Создание документа PDF с заполняемыми формами

Также можно экспортировать заполняемые формы из документа Microsoft Word в формат вывода PDF, который содержит заполняемые формы вместо обычного текста. Используйте свойство PreserveFormFields, чтобы сохранить документ как PDF с заполняемыми формами.

Обратите внимание, что в отличие от Microsoft Word, формат PDF имеет ограниченное количество опций для редактируемых форм, таких как текстовое поле, выпадающий список и флажок. В Microsoft Word есть больше типов форм, например, средство выбора даты в календаре. Как правило, невозможно полностью имитировать поведение Microsoft Word в PDF. Поэтому в некоторых сложных случаях выходные данные PDF могут отличаться от того, что вы видите в Microsoft Word.

В приведенном ниже примере кода показано, как сохранить документ как PDF с заполняемыми формами с заданным сжатием и качеством Jpeg:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
auto doc = MakeObject<Document>(MyDir + u"Rendering.docx");
auto saveOptions = MakeObject<PdfSaveOptions>();
saveOptions->set_ImageCompression(PdfImageCompression::Jpeg);
saveOptions->set_PreserveFormFields(true);
doc->Save(ArtifactsDir + u"WorkingWithPdfSaveOptions.PdfImageCompression.pdf", saveOptions);
auto saveOptions17 = MakeObject<PdfSaveOptions>();
saveOptions17->set_Compliance(PdfCompliance::Pdf17);
saveOptions17->set_ImageCompression(PdfImageCompression::Jpeg);
saveOptions17->set_JpegQuality(100);
saveOptions17->set_ImageColorSpaceExportMode(PdfImageColorSpaceExportMode::SimpleCmyk);
doc->Save(ArtifactsDir + u"WorkingWithPdfSaveOptions.PdfImageCompression_17.pdf", saveOptions17);

Экспорт структуры документа и пользовательских свойств

Свойство ExportDocumentStructure позволяет экспортировать структуру документа в выходные данные PDF.

PDF средства логической структуры предоставляют механизм для включения информации, касающейся структуры содержимого документа, в файл PDF. Aspose.Words сохраняет информацию о структуре документа Microsoft Word, такую как абзацы, списки, таблицы, сноски/концевые сноски и т.д.

В следующем примере показано, как сохранить документ в формате PDF, сохранив структуру документа:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a document
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Paragraphs.docx");
// Create a PdfSaveOptions object and configure it to preserve the logical structure that's in the input document
// The file size will be increased and the structure will be visible in the "Content" navigation pane
// of Adobe Acrobat Pro, while editing the .pdf
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_ExportDocumentStructure(true);
System::String outputPath = outputDataDir + u"PdfSaveOptions.ExportDocumentStructure.pdf";
doc->Save(outputPath, options);

Aspose.Words также позволяет экспортировать пользовательские свойства документа в PDF, что продемонстрировано в следующем примере:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a document
System::SharedPtr<Document> doc = System::MakeObject<Document>();
// Add a custom document property that doesn't use the name of some built in properties
doc->get_CustomDocumentProperties()->Add(u"Company", u"My value");
// Configure the PdfSaveOptions like this will display the properties
// in the "Document Properties" menu of Adobe Acrobat Pro
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_CustomPropertiesExport(PdfCustomPropertiesExport::Standard);
System::String outputPath = outputDataDir + u"PdfSaveOptions.CustomPropertiesExport.pdf";
doc->Save(outputPath, options);

Экспорт контуров из закладок и заголовков в выводе PDF

Если вы хотите экспортировать закладки в виде контуров в выходных данных PDF, вы можете использовать свойство DefaultBookmarksOutlineLevel. Это свойство определяет уровень по умолчанию в структуре документа, на котором отображаются закладки Microsoft Word. Если документ содержит закладки в верхнем/нижнем колонтитуле документа, вы можете задать свойству HeaderFooterBookmarksExportMode значение First или All, чтобы указать, как они экспортируются в выводе PDF. Закладки в верхних и нижних колонтитулах не экспортируются, если значение HeaderFooterBookmarksExportMode равно None.

В приведенном ниже примере кода показано, как экспортировать закладки из первого верхнего/нижнего колонтитула раздела:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directory.
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"TestFile.docx");
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->get_OutlineOptions()->set_DefaultBookmarksOutlineLevel(1);
options->set_HeaderFooterBookmarksExportMode(HeaderFooterBookmarksExportMode::First);
System::String outputPath = outputDataDir + u"WorkingWithPdfSaveOptions.ExportHeaderFooterBookmarks.pdf";
doc->Save(outputPath, options);

Результат PDF этого примера показан ниже:

specify-rendering-options-aspose-words-cpp-1

Если для параметра HeaderFooterBookmarksExportMode задано значение First и в документе есть четные и нечетные верхние и нижние колонтитулы или другой верхний и нижний колонтитул первой страницы, закладки экспортируются для первых уникальных верхних и нижних колонтитулов в разделе.

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

В приведенном ниже примере кода показано, как экспортировать заголовки с тремя уровнями:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a document
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->get_OutlineOptions()->set_HeadingsOutlineLevels(3);
options->get_OutlineOptions()->set_ExpandedOutlineLevels(1);
System::String outputPath = outputDataDir + u"PdfSaveOptions.SaveToPdfWithOutline.pdf";
doc->Save(outputPath, options);

Результат PDF этого примера показан ниже:

specify-rendering-options-aspose-words-cpp-2

Уменьшение размера изображений для уменьшения размера документа

Aspose.Words предоставляет возможность уменьшить размер изображений, чтобы уменьшить размер выходных данных PDF, используя свойство DownsampleOptions. Уменьшение размера изображений включено по умолчанию в свойстве DownsampleImages.

Обратите внимание, что также можно задать конкретное разрешение в свойстве Resolution или пороговое значение разрешения в свойстве ResolutionThreshold. Во втором случае, если разрешение изображения меньше порогового значения, понижающая дискретизация применяться не будет.

В приведенном ниже примере кода показано, как изменить разрешение изображений в выходном документе PDF:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a document that contains images
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
// If we want to convert the document to .pdf, we can use a SaveOptions implementation to customize the saving process
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
// We can set the output resolution to a different value
// The first two images in the input document will be affected by this
options->get_DownsampleOptions()->set_Resolution(36);
// We can set a minimum threshold for downsampling
// This value will prevent the second image in the input document from being downsampled
options->get_DownsampleOptions()->set_ResolutionThreshold(128);
System::String outputPath = outputDataDir + u"PdfSaveOptions.DownsampleOptions.pdf";
doc->Save(outputPath, options);

Разрешение рассчитывается в соответствии с реальным размером изображения на странице.

Встраивание шрифтов в формат Adobe PDF

Aspose.Words также позволяет управлять способом встраивания шрифтов в результирующие документы PDF. Шрифты необходимо встраивать в любой документ Adobe PDF, чтобы документ можно было корректно отобразить на любом компьютере (более подробную информацию о рендеринге шрифтов смотрите в разделе Использование шрифтов TrueType). По умолчанию Aspose.Words вставляет подмножество шрифтов, используемых в документе, в созданный PDF. В этом случае в PDF сохраняются только глифы (символы), используемые в документе.

Когда следует использовать полные шрифты, а когда - подмножества

Существует способ указать параметр для Aspose.Words для встраивания полных шрифтов. Более подробная информация, а также некоторые преимущества и недостатки каждой настройки описаны в таблице ниже.

Преимущества
Full
Subset

Встраивание полных шрифтов в PDF

Свойство EmbedFullFonts позволяет указать, как Aspose.Words вставляет шрифты в выходной документ PDF.

  • Чтобы вставить полные шрифты в выходной документ PDF, установите для параметра EmbedFullFonts значение true
  • Чтобы изменить шрифты при сохранении в PDF, установите для EmbedFullFonts значение false

В следующем примере показано, как полностью внедрить шрифты в выходной документ PDF:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a Document
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
// Aspose.Words embeds full fonts by default when EmbedFullFonts is set to true. The property below can be changed
// Each time a document is rendered.
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_EmbedFullFonts(true);
// The output PDF will be embedded with all fonts found in the document.
System::String outputPath = outputDataDir + u"EmbeddedFontsInPDF.EmbedAllFonts_out.pdf";
doc->Save(outputPath, options);

В следующем примере показано, как установить значение Aspose.Words для подмножества шрифтов в выходных данных PDF:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Open a Document
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
// To subset fonts in the output PDF document, simply create new PdfSaveOptions and set EmbedFullFonts to false.
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_EmbedFullFonts(false);
// The output PDF will contain subsets of the fonts in the document. Only the glyphs used
// In the document are included in the PDF fonts.
System::String outputPath = outputDataDir + u"EmbeddedFontsInPDF.EmbeddSubsetFonts_out.pdf";
doc->Save(outputPath, options);

Как управлять внедрением основных шрифтов и стандартных шрифтов Windows

Основные шрифты и стандартные шрифты Windows - это “стандартные” наборы шрифтов, которые обычно присутствуют на целевом компьютере или предоставляются средством чтения документов, поэтому их не нужно встраивать в выходные данные PDF. Отказавшись от внедрения этих шрифтов, вы можете уменьшить размер отображаемых PDF документов и при этом сохранить переносимость.

Aspose.Words предоставляет опции для выбора способа экспорта шрифтов в PDF. Вы можете либо встроить основные и стандартные шрифты в выходные данные PDF, либо пропустить их внедрение и вместо этого использовать стандартные шрифты core PDF или системные шрифты на целевом компьютере. Использование любого из этих параметров обычно приводит к значительному уменьшению размера файла для документов PDF, созданных с помощью Aspose.Words.

  • Поскольку эти варианты являются взаимоисключающими, вам следует выбирать только один за раз.
  • При сохранении с соблюдением требований PDF/A-1 все используемые шрифты должны быть встроены в документ PDF. При сохранении с соблюдением этого требования свойству UseCoreFonts должно быть присвоено значение false, а свойству FontEmbeddingMode - значение EmbedAll

Встраивание основных шрифтов

Возможность встраивания основных шрифтов может быть включена или отключена с помощью свойства UseCoreFonts. Если для него установлено значение true, следующие наиболее популярные шрифты “True Type” (базовые 14 шрифтов) не встраиваются в выходной документ PDF.:

Arial Times New Roman Courier New Symbol

Эти шрифты заменяются соответствующими шрифтами core Type 1, которые предоставляются читателем при открытии PDF.

В приведенном ниже примере показано, как установить Aspose.Words, чтобы избежать встраивания основных шрифтов и позволить читателю заменить их шрифтами PDF типа 1:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// The path to the documents directories.
System::String inputDataDir = GetInputDataDir_RenderingAndPrinting();
System::String outputDataDir = GetOutputDataDir_RenderingAndPrinting();
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
// To disable embedding of core fonts and subsuite PDF type 1 fonts set UseCoreFonts to true.
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_UseCoreFonts(true);
System::String outputPath = outputDataDir + u"EmbeddingWindowsStandardFonts.pdf";
// The output PDF will not be embedded with core fonts such as Arial, Times New Roman etc.
doc->Save(outputPath);

Поскольку средства просмотра PDF предоставляют основные шрифты на любой поддерживаемой платформе, эта опция также полезна, когда требуется большая переносимость документов. Однако основные шрифты могут отличаться от системных шрифтов.

Встраивание системных шрифтов

Эту опцию можно включить или отключить с помощью свойства FontEmbeddingMode. Если для этого свойства задано значение EmbedNonstandard, шрифты “Arial” и “Times New Roman” true type не будут встроены в документ PDF. В этом случае клиентская программа просмотра использует шрифты, установленные в операционной системе клиента. Если для свойства FontEmbeddingMode задано значение EmbedNone, Aspose.Words не вставляйте никакие шрифты.

В приведенном ниже примере показано, как установить значение Aspose.Words, чтобы не вставлять шрифты Arial и Times New Roman в документ PDF.:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
// Load the document to render.
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"Rendering.doc");
// To disable embedding standard windows font use the PdfSaveOptions and set the EmbedStandardWindowsFonts property to false.
System::SharedPtr<PdfSaveOptions> options = System::MakeObject<PdfSaveOptions>();
options->set_FontEmbeddingMode(PdfFontEmbeddingMode::EmbedNone);
// The output PDF will be saved without embedding standard windows fonts.
System::String outputPath = outputDataDir + u"EmbeddedFontsInPDF.DisableEmbedWindowsFonts_out.pdf";
doc->Save(outputPath, options);

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