1、导出PDF文件时,代码逻辑需要包含在 services svc=new services() using体内部,只有using结束之后,本地的pdf文件才会生成完毕,在using内部,pdf文件的大小为0K。所以,如果在pdf生成之后需要进一步操作的,则需要把 后续操作写在 using外部。
2、生成PDF时,需要把 参数设置部分,设置在两层 using内部,如下所示:
using(Services svc=new Services()){
using (mPDFExportParams param = new mPDFExportParams())
{
using (FileStreamBuf fileStrem = new FileStreamBuf(tempPdfFilePath, false, FileShareMode.DenyNo, FileCreationDisposition.CreateAlways))
{
param.OutputStream = fileStrem;
PageParamsCollection pParCol = new PageParamsCollection();
PageParams pp = new PageParams();
pp.setParams(pageWidth, pageHeight, margen左, margen右, margen上, margen下);
//以黑白样式输出
pParCol.Add(pp);
StringCollection strColl = new StringCollection();
strColl.Add(spaceName);
//mPDFExportParams param = new mPDFExportParams();
param.Database = currDb;
FileStreamBuf fbuf = new FileStreamBuf(tempPdfFilePath, false, FileShareMode.DenyNo, FileCreationDisposition.CreateAlways);
param.OutputStream = fbuf;
param.Title = "";
param.Author = "";
param.Subject = "";
param.Keywords = "";
param.Creator = "";
param.Producer = "";
param.UseHLR = true;
param.FlateCompression = true;
param.ASCIIHEXEncodeStream = true;
param.hatchDPI = uint.Parse(dpi);
param.Versions = PDFExportVersions.PDFv1_6;
if (黑白输出)
{
param.Color_Policy = ColorPolicy.Mono;
}
else
{
param.Color_Policy = ColorPolicy.NoPolicy;
}
param.Layouts = strColl;
param.PageParams = pParCol;
Export_Import.ExportPDF(param);
}
}
}
//Do Other Things,比如从pdf中提取图片,或者在窗体中显示pdf等等
3、如果dwg文件中包含了 类型为 "已嵌入"的OLE图片对象,如果此dwg生成pdf时采用了task等多线程操作方式,则生成的pdf中此图片会丢失。解决办法如下:
1)改用单线程模式
2)dwg中的OLE图片,通过CONVERTOLE方法转换为静态picture对象。转换之后,仍旧可以在oda中采用多线程生成pdf