Укажите параметры рендеринга при преобразовании в 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 имеет ограниченное количество опций для редактируемых форм, таких как текстовое поле, поле со списком и checkbox. 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-Java
Document doc = new Document(dataDir + "SaveOptions.PdfImageCompression.rtf");
PdfSaveOptions options = new PdfSaveOptions();
options.setImageCompression(PdfImageCompression.JPEG);
options.setPreserveFormFields(true);
doc.save(dataDir + "SaveOptions.PdfImageCompression.pdf", options);
PdfSaveOptions options17 = new PdfSaveOptions();
options17.setCompliance(PdfCompliance.PDF_17);
options17.setImageCompression(PdfImageCompression.JPEG);
options17.setJpegQuality(100);// Use JPEG compression at 50% quality to reduce file size
options17.setImageColorSpaceExportMode(PdfImageColorSpaceExportMode.SIMPLE_CMYK);
doc.save(dataDir + "SaveOptions.PdfImageComppression_17.pdf", options17);

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

Свойство 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-Java
// For complete examples and data files, please go to //
// https://github.com/aspose-words/Aspose.Words-for-Java
// Open a document
Document doc = new Document(dataDir + "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
PdfSaveOptions options = new PdfSaveOptions();
options.setExportDocumentStructure(true);
doc.save(dataDir + "PdfSaveOptions.ExportDocumentStructure.pdf", options);

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// For complete examples and data files, please go to //
// https://github.com/aspose-words/Aspose.Words-for-Java
// Open a document
Document doc = new Document();
// Add a custom document property that doesn't use the name of some built in
// properties
doc.getCustomDocumentProperties().add("Company", "My value");
// Configure the PdfSaveOptions like this will display the properties
// in the "Document Properties" menu of Adobe Acrobat Pro
PdfSaveOptions options = new PdfSaveOptions();
options.setCustomPropertiesExport(PdfCustomPropertiesExport.STANDARD);
doc.save(dataDir + "PdfSaveOptions.CustomPropertiesExport.pdf", 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-Java
// For complete examples and data files, please go to //
// https://github.com/aspose-words/Aspose.Words-for-Java
// The path to the documents directory.
Document doc = new Document(dataDir + "TestFile.docx");
PdfSaveOptions options = new PdfSaveOptions();
options.getOutlineOptions().setDefaultBookmarksOutlineLevel(1);
options.setHeaderFooterBookmarksExportMode(HeaderFooterBookmarksExportMode.FIRST);
dataDir = dataDir + "ExportHeaderFooterBookmarks_out.pdf";
doc.save(dataDir, options);

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

rendering-options-when-converting-to-pdf-aspose-words-java-1

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

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

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// For complete examples and data files, please go to //
// https://github.com/aspose-words/Aspose.Words-for-Java
// Open a document
Document doc = new Document(dataDir + "Rendering.doc");
PdfSaveOptions options = new PdfSaveOptions();
options.getOutlineOptions().setHeadingsOutlineLevels(3);
options.getOutlineOptions().setExpandedOutlineLevels(1);
doc.save(dataDir + "Rendering.SaveToPdfWithOutline.pdf", options);

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

rendering-options-when-converting-to-pdf-aspose-words-java-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-Java
// For complete examples and data files, please go to //
// https://github.com/aspose-words/Aspose.Words-for-Java
// Open a document
Document doc = new Document(dataDir + "Rendering.doc");
// If we want to convert the document to .pdf, we can use a SaveOptions
// implementation to customize the saving process
PdfSaveOptions options = new 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.getDownsampleOptions().setResolution(36);
// We can set a minimum threshold for downsampling
// This value will prevent the second image in the input document from being
// downsampled
options.getDownsampleOptions().setResolutionThreshold(128);
doc.save(dataDir + "PdfSaveOptions.DownsampleOptions.pdf", options);

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

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

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

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

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

Режим встраивания шрифтов Преимущества Недостатки
Full Полезно, если вы хотите отредактировать полученный результат PDF позже, добавив или изменив текст. Включены все шрифты, следовательно, присутствуют все глифы. Поскольку некоторые шрифты имеют большой размер (несколько мегабайт), их встраивание без подстановки может привести к получению больших выходных файлов.
Subset Поднабор полезен, если вы хотите уменьшить размер выходного файла.

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

Если несколько PDFs сохранены с поднаборами шрифтов и собраны вместе, то объединенный документ PDF может содержать шрифт, содержащий много ненужных поднаборов.

Встраивание полных шрифтов в 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-Java
// Open a Document
Document doc = new Document(dataDir + "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.
PdfSaveOptions options = new PdfSaveOptions();
options.setEmbedFullFonts(true);
String outPath = dataDir + "Rendering.EmbedFullFonts_out.pdf";
// The output PDF will be embedded with all fonts found in the document.
doc.save(outPath, options);

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

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Open a Document
Document doc = new Document(dataDir + "Rendering.doc");
// To subset fonts in the output PDF document, simply create new PdfSaveOptions
// and set EmbedFullFonts to false.
PdfSaveOptions options = new PdfSaveOptions();
options.setEmbedFullFonts(false);
dataDir = dataDir + "Rendering.SubsetFonts_out.pdf";
// 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.
doc.save(dataDir, 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 Type 1:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Open a Document
Document doc = new Document(dataDir + "Rendering.doc");
// To disable embedding of core fonts and subsuite PDF type 1 fonts set
// UseCoreFonts to true.
PdfSaveOptions options = new PdfSaveOptions();
options.setUseCoreFonts(true);
String outPath = dataDir + "Rendering.DisableEmbedWindowsFonts_out.pdf";
// The output PDF will not be embedded with core fonts such as Arial, Times New
// Roman etc.
doc.save(outPath);

Поскольку средства просмотра 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-Java
// Open a Document
Document doc = new Document(dataDir + "Rendering.doc");
// To disable embedding standard windows font use the PdfSaveOptions and set the
// EmbedStandardWindowsFonts property to false.
PdfSaveOptions options = new PdfSaveOptions();
options.setFontEmbeddingMode(PdfFontEmbeddingMode.EMBED_NONE);
// The output PDF will be saved without embedding standard windows fonts.
doc.save(dataDir + "Rendering.DisableEmbedWindowsFonts.pdf");

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