【msce c++】 关于调用打印API的一些疑问。

我这边想实现一个批量打印图框的功能。读取dgn信息,获取图框位置,并且套上fence 都已经实现了。就是打印的那部分还有很多疑问。

如下代码,能实现打印fence到pdf,我这边就想做更多的功能,所以有了一些疑问

1.如何打印到实体打印机。

    PrintDescriptionPtr printDescPtr = PrintDescriptionRef::Create(); 
	IPrintDescriptionP printDesc = printDescPtr->GetP();
	if (SUCCESS != printDesc->InitializeFromTCB(L"pdf.pltcfg"))
		return;

	//设置纸张名称
	printDesc->SetFormName(L"ISO A4");

	if(printDesc->IsFenceDefined())
	{
		printDesc->SetPlotArea(PlotAreaMode::Fence);
		printDesc->SetPaperOrientation(PlotOrientation::Portrait);
	}
	else
	{
		MessageBox::Show("没有Fence 未生成pdf");
		return;
	}
	//开始打印
	printDesc->Print(L"C:\\Sample.pdf");

2.打开msce自带的打印功能,可以选择很多打印驱动,其中分为windows的打印驱动和bently的打印驱动。 

bently驱动的pltcfg文件,我这边知道文件在哪。   windows的那些驱动信息,有现成的api获取吗。我的想法就是做个一样的下拉列表出来

Parents Reply
  • 确实是一个小难题。

    plotter->GetString(Print::PlotTagStr::DefaultExtension, wStr);返回的默认扩展名是000,这是MS在采用自己的打印驱动时生成打印文件用的默认扩展名。

    可能需要到Windows编程论坛去咨询有关Windows打印API的专家了。如下是Win32 打印API大全:

    https://www.cnblogs.com/mydomain/archive/2010/11/24/1887161.html

    变通的办法是:调用plotter->GetString(Print::PlotTagStr::SysprinterName, wStr);获得当前的系统打印机名称,根据具体的打印机名称显式地指定扩展名了。比如,如果获得的是Microsoft XPS Document Writer,就将扩展名指定为.XPS。将贵单位常用的打印机都指定一遍就可以了。



Children
No Data