У меня есть небольшой класс, который работает со старыми PDF Creator до версии 2. Он печатает лист Excel в указанный файл PDF, используя принтер PDF Creator
, создавая таким образом файл PDF по указанному пути.
public class PDFCreatorHelper
{
//Global Deceleration
private clsPDFCreator _pdfcreator = null;
public string CreatedFile { get; private set; }
public bool ActiveXError { get { return _ActiveXError; } }
private bool _ActiveXError = false;
private void _pdfcreator_eError()
{
MessageBox.Show("PDF Creator: " + _pdfcreator.cError.Description, "PDF Creator", MessageBoxButton.OK, MessageBoxImage.Error);
}
public void Initialize()
{
try
{
if (_pdfcreator == null)
{
_pdfcreator = new clsPDFCreator();
_pdfcreator.eReady += new __clsPDFCreator_eReadyEventHandler(_pdfcreator_eReady);
_pdfcreator.eError += new __clsPDFCreator_eErrorEventHandler(_pdfcreator_eError);
}
}
catch (Exception ex)
{
_ActiveXError = true;
Tools.LogException(ex, "PDFCreator");
}
}
private void _pdfcreator_eReady()
{
//Returns path for generated PDF File
CreatedFile = _pdfcreator.cOutputFilename;
}
public void PrintSheet(Worksheet xlSheet, Microsoft.Office.Interop.Excel.Application app, string file)
{
try
{
Initialize();
if (_ActiveXError) return;
string parameters = "/NoProcessingAtStartup";
_pdfcreator = new clsPDFCreator();
if (!_pdfcreator.cStart(parameters, false))
MessageBox.Show("Nepodařilo se spustit \"PDFCreator\".", "Tisk sestavy", MessageBoxButton.OK, MessageBoxImage.Error);
else
{
// Set parameters for saving the generating pdf automatically to a directory.
clsPDFCreatorOptions opt = _pdfcreator.cOptions;
opt.UseAutosave = 1;// Use auto save functionality.
opt.UseAutosaveDirectory = 1;// Use directory for saving the file.
string folder = Path.GetDirectoryName(file);
string filename = Path.GetFileName(file);
opt.AutosaveDirectory = folder; // Name of the output directory.
opt.AutosaveFormat = 0;// Format of file is to be saved. 0 if for pdf.
opt.AutosaveFilename = filename;// Name of the output file name.
opt.Papersize = "A4";
_pdfcreator.cOptions = opt;
_pdfcreator.cClearCache();
_pdfcreator.cDefaultPrinter = "PDFCreator";
string defaultPrinter = _pdfcreator.cDefaultPrinter;
xlSheet.PrintOutEx(Type.Missing, Type.Missing, Type.Missing, Type.Missing, "PDFCreator", Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Wait till doc gets queued up.
while (_pdfcreator.cCountOfPrintjobs != 1) ;
// Start the printer.
_pdfcreator.cPrinterStop = false;
// Wait till all doc get converted to pdf.
while (_pdfcreator.cCountOfPrintjobs != 0) ;
// Stop the printer.
_pdfcreator.cPrinterStop = true;
}
}
catch (Exception ex)
{
_ActiveXError = true;
Tools.LogException(ex, "PDFCreator");
}
finally
{
// Close the printer
if (_pdfcreator is clsPDFCreator) _pdfcreator.cClose();
_pdfcreator = null;
}
}
}
Но мне нужно добиться того же с новой оболочкой .NET COM .
Документация практически отсутствует, а объектная модель совершенно иная. Я не знаю, как запустить PDF Creator, настроить его параметры и печатать в Excel на принтере PDFCreator.
pdfforge.PDFCreator.UI.ComWrapper.PdfCreatorObj o =
new pdfforge.PDFCreator.UI.ComWrapper.PdfCreatorObj();
pdfforge.PDFCreator.UI.ComWrapper.Printers p = o.GetPDFCreatorPrinters;
string printerName = o.GetPDFCreatorPrinters.GetPrinterByIndex(0);
...?
(я знаю, что могу сохранить как PDF из Excel, но в нем есть ошибки с определенными шрифтами)