Określ opcje renderowania podczas konwersji na PDF
Format PDF to format o stałej stronie, który jest bardzo popularny wśród użytkowników i szeroko obsługiwany przez różne aplikacje, ponieważ dokument PDF wygląda tak samo na każdym urządzeniu. Z tego powodu konwersja do PDF jest ważną cechą Aspose.Words.
PDF to złożony format. W procesie konwersji dokumentu na PDF wymagane jest kilka etapów obliczeń, w tym obliczenie układu. Ponieważ te etapy obejmują złożone obliczenia, są czasochłonne. Ponadto format PDF jest sam w sobie dość złożony. Ma określoną strukturę plików, model graficzny i osadzanie czcionek. Ponadto oferuje pewne złożone funkcje wyjściowe, takie jak znaczniki struktury dokumentu, szyfrowanie, podpisy cyfrowe i edytowalne formularze.
Aspose.Words silnik układu imituje sposób działania silnika układu strony Microsoft Word. Dlatego Aspose.Words sprawia, że PDF dokumenty wyjściowe wyglądają jak najbliżej tego, co widać w Microsoft Word. Czasami konieczne jest określenie dodatkowych opcji, które mogą wpłynąć na wynik zapisania dokumentu w formacie PDF. Opcje te można określić za pomocą klasy PdfSaveOptions, zawierającej Właściwości określające sposób wyświetlania danych wyjściowych PDF.
Poniżej przedstawiono kilka przykładów użycia PdfSaveOptions.
Obecnie możesz zapisać do PDF 1.7, PDF 2.0, PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2u, i PDF/UA-1 formatów. Użyj wyliczenia PdfCompliance, aby ustawić poziom zgodności z normami PDF. Zauważ, że w formacie PDF/A Rozmiar pliku wyjściowego jest większy niż zwykły rozmiar pliku PDF.
PdfCompliance.PdfA1a i PdfCompliance.PdfA1b są oznaczone jako przestarzałe.
Aby uzyskać więcej informacji na temat PDF/A, Zobacz następny artykuł " poznaj funkcje konwersji na PDF/A".
Tworzenie dokumentu PDF z formularzami do wypełnienia
Możliwe jest również eksportowanie formularzy do wypełnienia z dokumentu Microsoft Word do pliku wyjściowego PDF, który ma formularze do wypełnienia zamiast zwykłego tekstu. Użyj właściwości PreserveFormFields, aby zapisać dokument jako PDF z formularzami do wypełnienia.
Zauważ, że w przeciwieństwie do Microsoft Word format PDF ma ograniczoną liczbę opcji edytowalnych formularzy, takich jak textbox, combobox i checkbox. Microsoft Word ma więcej typów formularzy, na przykład selektor dat kalendarza. Ogólnie rzecz biorąc, nie jest możliwe pełne naśladowanie zachowania Microsoft Word w PDF. Dlatego w niektórych złożonych przypadkach Wyjście PDF może różnić się od tego, co widzisz w Microsoft Word.
Poniższy przykład kodu pokazuje, jak zapisać dokument jako PDF z formularzami do wypełnienia z określoną kompresją i jakością 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); |
Eksportowanie struktury dokumentu i właściwości niestandardowych
Właściwość ExportDocumentStructure umożliwia eksportowanie struktury dokumentu do PDF Danych Wyjściowych.
PDF obiekty struktury logicznej zapewniają mechanizm włączania informacji dotyczących struktury zawartości dokumentu do pliku PDF. Aspose.Words zachowuje informacje o strukturze z dokumentu Microsoft Word, takie jak akapity, listy, tabele, Przypisy/przypisy końcowe itp.
Poniższy przykład pokazuje, jak zapisać dokument w formacie PDF, zachowując strukturę dokumentu:
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 umożliwia również eksportowanie niestandardowych właściwości dokumentu do PDF, co pokazano w poniższym przykładzie:
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); |
Eksportowanie konturów z zakładek i nagłówków na wyjściu PDF
Jeśli chcesz wyeksportować zakładki jako kontury w output PDF, możesz użyć właściwości DefaultBookmarksOutlineLevel. Ta właściwość określa domyślny poziom w konturze dokumentu, na którym wyświetlane są zakładki Microsoft Word. Jeśli dokument zawiera zakładki w nagłówku / stopce dokumentu, możesz ustawić właściwość HeaderFooterBookmarksExportMode na First lub All, Aby określić, w jaki sposób są eksportowane na wyjściu PDF. Zakładki w nagłówkach / stopkach nie są eksportowane, gdy wartość HeaderFooterBookmarksExportMode wynosi None.
Poniższy przykład kodu pokazuje, jak wyeksportować zakładki z pierwszego nagłówka / stopki sekcji:
Wynik PDF tego przykładu pokazano poniżej:
Gdy HeaderFooterBookmarksExportMode jest ustawiony na pierwszy, a dokument ma parzyste i nieparzyste nagłówki/stopki lub inny nagłówek/stopkę pierwszej strony, Zakładki są eksportowane dla pierwszych unikalnych nagłówków/stopek w sekcji.
Możesz także eksportować nagłówki w danych wyjściowych PDF, używając właściwości HeadingsOutlineLevels. Ta właściwość określa, ile poziomów nagłówków jest zawartych w konturze dokumentu.
Poniższy przykład kodu pokazuje, jak eksportować nagłówki z trzema poziomami:
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); |
Dane wyjściowe PDF tego przykładu przedstawiono poniżej:
Zmniejszanie próbkowania obrazów w celu zmniejszenia rozmiaru dokumentu
Aspose.Words zapewnia możliwość próbkowania obrazów w dół w celu zmniejszenia rozmiaru wyjściowego PDF przy użyciu właściwości DownsampleOptions. Próbkowanie w dół jest domyślnie włączone we właściwości DownsampleImages.
Zauważ, że możliwe jest również ustawienie określonej rozdzielczości we właściwości Resolution lub progu rozdzielczości we właściwości ResolutionThreshold. W drugim przypadku, jeśli rozdzielczość obrazu jest mniejsza niż wartość progowa, próbkowanie w dół nie będzie miało zastosowania.
Poniższy przykład kodu pokazuje, jak zmienić rozdzielczość obrazów w dokumencie wyjściowym 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); |
Rozdzielczość jest obliczana zgodnie z rzeczywistym rozmiarem obrazu na stronie.
Osadzanie czcionek w formacie Adobe PDF
Aspose.Words umożliwia również kontrolowanie sposobu osadzania czcionek w wynikowych dokumentach PDF. Czcionki muszą być osadzone w dowolnym dokumencie Adobe PDF, aby upewnić się, że dokument może być poprawnie renderowany na dowolnym komputerze (więcej szczegółów na temat renderowania czcionek można znaleźć w sekcji Używanie Czcionek TrueType ). Domyślnie Aspose.Words osadza podzbiór czcionek używanych w dokumencie w wygenerowanym PDF. W takim przypadku tylko glify (znaki) użyte w dokumencie są zapisywane w PDF.
Kiedy używać pełnych czcionek, a kiedy podzbiór
Istnieje sposób na określenie opcji dla Aspose.Words osadzania pełnych czcionek. Dalsze szczegóły, wraz z pewnymi zaletami i wadami każdego ustawienia opisano w poniższej tabeli.
Tryb Osadzania Czcionek | Zalety | Wady |
---|---|---|
Full |
Przydatne, gdy chcesz edytować wynikowy PDF później, dodając lub modyfikując tekst. Wszystkie czcionki są włączone, stąd wszystkie glify są obecne. | Ponieważ niektóre czcionki są duże (kilka megabajtów), osadzenie ich bez podzbioru może skutkować dużymi plikami wyjściowymi. |
Subset |
Podsetowanie jest przydatne, jeśli chcesz, aby Rozmiar pliku wyjściowego był mniejszy. | Użytkownik nie może w pełni dodać ani edytować tekstu za pomocą podzbioru czcionki w dokumencie wyjściowym PDF. Dzieje się tak, ponieważ nie wszystkie glify czcionki są obecne. Jeśli wiele PDFs zostanie zapisanych za pomocą podzbiorów czcionek i zmontowanych razem, połączony dokument PDF może mieć czcionkę zawierającą wiele niepotrzebnych podzbiorów. |
Osadzanie pełnych czcionek w PDF
Właściwość EmbedFullFonts umożliwia określenie sposobu, w jaki Aspose.Words osadza czcionki w dokumencie wyjściowym PDF.
- Aby osadzić pełne czcionki w dokumencie wyjściowym PDF, Ustaw EmbedFullFonts Na true
- Aby podzbiór czcionek podczas zapisywania do PDF, Ustaw EmbedFullFonts Na false
Poniższy przykład pokazuje, jak osadzić pełne czcionki w dokumencie wyjściowym 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); |
Poniższy przykład pokazuje, jak ustawić Aspose.Words Na podzbiór czcionek na wyjściu 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); |
Jak kontrolować osadzanie podstawowych czcionek i czcionek standardowych Windows
Czcionki podstawowe i czcionki standardowe Windows to “standardowe” zestawy czcionek, które zwykle znajdują się na komputerze docelowym lub są dostarczane przez czytnik dokumentów, dlatego nie muszą być osadzane w danych wyjściowych PDF. Nie osadzając tych czcionek, można zmniejszyć rozmiar renderowanych dokumentów PDF, a jednocześnie zachować przenośność.
Aspose.Words udostępnia opcje wyboru sposobu eksportowania czcionek do PDF. Można wybrać opcję osadzenia podstawowych i standardowych czcionek na wyjściu PDF lub pominąć ich osadzanie i zamiast tego użyć standardowych czcionek podstawowych PDF lub czcionek systemowych na komputerze docelowym. Użycie jednej z tych opcji zwykle powoduje znaczne zmniejszenie rozmiaru pliku dla PDF dokumentów generowanych przez Aspose.Words.
- Ponieważ te opcje wykluczają się wzajemnie, powinieneś wybierać tylko jedną na raz.
- Podczas zapisywania z PDF/A-1 zgodność, wszystkie używane czcionki muszą być osadzone w dokumencie PDF. Podczas zapisywania z tą zgodnością właściwość UseCoreFonts musi być ustawiona na false, a Właściwość FontEmbeddingMode musi być ustawiona na EmbedAll.
Osadzanie Podstawowych Czcionek
Opcja osadzania podstawowych czcionek może być włączona lub wyłączona za pomocą właściwości UseCoreFonts
. Gdy jest ustawiony na true, następujące najpopularniejsze czcionki “True Type” (podstawowe czcionki 14) nie są osadzane w dokumencie wyjściowym PDF:
Arial
Times New Roman
Courier New
Symbol
Czcionki te są zastępowane odpowiednimi czcionkami typu core 1, które są dostarczane przez czytnik po otwarciu PDF.
Poniższy przykład pokazuje, jak ustawić Aspose.Words, aby uniknąć osadzania podstawowych czcionek i pozwolić czytelnikowi zastąpić je czcionkami PDF typu 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); |
Ponieważ przeglądarki PDF udostępniają podstawowe czcionki na dowolnej obsługiwanej platformie, ta opcja jest również przydatna, gdy wymagana jest większa przenośność dokumentów. Jednak czcionki podstawowe mogą wyglądać inaczej niż czcionki systemowe.
Osadzanie Czcionek Systemowych
Tę opcję można włączyć lub wyłączyć za pomocą właściwości FontEmbeddingMode. Gdy ta właściwość jest ustawiona na EmbedNonstandard, czcionki true type “Arial” i “Times New Roman” nie są osadzane w dokumencie PDF. W takim przypadku przeglądarka klienta opiera się na czcionkach zainstalowanych w systemie operacyjnym klienta. Gdy właściwość FontEmbeddingMode jest ustawiona na EmbedNone, Aspose.Words nie osadzaj żadnych czcionek.
Poniższy przykład pokazuje, jak ustawić Aspose.Words, aby pominąć osadzanie czcionek Arial i Times New Roman w dokumencie 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); |
Ten tryb jest najbardziej przydatny, gdy chcesz przeglądać dokumenty na tej samej platformie, zachowując dokładny wygląd czcionek na wyjściu PDF.