求助:关于C#操作Adobe PDF虚拟打印机的问题

bjddd192 2010-04-15 05:02:05
我安装了Adobe Acrobat 7.0 Professional,同时在打印机和传真中就会默认安装一个名为Adobe PDF的虚拟打印机,这个东西很方便,可以把我需要的文档打印到这个打印机上生成PDF
最近突发奇想是不是可以用程序操作这个打印机,有没有提供DLL可以调用呢

我使用过以下方法,先设置Adobe PDF为默认打印机
Process p = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.Verb = "Print";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = fileName;
p.StartInfo = startInfo;
p.Start();
但会不可避免地弹出对话框来

不知道有没有高手搞过,教教我,谢谢
...全文
3089 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahumrli 2012-07-25
  • 打赏
  • 举报
回复
貌似不错
bjddd192 2010-04-16
  • 打赏
  • 举报
回复
会弹出对话框啊
我的目的是静悄悄地生成PDF
mayonglong 2010-04-16
  • 打赏
  • 举报
回复
不用这么烦吧,打印时直接选择PDF的虚拟打印机打印不就可以了~
bjddd192 2010-04-16
  • 打赏
  • 举报
回复
在CSDN上看到一个C的帖子
谁比较熟,能翻译下转成C#么
以下是代码:
如果装的是Acrobat 7.0及以上版本,可以用下面的方法
C/C++ code
BOOL Doc2PDF(LPCTSTR lpszSrcDoc, LPCTSTR lpszDstPDF)
{
HRESULT hr;
CLSID clsid;
IUnknown* pUnk = NULL;
IDispatch *pDispApp = NULL;
if (!PathFileExists(lpszSrcDoc))
return FALSE;
CLSIDFromProgID(L"PDFMakerAPI.PDFMakerApp", &clsid);
hr = ::GetActiveObject(clsid,NULL,&pUnk);
if (FAILED(hr)) //
hr = ::CoCreateInstance( clsid, NULL, CLSCTX_SERVER,
IID_IUnknown, (void**) &pUnk);
if (SUCCEEDED(hr))
{
hr = pUnk->QueryInterface(IID_IDispatch, (void**)&pDispApp);
if (FAILED(hr))
{
pUnk->Release();
return FALSE;
}
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);
COleVariant covFalse((short)FALSE);
COleVariant vTrue((short)TRUE);
CPDFMakerApp maker;
maker.AttachDispatch(pDispApp,FALSE);
/*SAFEARRAY *ar[2];
ar[0] = SafeArrayCreateVector(VT_BSTR,0,1);
ar[1] = SafeArrayCreateVector(VT_BSTR,0,1);
_bstr_t a(lpszSrcDoc);
_bstr_t b(lpszDstPDF);
LONG rgIndices = 0;
SafeArrayPutElement(ar[0],&rgIndices,(BSTR)a);
rgIndices = 0;
SafeArrayPutElement(ar[1],&rgIndices,(BSTR)b);*/
long ret = 1;
do {
ret = maker.CreatePDF(lpszSrcDoc,lpszDstPDF,
vOpt,covFalse,vTrue,covFalse,vOpt);
Sleep(100);
} while(ret != 0);

//ret = maker.CreatePDFFromMultipleFiles(ar);
//SafeArrayDestroy(ar[0]);
//SafeArrayDestroy(ar[1]);
pDispApp->Release();
pUnk->Release();
return ret;
}
return FALSE;
}

bjddd192 2010-04-16
  • 打赏
  • 举报
回复
一晚上了,没人来,郁闷呢
young_hsu1 2010-04-16
  • 打赏
  • 举报
回复
应用一个adobe的一个第三方控件AcroPDF.dll
bjddd192 2010-04-16
  • 打赏
  • 举报
回复
自己搞定了
参考资料
最近一个项目要求将doc文档转换成pdf文档,找了下网上的资料都是通过将doc转换成html,再转化成pdf,感觉生成的pdf效果不是太好,最后发现可以用adobe有一个pdfmaker for office插件能再word中将doc文件转换成pdf,于是就想调用这个插件来转换pdf,在adobe的官方网站上,发现很多人在问关于pdfmaker的问题,他们大多的是先调用安装在word中的“adobe pdf”这个虚拟打印机来将doc文档打印成POSTSCRIPT文档,在调用Interop.ACRODISTXLib中的FILETOPDF方法来实现doc转pdf,但中间很多人都被卡在如何在代码中设置“adobe pdf”这个虚拟打印机属性上上面,因为要转换成ps文件,必须将一个叫“不要发送字体到adobe pdf”的默认选中属性取消,才能正常打印,我也在这个找了很多资料才解决这个问题,今天我不给大家介绍这种方法,因为我找到了更好的方法,在安装了pdfmaker后,系统不但注册了pdfmaker for office和Interop.ACRODISTXLib类库外,还有个Interop.PDFMAKERAPILib类库,我们可以直接调用Interop.PDFMAKERAPILib类库中的方法轻松实现doc转pdf,而且还可以将pdfmakerApp的句柄传到PDFMAKERAPILib中的pdfmaker中进行更详细的属性设置,代码如下
using PDF=PDFMAKERAPILib;
private void button1_Click(object sender, System.EventArgs e)
{
object missing = System.Type.Missing;
try
{
PDF.PDFMakerApp app = new PDF.PDFMakerApp();
app.CreatePDF(@"c:\123.doc",@"c:\123.pdf",PDF.PDFMakerSettings.kConvertAllPages,false,true,true,missing);
}
catch(Exception er)
{
MessageBox.Show(er.ToString());
}
}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenyu4848/archive/2008/04/20/2309236.aspx
bjddd192 2010-04-15
  • 打赏
  • 举报
回复
先顶一个,欢迎大家来讨论

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧