2012-12-05 25 views
3

使用我的MFC应用程序,我可以使用CView类在屏幕上打印我的CDocument。 基本上,我使用CDC类在屏幕上写文本并绘制​​多边形,以提供我的文档的视图表示。将MFC CView导出为矢量格式

现在我们假设我想在Microsoft Word中使用该输出视图。

从用户角度的视图,没有了开发者的工作,我可以:

  • 我的画复制粘贴到Word:这样就产生了,我能够在Word
  • 粘贴光栅BMP文件打印我的图纸并使用PDF导出器:这会生成一个矢量PDF文件,该文件具有光照和缩放功能,但在Word中不易重复使用。

这两个毫不费力的解决方案是伟大的,因为我可以保持我的观点的准确布局,但有缺点(光栅或格式)

另一种方式来解决我的问题是写SVG或VML,但我不会得到相同的布局,这将需要很多工作。

是否有一个库可以将相同类型的PDF导出/打印机制转换为标准格式?

你会建议什么?非常感谢。

+0

您是否尝试过画上一个增强型图元(EMF)? – dwo

+0

不,但我该怎么做? –

回答

2

要绘制您的视图为增强型图元文件,首先阅读文档@ MSDN: http://msdn.microsoft.com/en-us/library/427wezx1%28v=VS.80%29.aspx

下面是一个例子,这是如何工作:

CMetaFileDC MFDC; 

CRect rect(0,0,width,height); 

MFDC.CreateEnhanced(NULL,NULL,rect,NULL); 
MFDC.SetBkMode(TRANSPARENT); 
MFDC.SetMapMode(MM_HIMETRIC); 

CDC tempDC; 
tempDC.CreateCompatibleDC(&MFDC); 
MFDC.SetAttribDC(tempDC.m_hDC); 

// now you draw into the DC like it was your original view 

HENHMETAFILE hEnhMetaFile = MFDC.CloseEnhanced(); 
HENHMETAFILE hEMF = NULL; 
hEMF = CopyEnhMetaFile(hEnhMetaFile,"C:\\Temp\\Test.emf"); 
DeleteEnhMetaFile(hEMF); 
DeleteEnhMetaFile(hEnhMetaFile); 
+0

谢谢dwo。我认为'CreateCompatibleDC'' SetAttribDC'的行没有用,不是吗? –

+0

如果使用'GetTextExtent'之类的方法,则需要设置attrib DC。否则,请将其留空。 – dwo

+0

我正尝试在AutoCAD中导入生成的WMF文件,但失败。另一方面,导入像OfficeArt一样随附的标准艺术品。所以我想我没有生成一个干净的元文件。我也尝试使用MFC库的增强版本,但它没有改变任何东西。任何线索? –