Specificare le opzioni di rendering durante la conversione in PDF

Il formato PDF è un formato a pagina fissa che è molto popolare tra gli utenti e ampiamente supportato da varie applicazioni perché un documento PDF ha lo stesso aspetto su qualsiasi dispositivo. Per questo motivo, la conversione in PDF è una caratteristica importante di Aspose.Words.

PDF è un formato complesso. Sono necessarie diverse fasi di calcolo nel processo di conversione di un documento in PDF, incluso il calcolo del layout. Poiché queste fasi includono calcoli complessi, richiedono molto tempo. Inoltre, il formato PDF è piuttosto complesso di per sé. Ha una struttura di file specifica, modello grafico e font embedding. Inoltre, presenta alcune funzionalità di output complesse, come tag di struttura del documento, crittografia, firme digitali e moduli modificabili.

Aspose.Words layout engine imita il modo in cui il motore di layout di pagina di Microsoft Word funziona. Pertanto, Aspose.Words rende i documenti di output PDF il più vicino possibile a ciò che è possibile vedere in Microsoft Word. A volte è necessario specificare opzioni aggiuntive, che possono influire sul risultato del salvataggio di un documento nel formato PDF. Queste opzioni possono essere specificate usando la classe PdfSaveOptions, contenente le proprietà che determinano come verrà visualizzato l’output PDF.

Di seguito sono riportati alcuni esempi di utilizzo di PdfSaveOptions.

Creazione di un documento PDF con moduli compilabili

È anche possibile esportare moduli compilabili da un documento Microsoft Word in output PDF, che ha moduli compilabili invece di un testo normale. Utilizzare la proprietà PreserveFormFields per salvare un documento come PDF con moduli compilabili.

Si noti che a differenza di Microsoft Word, il formato PDF ha un numero limitato di opzioni per i moduli modificabili, ad esempio casella di testo, casella combinata e checkbox. Microsoft Word ha più tipi di moduli, ad esempio selettore data calendario. Generalmente, non è possibile imitare completamente il comportamento di Microsoft Word in PDF. Pertanto, in alcuni casi complessi, l’output di PDF può differire da quello visualizzato in Microsoft Word.

L’esempio di codice riportato di seguito mostra come salvare un documento come PDF con moduli compilabili con compressione e qualità Jpeg specificate:

// 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);

Esportazione della struttura del documento e delle proprietà personalizzate

La proprietà ExportDocumentStructure consente di esportare la struttura del documento nell’output PDF.

PDF strutture logiche forniscono un meccanismo per incorporare informazioni, per quanto riguarda la struttura del contenuto del documento, in un file PDF. Aspose.Words conserva le informazioni sulla struttura di un documento Microsoft Word, ad esempio paragrafi, elenchi, tabelle, note a piè di pagina/note di chiusura, ecc.

Nell’esempio seguente viene illustrato come salvare un documento in formato PDF, preservando la struttura del documento:

// 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 consente inoltre di esportare le proprietà personalizzate del documento in PDF, come dimostrato dall’esempio seguente:

// 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);

Esportazione di contorni da segnalibri e intestazioni in Output PDF

Se si desidera esportare i segnalibri come contorni in output PDF, è possibile utilizzare la proprietà DefaultBookmarksOutlineLevel. Questa proprietà specifica il livello predefinito nella struttura del documento, al quale vengono visualizzati i segnalibri Microsoft Word. Se il documento contiene segnalibri nell’intestazione / piè di pagina del documento, è possibile impostare la proprietà HeaderFooterBookmarksExportMode su First o All per specificare come vengono esportati nell’output PDF. I segnalibri nelle intestazioni / piè di pagina non vengono esportati quando il valore di HeaderFooterBookmarksExportMode è None.

L’esempio di codice riportato di seguito mostra come esportare i segnalibri dalla prima intestazione/piè di pagina di una sezione:

// 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);

L’output PDF di questo esempio è mostrato di seguito:

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

Quando HeaderFooterBookmarksExportMode è impostato su First e il documento ha intestazioni/piè di pagina pari e dispari o un’intestazione/piè di pagina diversa, i segnalibri vengono esportati per le prime intestazioni/piè di pagina univoche in una sezione.

È inoltre possibile esportare le intestazioni nell’output PDF, utilizzando la proprietà HeadingsOutlineLevels. Questa proprietà specifica il numero di livelli di intestazioni inclusi nella struttura del documento.

L’esempio di codice riportato di seguito mostra come esportare le intestazioni con tre livelli:

// 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);

L’output PDF di questo esempio è illustrato di seguito:

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

Downsampling delle immagini per ridurre le dimensioni del documento

Aspose.Words fornisce la possibilità di eseguire il downsample delle immagini al fine di ridurre la dimensione dell’output PDF, utilizzando la proprietà DownsampleOptions. Il downsampling è abilitato per impostazione predefinita nella proprietà DownsampleImages.

Si noti che è anche possibile impostare una risoluzione specifica nella proprietà Resolution o una soglia di risoluzione nella proprietà ResolutionThreshold. Nel secondo caso, se la risoluzione dell’immagine è inferiore al valore di soglia, il downsampling non verrà applicato.

L’esempio di codice riportato di seguito mostra come modificare la risoluzione delle immagini in un documento di output 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);

La risoluzione viene calcolata in base alla dimensione reale dell’immagine sulla pagina.

Incorporare i font nel formato Adobe PDF

Aspose.Words consente inoltre di controllare il modo in cui i font sono incorporati nei documenti PDF risultanti. I font devono essere incorporati in qualsiasi documento Adobe PDF per garantire che il documento possa essere riprodotto correttamente su qualsiasi computer (vedere ulteriori dettagli sul rendering dei font nella sezione Utilizzo dei caratteri TrueType). Per impostazione predefinita, Aspose.Words incorpora un sottoinsieme di font utilizzati nel documento nel PDF generato. In questo caso, solo i glifi (caratteri) utilizzati nel documento vengono salvati in PDF.

Quando utilizzare i font completi e quando sottoinsieme

C’è un modo per specificare un’opzione per Aspose.Words per incorporare caratteri completi. Ulteriori dettagli, insieme ad alcuni vantaggi e svantaggi di ogni impostazione sono descritti nella tabella seguente.

Modalità Embed Fonts Vantaggio Svantaggio
Full Utile quando si desidera modificare il PDF risultante in un secondo momento aggiungendo o modificando il testo. Tutti i font sono inclusi, quindi tutti i glifi sono presenti. Poiché alcuni font sono grandi (diversi megabyte), incorporarli senza sottoinsieme può comportare file di output di grandi dimensioni.
Subset Il sottoinsieme è utile se si desidera mantenere le dimensioni del file di output più piccole.

L’utente non può aggiungere o modificare completamente il testo utilizzando il carattere sottoinsieme nel documento di output PDF. Questo perché non tutti i glifi del font sono presenti.

Se più PDFs vengono salvati con caratteri sottoinsiemi e assemblati insieme, il documento combinato PDF può avere un carattere contenente molti sottoinsiemi non necessari.

Incorporare caratteri completi in PDF

La proprietà EmbedFullFonts consente di specificare come Aspose.Words incorpora i font in un documento di output PDF.

  • Per incorporare caratteri completi nel documento di output PDF, impostare EmbedFullFonts su true
  • Per sottoinsieme font quando si salva su PDF, impostare EmbedFullFonts su false

Nell’esempio seguente viene illustrato come incorporare i font completi nel documento di output 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);

Nell’esempio seguente viene illustrato come impostare Aspose.Words per sottoinsieme font nell’output 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);

Come controllare l’incorporamento dei font core e dei font standard Windows

I font core e i font standard Windows sono i set di font “standard”, che di solito sono presenti sulla macchina di destinazione o forniti dal lettore di documenti, quindi non devono essere incorporati nell’output PDF. Non incorporando questi font, è possibile ridurre le dimensioni dei documenti renderizzati PDF e mantenere la portabilità.

Aspose.Words fornisce opzioni per scegliere come i font vengono esportati in PDF. È possibile scegliere di incorporare i font core e standard nell’output PDF o di saltare l’incorporamento e utilizzare invece i font core standard PDF o i font di sistema sulla macchina di destinazione. L’utilizzo di una di queste opzioni comporta normalmente una significativa riduzione delle dimensioni del file per i documenti PDF generati da Aspose.Words.

  • Poiché queste opzioni si escludono a vicenda, è necessario sceglierne solo una alla volta.
  • Quando si salva con la conformità PDF/A-1, tutti i font utilizzati devono essere incorporati nel documento PDF. Quando si salva con questa conformità, la proprietà UseCoreFonts deve essere impostata su false e la proprietà FontEmbeddingMode deve essere impostata su EmbedAll .

Incorporamento dei caratteri principali

L’opzione per incorporare i caratteri principali può essere abilitata o disabilitata utilizzando la proprietà UseCoreFonts. Quando è impostato su true, i seguenti font “True Type” più diffusi (font Base 14) non sono incorporati nel documento output PDF:

  • Arial
  • Times New Roman
  • Courier New
  • Symbol

Questi font vengono sostituiti con i corrispondenti font core di tipo 1, forniti da un lettore quando viene aperto PDF.

L’esempio fornito di seguito mostra come impostare Aspose.Words per evitare l’incorporamento dei caratteri principali e consentire al lettore di sostituirli con caratteri di tipo 1 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 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);

Poiché i visualizzatori PDF forniscono font di base su qualsiasi piattaforma supportata, questa opzione è utile anche quando è richiesta una maggiore portabilità dei documenti. Tuttavia, i font di base possono avere un aspetto diverso dai font di sistema.

Incorporare i font di sistema

Questa opzione può essere abilitata o disabilitata utilizzando la proprietà FontEmbeddingMode. Quando questa proprietà è impostata su EmbedNonstandard, i font true type" Arial “e” Times New Roman " non vengono incorporati in un documento PDF. In questo caso, il visualizzatore client si basa sui font installati sul sistema operativo client. Quando la proprietà FontEmbeddingMode è impostata su EmbedNone, Aspose.Words non incorporare alcun font.

L’esempio seguente mostra come impostare Aspose.Words per saltare l’incorporamento dei font Arial e Times New Roman in un documento 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");

Questa modalità è molto utile quando si desidera visualizzare i documenti sulla stessa piattaforma, preservando l’aspetto esatto dei caratteri nell’output PDF.