Converti PDF in Excel e Markdown
Converti PDF in Excel e Markdown
Questa guida mostra come convertire un PDF in una cartella di lavoro Excel (.xlsx) o in Markdown, e come caricare un PDF da entrambi i formati. Document esegue la conversione in entrambe le direzioni; ExcelSaveOptions e MarkdownSaveOptions regolano l’esportazione, e ExcelLoadOptions e MarkdownLoadOptions regolano l’importazione. Dalla versione 26.9.0.
PDF in XLSX
Le tabelle rilevate nel PDF diventano griglie di fogli di lavoro con celle tipizzate — numeri, date, booleani, valute e percentuali sono scritti come valori Excel reali anziché come testo — e lo stile di origine (famiglia/font, dimensione, colore del testo, riempimento della cella, bordi, altezze delle righe, larghezze delle colonne, allineamento, celle unite) viene mantenuto. Le immagini all’interno delle celle della tabella sono incorporate come disegni.
import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelSaveOptions;
try (Document doc = new Document("report.pdf")) {
ExcelSaveOptions options = new ExcelSaveOptions();
options.setFormat(ExcelSaveOptions.ExcelFormat.XLSX); // default
options.setMinimizeTheNumberOfWorksheets(true); // merge pages onto fewer sheets
options.setInsertBlankColumnAtFirst(false); // no leading spacer column
options.setUniformWorksheets(false); // allow per-sheet column widths
options.setStructuralHeuristics(true); // recover tables on untagged PDFs
options.setSuppressRunningHeadersFooters(true); // drop repeated page furniture
doc.save("report.xlsx", options);
}SaveFormat.Xlsx (un alias, SaveFormat.Excel, è accettato) fornisce lo stesso risultato con le opzioni predefinite: doc.save("report.xlsx", SaveFormat.Xlsx). L’enum ExcelFormat di ExcelSaveOptions accetta anche XmlSpreadSheet2003, CSV e ODS per la compatibilità Aspose.PDF API, ma questa libreria scrive sempre un pacchetto .xlsx indipendentemente dal valore impostato. È anche possibile scrivere su uno stream con doc.save(OutputStream, ExcelSaveOptions).
XLSX in PDF, inclusi i moduli live
Carica una cartella di lavoro .xlsx tramite un costruttore Document che accetta ExcelLoadOptions. Ogni foglio diventa una tabella PDF con lo stesso supporto di tipizzazione delle celle e di stile della direzione di esportazione.
import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelLoadOptions;
try (Document doc = new Document("book.xlsx", new ExcelLoadOptions())) {
doc.save("book.pdf");
}Impostare ExcelLoadOptions.setInteractiveForms(true) trasforma le celle numeriche e di etichetta in un modulo PDF “live” anziché in testo statico: le celle numeriche diventano campi di testo modificabili, le celle di formula diventano campi di sola lettura che si ricalcolano in base ai loro input, e le celle di etichetta o costanti rimangono testo statico a meno che un’altra formula non le faccia riferimento. ExcelFormulaTranslator traduce ogni formula in Acrobat JavaScript; una formula la cui funzione non è supportata torna al suo ultimo valore statico calcolato, quindi il campo mostra ancora il numero corretto. Il ricalcolo stesso viene eseguito solo in un visualizzatore con un motore forms/JavaScript — Adobe Acrobat o Foxit; un visualizzatore senza quel motore mostra solo i valori incorporati, senza ricalcolo live.
import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelLoadOptions;
ExcelLoadOptions options = new ExcelLoadOptions();
options.setInteractiveForms(true); // cells → fields, formulas → calculate actions
try (Document doc = new Document("invoice.xlsx", options)) {
doc.save("invoice-live.pdf");
}PDF a Markdown
Document proietta un PDF in CommonMark / GitHub-Flavored Markdown: intestazioni, paragrafi, elenchi, tabelle, enfasi (grassetto/italic/strikethrough), codice in linea e delimitato, link, immagini e note a piè di pagina.
import org.aspose.pdf.Document;
import org.aspose.pdf.MarkdownSaveOptions;
try (Document doc = new Document("article.pdf")) {
MarkdownSaveOptions options = new MarkdownSaveOptions();
options.setStructuralHeuristics(true); // recover headings/lists/tables
options.setSuppressRunningHeadersFooters(true); // drop repeated page furniture
options.setRasterizeVectorGraphics(true); // charts/shapes -> referenced images
doc.save("article.md", options);
}SaveFormat.Markdown fornisce lo stesso risultato con le opzioni predefinite: doc.save("article.md", SaveFormat.Markdown). Document.markdownText(MarkdownSaveOptions) restituisce il Markdown come String invece di scrivere un file (non esiste un accessore separato per il “testo Markdown” — questo metodo è quello da chiamare per un risultato in memoria).
Markdown a PDF
Carica un file Markdown tramite un costruttore Document che accetta MarkdownLoadOptions. Un parser scritto a mano per il sottoinsieme CommonMark/GFM legge la sorgente: intestazioni, paragrafi, elenchi, tabelle, enfasi, codice, link, immagini, blocchi di citazione e note a piè di pagina. Gli HTML esotici incorporati nel Markdown non sono riprodotti completamente.
import org.aspose.pdf.Document;
import org.aspose.pdf.MarkdownLoadOptions;
try (Document doc = new Document("README.md", new MarkdownLoadOptions())) {
doc.save("README.pdf");
}Suggerimenti e migliori pratiche
- La fedeltà è strutturale, non pixel-perfetta per nessuno dei due formati: le conversioni preservano contenuto, struttura, immagini e geometria della pagina, non l’aspetto renderizzato esatto.
ExcelSaveOptions.ExcelFormate ilMarkdownSaveOptionsi flag strutturali cambiano solo il output formato del pacchetto o le euristiche — i valori effettivi con cui è stato etichettato il tuo PDF determinano ancora cosa viene rilevato come una tabella, un’intestazione o un elenco.- Per i moduli XLSX live, considera i valori delle celle incorporati come fallback corretto: solo un visualizzatore in grado di gestire i moduli ricalcola le formule all’apertura.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
L’output XLSX ha sempre un’estensione .xlsx anche dopo aver impostato ExcelFormat.CSV o ODS | Il writer FOSS serializza sempre un pacchetto OOXML .xlsx; gli altri valori ExcelFormat esistono solo per la compatibilità Aspose.PDF API | Tratta l’output come .xlsx indipendentemente dal valore ExcelFormat impostato |
| Un modulo XLSX che ricalcola mostra numeri statici invece di formule in tempo reale | Il visualizzatore PDF non dispone di un motore forms/JavaScript | Apri il file in Adobe Acrobat o Foxit per vedere il ricalcolo in tempo reale |
| Una cella di formula mostra un valore dall’aspetto obsoleto | ExcelFormulaTranslator non supporta la funzione di quella formula | Questo è il fallback documentato: il campo conserva il suo ultimo valore statico calcolato |
FAQ
Posso ottenere il Markdown come String invece di un file?
Sì — chiama Document.markdownText(MarkdownSaveOptions); restituisce il testo Markdown direttamente invece di scriverlo in un file.
Il importatore XLSX supporta le vere formule Excel?
Solo quando ExcelLoadOptions.setInteractiveForms(true) è impostato, e solo il sottoinsieme di funzioni che ExcelFormulaTranslator può tradurre in Acrobat JavaScript. Tutto il resto ricade sul valore statico finale calcolato della formula nel workbook di origine.
Riepilogo API Reference
| Classe/Metodo | Descrizione |
|---|---|
ExcelSaveOptions | Regola l’esportazione da PDF a XLSX |
ExcelLoadOptions | Regola l’importazione da XLSX a PDF, inclusi i moduli live |
ExcelFormat | Variante di foglio di calcolo target accettata da ExcelSaveOptions |
ExcelFormulaTranslator | Traduce le formule Excel in Acrobat JavaScript per i moduli live |
MarkdownSaveOptions | Regola l’esportazione da PDF a Markdown |
MarkdownLoadOptions | Regola l’importazione da Markdown a PDF |
Document.save(String, SaveFormat) / `Document.save(String, ExcelSaveOptions | MarkdownSaveOptions)` |
Document.markdownText(MarkdownSaveOptions) | Restituisce il Markdown come un String |