お世話になっております。
開発環境:VS2010, MFC
言語:C++
OS:Windows10 64bit
WindowsAPIのEnumPrinters()を使ってプリンタの列挙情報を取得することまではできた
のですが、列挙したプリンタが、PDFライターか実際のプリンタかを識別する方法がわ
からず困っております。
PRINTER_INFO_5構造体のpPrinterName変数にプリンタ名が入っているので、そこ
にPDFという文字が含まれていれば、PDFライターである、という識別方法を考えまし
たが、強引な気がしています。
PDFライターを判別する良い方法がありましたら、ご教授いただけないでしょうか?
やろうとしていることは以下の通りになります。
#include stdafx.h
#include <windows.h>
#pragma warning(disable : 4996)
int _tmain(int argc, _TCHAR* argv[])
{
// Sample: C++
TCHAR szBuf[256];
DWORD dwSize = 0, dwResult;
PRINTER_INFO_5 * pInfo = NULL;
if (!EnumPrinters(PRINTER_ENUM_NAME, NULL,
5, (byte*)pInfo, 0,
&dwSize, &dwResult))
{
if (dwSize > 0)
{
pInfo = (PRINTER_INFO_5*)new byte[dwSize];
if (EnumPrinters(PRINTER_ENUM_NAME, NULL,
5, (byte*)pInfo, dwSize,
&dwSize, &dwResult))
{
for (DWORD i = 0; i < dwResult; ++i)
{
// 判定方法を再考
if(_tcsstr(pInfo[i].pPrinterName,
_T(PDF)))
{
_stprintf(szBuf, _T(%sはPDF
ライターです。\n), pInfo[i].pPrinterName);
}
else
{
_stprintf(szBuf, _T(%sはPDF
ライターではない。\n), pInfo[i].pPrinterName);
}
OutputDebugString(szBuf);
}
}
delete [] (byte*)pInfo;
}
}
return 0;
}
うーん、
PDFライターの仕様が定まっていないですからね。
個々のPDFライターに依存すると思います。
ポストスプリクト使っているのが多いのかな?
商用は分からないので、まずはGPL等の公開している
フリーのPDFライターを調べてみるしかないかもしれませんね。
返信ありがとうございます。そして返信が遅くなり申し訳ありません。
元々ポストスクリプトで手動で記述しようと思ったのですが、工数がかかり過ぎると判
断し、インストール済みの仮想プリンタを利用しようと思った次第です。
この機能自体、いったん保留することとなったので、ひとまず解決とさせていただきま
す。