Convertir PDF a Excel y Markdown
Convertir PDF a Excel y Markdown
Esta guía muestra cómo convertir un PDF a un libro de Excel (.xlsx) o a Markdown, y cómo cargar un PDF de nuevo desde cualquiera de los formatos. Document realiza la conversión en ambas direcciones; ExcelSaveOptions y MarkdownSaveOptions afinan la exportación, y ExcelLoadOptions y MarkdownLoadOptions afinan la importación. Desde la 26.9.0.
PDF a XLSX
Las tablas detectadas en el PDF se convierten en cuadrículas de hojas de cálculo con celdas tipadas — números, fechas, booleanos, moneda y porcentajes se escriben como valores reales de Excel en lugar de texto — y el estilo original (familia/tamaño de fuente, color del texto, relleno de celda, bordes, altura de filas, ancho de columnas, alineación, celdas combinadas) se conserva. Las imágenes dentro de las celdas de tabla se incrustan como dibujos.
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, también se acepta) produce el mismo resultado con opciones predeterminadas: doc.save("report.xlsx", SaveFormat.Xlsx). El propio enum ExcelFormat de ExcelSaveOptions también acepta XmlSpreadSheet2003, CSV y ODS para la compatibilidad Aspose.PDF API, pero esta biblioteca siempre escribe un paquete .xlsx independientemente del valor configurado. También puedes escribir a un flujo con doc.save(OutputStream, ExcelSaveOptions).
XLSX a PDF, incluidos formularios en vivo
Carga un libro de trabajo .xlsx a través de un constructor Document que recibe ExcelLoadOptions. Cada hoja se convierte en una tabla PDF con el mismo soporte de tipado de celdas y estilo que en la dirección de exportación.
import org.aspose.pdf.Document;
import org.aspose.pdf.ExcelLoadOptions;
try (Document doc = new Document("book.xlsx", new ExcelLoadOptions())) {
doc.save("book.pdf");
}Configurar ExcelLoadOptions.setInteractiveForms(true) convierte las celdas numéricas y de etiqueta en un formulario PDF “en vivo” en lugar de texto estático: las celdas numéricas se convierten en campos de texto editables, las celdas de fórmula en campos de solo lectura que se recalculan a partir de sus entradas, y las celdas de etiqueta o constantes permanecen como texto estático a menos que otra fórmula las referencie. ExcelFormulaTranslator traduce cada fórmula a Acrobat JavaScript; una fórmula cuya función no sea compatible recae en su último valor estático calculado, de modo que el campo sigue mostrando el número correcto. El recálculo en sí solo se ejecuta en un visor con un motor forms/JavaScript — Adobe Acrobat o Foxit; un visor sin ese motor muestra solo los valores incorporados, sin recalculo en tiempo real.
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 proyecta un PDF a Markdown con sabor CommonMark / GitHub: encabezados, párrafos, listas, tablas, énfasis (negrita/cursiva/tachado), código en línea y con bloques, enlaces, imágenes y notas al pie.
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 produce el mismo resultado con las opciones predeterminadas: doc.save("article.md", SaveFormat.Markdown). Document.markdownText(MarkdownSaveOptions) devuelve el Markdown como un String en lugar de escribir un archivo (no existe un accesorio separado de “texto Markdown”: este método es el que se debe invocar para obtener un resultado en memoria).
Markdown a PDF
Cargue un archivo Markdown a través de un constructor Document que recibe MarkdownLoadOptions. Un analizador escrito a mano del subconjunto CommonMark/GFM lee la fuente: encabezados, párrafos, listas, tablas, énfasis, código, enlaces, imágenes, citas en bloque y notas al pie. El HTML exótico incrustado en el Markdown no se reproduce completamente.
import org.aspose.pdf.Document;
import org.aspose.pdf.MarkdownLoadOptions;
try (Document doc = new Document("README.md", new MarkdownLoadOptions())) {
doc.save("README.pdf");
}Consejos y mejores prácticas
- La fidelidad es estructural, no píxel a píxel, para ninguno de los formatos: las conversiones conservan contenido, estructura, imágenes y geometría de página, no la apariencia renderizada exacta.
ExcelSaveOptions.ExcelFormaty elMarkdownSaveOptionslas banderas estructurales solo cambian el output formato del paquete o heurísticas — los valores reales con los que se etiquetó su PDF siguen determinando lo que se detecta como una tabla, un encabezado o una lista.- Para formularios XLSX en vivo, trate los valores de celda incorporados como la alternativa correcta: solo un visor compatible con formularios recalcula las fórmulas al abrir.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
La salida XLSX siempre tiene una extensión .xlsx incluso después de configurar ExcelFormat.CSV o ODS | El escritor FOSS siempre serializa un paquete OOXML .xlsx; los demás valores ExcelFormat existen solo para compatibilidad Aspose.PDF API | Trate la salida como .xlsx sin importar el valor de ExcelFormat que haya configurado |
| Un formulario XLSX que recalcula muestra números estáticos en lugar de fórmulas en tiempo real | El visor de PDF no tiene motor de formularios/JavaScript | Abra el archivo en Adobe Acrobat o Foxit para ver la recalculación en tiempo real |
| Una celda de fórmula muestra un valor con aspecto obsoleto | ExcelFormulaTranslator no admite la función de esa fórmula | Este es el fallback documentado: el campo mantiene su último valor estático calculado |
FAQ
¿Puedo obtener Markdown como un String en lugar de un archivo?
Sí — llame a Document.markdownText(MarkdownSaveOptions); devuelve el texto Markdown directamente en lugar de escribirlo en un archivo.
¿El importador de XLSX admite fórmulas reales de Excel?
Solo cuando ExcelLoadOptions.setInteractiveForms(true) está configurado, y solo el subconjunto de funciones que ExcelFormulaTranslator puede traducir a Acrobat JavaScript. Todo lo demás recae en el último valor estático calculado de la fórmula en el libro de origen.
API Reference Resumen
| Clase/Método | Descripción |
|---|---|
ExcelSaveOptions | Ajusta la exportación de PDF a XLSX |
ExcelLoadOptions | Ajusta la importación de XLSX a PDF, incluidos los formularios en vivo |
ExcelFormat | Variante de hoja de cálculo objetivo aceptada por ExcelSaveOptions |
ExcelFormulaTranslator | Traduce fórmulas de Excel a Acrobat JavaScript para formularios en vivo |
MarkdownSaveOptions | Ajusta la exportación de PDF a Markdown |
MarkdownLoadOptions | Ajusta la importación de Markdown a PDF |
Document.save(String, SaveFormat) / `Document.save(String, ExcelSaveOptions | MarkdownSaveOptions)` |
Document.markdownText(MarkdownSaveOptions) | Devuelve el Markdown como un String |