PDFライターの判定

[戻る]
TETU 2017/04/03(月) 16:27:36
お世話になっております。

開発環境:VS2010, MFC
言語:C++
OS:Windows10 64bit

WindowsAPIのEnumPrinters()を使ってプリンタの列挙情報を取得することまではできた
のですが、列挙したプリンタが、PDFライターか実際のプリンタかを識別する方法がわ
からず困っております。

PRINTER_INFO_5構造体のpPrinterName変数にプリンタ名が入っているので、そこ
に"PDF"という文字が含まれていれば、PDFライターである、という識別方法を考えまし
たが、強引な気がしています。

PDFライターを判別する良い方法がありましたら、ご教授いただけないでしょうか?

TETU 2017/04/03(月) 16:30:57
やろうとしていることは以下の通りになります。

#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;
}

ITO 2017/04/27(木) 09:43:26
うーん、
 PDFライターの仕様が定まっていないですからね。
 個々のPDFライターに依存すると思います。
 ポストスプリクト使っているのが多いのかな?
 商用は分からないので、まずはGPL等の公開している
 フリーのPDFライターを調べてみるしかないかもしれませんね。

TETU 2017/05/08(月) 20:35:12
[[解決]]
返信ありがとうございます。そして返信が遅くなり申し訳ありません。

元々ポストスクリプトで手動で記述しようと思ったのですが、工数がかかり過ぎると判
断し、インストール済みの仮想プリンタを利用しようと思った次第です。

この機能自体、いったん保留することとなったので、ひとまず解決とさせていただきま
す。

古いスレッドには追加発言できません。