我有一个excel工作簿vsto解决方案,需要生成其中一个工作表的pdf副本作为输出。
我有abcdpdf .net的许可证,并尝试输出到html,然后使用abcpdf将html转换为pdf,但excel html标记尝试使用带有可怕标记的所有4个工作表模拟excel。它还会混淆颜色(整个工作簿中的银色背景)。
有什么建议吗?
以下是我目前用于生成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);
如果我手动删除一些html标头标签,我可以让abcdpf接受它,但格式有点偏,这个解决方案似乎是次优的。
提前致谢。
答案 0 :(得分:1)
找到解决方案:将excel表存储为XPS打印输出。将XPS打印输出导入pdf文档。
MyImportOperation代码改编自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(string 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();
}
}
}