Excel 2003 VSTO convertir en PDF

J'ai une solution de workbook vsto sur Excel qui doit générer une copy pdf d'une de ses feuilles en tant que sortie.

J'ai une licence pour abcdpdf .net et j'ai essayé de sortir à html, puis j'utilise abcpdf pour convertir le html en pdf, mais le balise html excel essaye d'imiter excel avec les 4 feuilles de travail avec un marquage horrible. Il gâche aussi les colors (fond argenté dans tout le classur).

Aucune suggestion?

Voici le code que j'utilise actuellement pour générer le file html:

FileInfo excelDoc = new FileInfo(Globals.ThisWorkbook.Path + @"\Document.html"); Globals.Sheet2.SaveAs(excelDoc.FullName, Excel.XlFileFormat.xlHtml, missing, missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing); 

Si je retire manuellement certaines des labels d'en-tête html, je peux get abcdpf pour l'accepter, mais le formatting est un peu éteint et cette solution semble trop optimale.

Merci d'avance.

Solution trouvée: stockez la feuille Excel sous la forme de l'printing XPS. Importation d'une printing XPS dans un document pdf.

Le code MyImportOperation est adapté à partir du code source d'abcpdf XPS.

  public void SaveSheetToPdf(FileInfo outputPDF) { FileInfo documentFile = new FileInfo(Globals.ThisWorkbook.Path + @"\tempDoc.xps"); if (documentFile.Exists) documentFile.Delete(); Globals.Sheet2.PrintOut(1, missing, 1, false, "Microsoft XPS Document Writer", true, false, documentFile.FullName); Doc theDoc = new Doc(); try { MyImportOperation importOp = new MyImportOperation(theDoc); importOp.Import(documentFile); } catch (Exception ex) { throw new Exception("Error rendering pdf. PDF Source XPS Path: " + investmentPlanXPSPath, ex); } theDoc.Save(outputPDF.FullName); } public class MyImportOperation { private Doc _doc = null; private double _margin = 10; private int _pagesAdded = 0; public MyImportOperation(Doc doc) { _doc = doc; } public void Import(ssortingng inPath) { using (XpsImportOperation op = new XpsImportOperation()) { op.ProcessingObject += Processing; op.ProcessedObject += Processed; op.Import(_doc, inPath); } } public void Processing(object sender, ProcessingObjectEventArgs e) { if (e.Info.SourceType == ProcessingSourceType.PageContent) { _doc.Page = _doc.AddPage(); e.Info.Handled = true; _pagesAdded++; } } public void Processed(object sender, ProcessedObjectEventArgs e) { if (e.Successful) { PixMap pixmap = e.Object as PixMap; if (pixmap != null) pixmap.Compress(); } } }