Задаване на опции за рендиране при конвертиране в PDF
Форматът PDF е формат с фиксирана страница, който е много популярен сред потребителите и широко се поддържа от различни приложения, защото документ PDF изглежда еднакво на всяко устройство. Поради тази причина превръщането в PDF е важна характеристика на Aspose.Words.
PDF е сложен формат. Няколко етапа на изчисления са необходими в процеса на конвертиране на документ до PDF, включително и изчислението на оформлението. Тъй като тези етапи включват сложни изчисления, те отнемат много време. Също така, форматът PDF е доста сложен сам по себе си. Той има специфична файлова структура, графичен модел и вграждане на шрифтове. Освен това той разполага с някои сложни функции на изхода, като например тагове за структурата на документа, криптиране, цифрови подписи и редактируеми формуляри.
Aspose.Words оформлението имитира начина, по който работи оформлението на страницата на Microsoft Word. Следователно Aspose.Words прави PDF изходните документи да изглеждат възможно най-близо до това, което можете да видите в Microsoft Word. Понякога е необходимо да зададете допълнителни опции, които могат да повлияят на резултата от записването на документ във формат PDF. Тези опции могат да бъдат зададени чрез използването на клас PdfSaveOptions, съдържащ свойствата, които определят как ще се показва изходът PDF.
Някои примери за употреба на PdfSaveOptions са дадени по-долу.
В момента можете да запазите PDF 1.7, PDF 2.0, PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2u, и PDF/UA-1 формати. Използвайте изброяването PdfCompliance, за да зададете нивото на съответствие на стандартите PDF. Имайте предвид, че при формат PDF/A размерът на изходния файл е по-голям от нормалния PDF Размер на файла.
PdfCompliance.PdfA1a и PdfCompliance.PdfA1b са маркирани като остарели.
За повече информация относно PDF/A вижте следващата статия, " научете характеристиките на конвертирането до PDF/A".
Създаване на PDF документ с Попълними формуляри
Също така е възможно да експортирате формуляри за попълване от документ Microsoft Word в изход PDF, който има формуляри за попълване вместо обикновен текст. Използвайте свойството PreserveFormFields, за да запишете документ като PDF с формуляри за попълване.
Обърнете внимание, че за разлика от Microsoft Word, формат PDF има ограничен брой опции за редактируеми формуляри, като например текстово поле, combobox и checkbox. Microsoft Word има повече типове формуляри, например контрола за избор на календарна дата. Като цяло не е възможно напълно да се имитира Microsoft Word поведение в PDF. Следователно, в някои сложни случаи PDF изходът може да се различава от това, което виждате в Microsoft Word.
Примерът с код по-долу показва как да запишете документ като PDF с формуляри за попълване с определена компресия и качество:
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.
Примерът код по-долу показва как да експортирате отметки от първия горен / долен колонтитул на секция:
Резултатът PDF от този пример е показан по-долу:
Когато HeaderFooterBookmarksExportMode е зададено на първо място и документът има четни и нечетни горни колонтитули/долни колонтитули или различен горен/долен колонтитул на първа страница, отметките се експортират за първите уникални горни/долни колонтитули в секция.
Можете също да експортирате заглавия в изход 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 от този пример е показан по-долу.:
Намаляване на изображенията, за да се намали размерът на документа
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); |
Резолюцията се изчислява според реалния размер на изображението на страницата.
Вграждане на шрифтове във формат PDF
Aspose.Words също така ви позволява да контролирате как шрифтовете са вградени в получените PDF документи. Шрифтовете трябва да бъдат вградени във всеки документ PDF, за да се гарантира, че документът може да бъде правилно рендиран на всяка машина (Вижте повече подробности за рендирането на шрифта в раздела Използване На TrueType Шрифтове). По подразбиране Aspose.Words вгражда подмножество от шрифтове, използвани в документа, в генерирания PDF. В този случай само глифовете (знаците), използвани в документа, се запазват в PDF.
Кога да се използват пълни шрифтове и кога да се подменят
Има начин да се посочи опция за Aspose.Words за вграждане на пълни шрифтове. Допълнителни подробности, заедно с някои предимства и недостатъци на всяка настройка, са описани в таблицата по-долу.
Режим На Вграждане На Шрифтове | Предимства | Недостатъци |
---|---|---|
Full |
Полезно, когато искате да редактирате получения PDF по-късно чрез добавяне или модифициране на текста. Всички шрифтове са включени, следователно всички глифове са налице. | Тъй като някои шрифтове са големи (няколко мегабайта), вграждането им без подмножество може да доведе до големи изходни файлове. |
Subset |
Подмножаването е полезно, ако искате да запазите размера на изходния файл по-малък. | Потребителят не може напълно да добавя или редактира текста, като използва подмножествения шрифт в изходния документ PDF. Това е така, защото не всички глифове на шрифта са налице. Ако няколко PDFs са записани с подмножествени шрифтове и са сглобени заедно, тогава комбинираният PDF документ може да има шрифт, съдържащ много ненужни подмножества. |
Вграждане на пълни шрифтове в PDF
Свойството EmbedFullFonts ви позволява да укажете как Aspose.Words вгражда шрифтове в изходен документ PDF.
- За да вградите пълни шрифтове в изходния документ PDF, задайте EmbedFullFonts да е вярно
- За да подмножите шрифтове, когато записвате до PDF, задайте EmbedFullFonts на невярно
Следващият пример показва как да вградите пълни шрифтове в изходния документ 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 или да пропуснете вграждането им и да използвате стандартни шрифтове PDF или системни шрифтове на целевата машина. Използването на която и да е от тези опции обикновено води до значително намаляване на размера на файла за PDF документи, генерирани от Aspose.Words.
- Тъй като тези опции са взаимно изключващи се, трябва да изберете само един по един.
- Когато записвате с PDF/A-1 съответствие, всички използвани шрифтове трябва да бъдат вградени в документа PDF. Когато записвате с това съответствие, свойството UseCoreFonts трябва да бъде настроено на невярно, а свойството FontEmbeddingMode трябва да бъде настроено на EmbedAll.
Вграждане На Основни Шрифтове
Опцията за вграждане на основни шрифтове може да бъде активирана или деактивирана с помощта на свойството UseCoreFonts
. Когато е настроено на вярно, следните най-популярни шрифтове от “истински Тип” (основни шрифтове 14) не са вградени в изходния документ PDF:
Arial
Times New Roman
Courier New
Symbol
Тези шрифтове се заменят със съответните основни шрифтове от тип 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, шрифтовете от истински Тип “Ариал” и “пъти нов римски” не са вградени в документ PDF. В този случай зрителят на клиента разчита на шрифтовете, които са инсталирани на операционната система на клиента. Когато свойството FontEmbeddingMode е зададено на EmbedNone, Aspose.Words не вграждайте никакви шрифтове.
Примерът по-долу показва как да зададете Aspose.Words да пропуснете вграждането на Ариални и времена нови римски шрифтове в документ 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.