Specificare le opzioni di caricamento

Quando si carica un documento, è possibile impostare alcune proprietà avanzate. Aspose.Words fornisce la classe LoadOptions, che consente un controllo più preciso del processo di carico. Alcuni formati di caricamento hanno una classe corrispondente che contiene le opzioni di caricamento per questo formato di caricamento, ad esempio, c’è PdfLoadOptions per il caricamento in formato PDF o TxtLoadOptions per il caricamento in formato TXT. Questo articolo fornisce esempi di utilizzo delle opzioni della classe LoadOptions.

Imposta la versione Microsoft Word per modificare l’aspetto

Diverse versioni dell’applicazione Microsoft Word possono visualizzare i documenti in modo diverso. Ad esempio, c’è un problema ben noto con i documenti OOXML come DOCX o DOTX prodotti utilizzando WPS Office. In tali casi, gli elementi essenziali di markup del documento potrebbero mancare o essere interpretati in modo diverso, causando Microsoft Word 2019 a mostrare tale documento in modo diverso rispetto a Microsoft Word 2010.

Per impostazione predefinita Aspose.Words apre i documenti utilizzando le regole Microsoft Word 2019. Se è necessario far apparire il caricamento del documento come accadrebbe in una delle precedenti versioni dell’applicazione Microsoft Word, è necessario specificare esplicitamente la versione desiderata utilizzando la proprietà MswVersion della classe LoadOptions.

L’esempio di codice seguente mostra come impostare la versione Microsoft Word con le opzioni di caricamento:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Specify load option to specify MS Word version
LoadOptions loadOptions = new LoadOptions();
loadOptions.setMswVersion(MsWordVersion.WORD_2003);
Document doc = new Document(dataDir + "document.doc", loadOptions);
doc.save(dataDir + "Word2003_out.docx");

Impostare le preferenze di lingua per modificare l’aspetto

I dettagli della visualizzazione di un documento in Microsoft Word dipendono non solo dalla versione dell’applicazione e dal valore della proprietà MswVersion, ma anche dalle impostazioni della lingua. Microsoft Word può mostrare i documenti in modo diverso a seconda delle impostazioni della finestra di dialogo “Preferenze lingua di Office”, che si trovano in"File → Opzioni → Lingua". Utilizzando questa finestra di dialogo, un utente può selezionare, ad esempio, la lingua principale, le lingue di correzione, le lingue di visualizzazione e così via. Aspose.Words fornisce la proprietà LanguagePreferences come equivalente di questa finestra di dialogo. Se l’output Aspose.Words differisce dall’output Microsoft Word, impostare il valore appropriato per EditingLanguage – questo può migliorare il documento di output.

Il seguente esempio di codice mostra come impostare il giapponese come EditingLanguage:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Specify LoadOptions to add Editing Language
LoadOptions loadOptions = new LoadOptions();
loadOptions.getLanguagePreferences().addEditingLanguage(EditingLanguage.JAPANESE);
Document doc = new Document(dataDir + "languagepreferences.docx", loadOptions);
int localeIdFarEast = doc.getStyles().getDefaultFont().getLocaleIdFarEast();
if (localeIdFarEast == (int) EditingLanguage.JAPANESE)
System.out.println("The document either has no any FarEast language set in defaults or it was set to Japanese originally.");
else
System.out.println("The document default FarEast language was set to another than Japanese language originally, so it is not overridden.");

Utilizzare WarningCallback per controllare i problemi durante il caricamento di un documento

Alcuni documenti potrebbero essere danneggiati, contenere voci non valide o avere funzionalità non attualmente supportate da Aspose.Words. Se si desidera conoscere i problemi che si sono verificati durante il caricamento di un documento, Aspose.Words fornisce l’interfaccia IWarningCallback.

Il seguente esempio di codice mostra l’implementazione dell’interfaccia IWarningCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class DocumentLoadingWarningCallback implements IWarningCallback {
public void warning(WarningInfo info) {
// Prints warnings and their details as they arise during document loading.
System.out.println("WARNING: " + info.getWarningType() + " source:" + info.getSource());
System.out.println("\tDescription: " + info.getDescription());
}
}

Per ottenere informazioni su tutti i problemi durante il tempo di caricamento, utilizzare la proprietà WarningCallback.

Il seguente esempio di codice mostra come utilizzare questa proprietà:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Create a new LoadOptions object and set its WarningCallback property.
LoadOptions loadOptions = new LoadOptions();
loadOptions.setWarningCallback(new DocumentLoadingWarningCallback());
Document doc = new Document(dataDir + "input.docx", loadOptions);

Utilizzare ResourceLoadingCallback per controllare il caricamento delle risorse esterne

Un documento può contenere collegamenti esterni a immagini che si trovano da qualche parte su un disco locale, rete o Internet. Aspose.Words carica automaticamente tali immagini in un documento, ma ci sono situazioni in cui questo processo deve essere controllato. Ad esempio, per decidere se abbiamo davvero bisogno di caricare una certa immagine o forse saltarla. L’opzione ResourceLoadingCallback load consente di controllare questo.

Il seguente esempio di codice mostra l’implementazione dell’interfaccia IResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class HtmlLinkedResourceLoadingCallback implements IResourceLoadingCallback {
public int resourceLoading(ResourceLoadingArgs args) throws Exception {
switch (args.getResourceType()) {
case ResourceType.CSS_STYLE_SHEET: {
System.out.println("External CSS Stylesheet found upon loading: " + args.getOriginalUri());
// CSS file will don't used in the document
return ResourceLoadingAction.SKIP;
}
case ResourceType.IMAGE: {
// Replaces all images with a substitute
String newImageFilename = "Logo.jpg";
System.out.println("\tImage will be substituted with: " + newImageFilename);
BufferedImage newImage = ImageIO
.read(new File(Utils.getDataDir(LoadOptionsCallbacks.class) + newImageFilename));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(newImage, "jpg", baos);
baos.flush();
byte[] imageBytes = baos.toByteArray();
baos.close();
args.setData(imageBytes);
// New images will be used instead of presented in the document
return ResourceLoadingAction.USER_PROVIDED;
}
case ResourceType.DOCUMENT: {
System.out.println("External document found upon loading: " + args.getOriginalUri());
// Will be used as usual
return ResourceLoadingAction.DEFAULT;
}
default:
throw new Exception("Unexpected ResourceType value.");
}
}
}

L’esempio di codice seguente mostra come utilizzare la proprietà ResourceLoadingCallback:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Create a new LoadOptions object and set its ResourceLoadingCallback attribute
// as an instance of our IResourceLoadingCallback implementation
LoadOptions loadOptions = new LoadOptions();
loadOptions.setResourceLoadingCallback(new HtmlLinkedResourceLoadingCallback());
// When we open an Html document, external resources such as references to CSS
// stylesheet files and external images
// will be handled in a custom manner by the loading callback as the document is
// loaded
Document doc = new Document(dataDir + "Images.html", loadOptions);
doc.save(dataDir + "Document.LoadOptionsCallback_out.pdf");

Utilizzare TempFolder per evitare un’eccezione di memoria

Aspose.Words supporta documenti estremamente grandi con migliaia di pagine piene di contenuti ricchi. Il caricamento di tali documenti può richiedere molto RAM. Nel processo di caricamento, Aspose.Words ha bisogno di ancora più memoria per contenere le strutture temporanee utilizzate per analizzare un documento.

Se si verifica un problema con l’eccezione di memoria esaurita durante il caricamento di un documento, provare a utilizzare la proprietà TempFolder. In questo caso, Aspose.Words memorizzerà alcuni dati in file temporanei anziché in memoria, e questo può aiutare a evitare tale eccezione.

Il seguente esempio di codice mostra come impostare TempFolder:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Specify LoadOptions to set Temp Folder
LoadOptions lo = new LoadOptions();
lo.setTempFolder("C:\\TempFolder\\");
Document doc = new Document(dataDir + "document.doc", lo);

Imposta la codifica in modo esplicito

La maggior parte dei formati di documenti moderni memorizzano il loro contenuto in Unicode e non richiedono una gestione speciale. D’altra parte, ci sono ancora molti documenti che utilizzano una codifica pre-Unicode e talvolta mancano le informazioni di codifica o non supportano nemmeno le informazioni di codifica per natura. Aspose.Words tenta di rilevare automaticamente la codifica appropriata per impostazione predefinita, ma in un raro caso potrebbe essere necessario utilizzare una codifica diversa da quella rilevata dal nostro algoritmo di riconoscimento della codifica. In questo caso, utilizzare la proprietà Encoding per ottenere o impostare la codifica.

Il seguente esempio di codice mostra come impostare la codifica per sovrascrivere la codifica scelta automaticamente:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
// Set the Encoding attribute in a LoadOptions object to override the
// automatically chosen encoding with the one we know to be correct
LoadOptions loadOptions = new LoadOptions();
loadOptions.setEncoding(java.nio.charset.Charset.forName("UTF-8"));
Document doc = new Document(dataDir + "Encoded in UTF-8.txt", loadOptions);

Carica documenti crittografati

È possibile caricare documenti Word crittografati con una password. Per fare ciò, utilizzare un sovraccarico del costruttore speciale, che accetta un oggetto LoadOptions. Questo oggetto contiene la proprietà Password, che specifica la stringa della password.

Il seguente esempio di codice mostra come caricare un documento crittografato con una password:

// 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
// Load the encrypted document from the absolute path on disk.
Document doc = new Document(dataDir + "LoadEncrypted.docx", new LoadOptions("aspose"));

Se non si sa in anticipo se il file è crittografato, è possibile utilizzare la classe FileFormatUtil, che fornisce metodi di utilità per lavorare con i formati dei file, ad esempio il rilevamento del formato dei file o la conversione di estensioni di file in/dalle enumerazioni del formato dei file. Per rilevare se il documento è crittografato e richiede una password per aprirlo, utilizzare la proprietà IsEncrypted.

L’esempio di codice seguente mostra come verificare che OpenDocument sia crittografato o meno:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
FileFormatInfo info = FileFormatUtil.detectFileFormat(dataDir + "encrypted.odt");
System.out.println(info.isEncrypted());