INT CALLBACK
dloginfoproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    char buf[256];
    pdf_xref *xref = gapp.xref;
    fz_obj *obj;

    switch(message)
    {
    case WM_INITDIALOG:

	SetDlgItemTextA(hwnd, 0x10, gapp.filename);

	sprintf(buf, "PDF %d.%d", xref->version / 10, xref->version % 10);
	SetDlgItemTextA(hwnd, 0x11, buf);

	if (xref->crypt)
	{
	    sprintf(buf, "Standard %d bit %s", xref->crypt->length,
		    xref->crypt->strf.method == PDF_CRYPT_AESV2 ? "AES" : "RC4");
	    SetDlgItemTextA(hwnd, 0x12, buf);
	    strcpy(buf, "");
	    if (xref->crypt->p & (1 << 2))
		strcat(buf, "print, ");
	    if (xref->crypt->p & (1 << 3))
		strcat(buf, "modify, ");
	    if (xref->crypt->p & (1 << 4))
		strcat(buf, "copy, ");
	    if (xref->crypt->p & (1 << 5))
		strcat(buf, "annotate, ");
	    if (strlen(buf) > 2)
		buf[strlen(buf)-2] = 0;
	    else
		strcpy(buf, "none");
	    SetDlgItemTextA(hwnd, 0x13, buf);
	}
	else
	{
	    SetDlgItemTextA(hwnd, 0x12, "None");
	    SetDlgItemTextA(hwnd, 0x13, "n/a");
	}

	if (!xref->info)
	    return TRUE;

#define SETUCS(ID) \
	{ \
	    fz_error error; \
		unsigned short *ucs; \
		error = pdf_toucs2(&ucs, obj); \
		if (!error) \
		{ \
		    SetDlgItemTextW(hwnd, ID, ucs); \
			fz_free(ucs); \
		} \
	}

	if ((obj = fz_dictgets(xref->info, "Title")))		SETUCS(0x20)
	if ((obj = fz_dictgets(xref->info, "Author")))		SETUCS(0x21)
	if ((obj = fz_dictgets(xref->info, "Subject")))		SETUCS(0x22)
	if ((obj = fz_dictgets(xref->info, "Keywords")))	SETUCS(0x23)
	if ((obj = fz_dictgets(xref->info, "Creator")))		SETUCS(0x24)
	if ((obj = fz_dictgets(xref->info, "Producer")))	SETUCS(0x25)
	if ((obj = fz_dictgets(xref->info, "CreationDate")))	SETUCS(0x26)
	if ((obj = fz_dictgets(xref->info, "ModDate")))		SETUCS(0x27)

	return TRUE;

    case WM_COMMAND:
	EndDialog(hwnd, 0);
	return TRUE;
    }
    return FALSE;
}
Example #2
0
INT CALLBACK
dloginfoproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	char buf[256];
	pdf_xref *xref = gapp.xref;
	fz_obj *info, *obj;

	switch(message)
	{
	case WM_INITDIALOG:

		SetDlgItemTextW(hwnd, 0x10, wbuf);

		if (!xref)
		{
			SetDlgItemTextA(hwnd, 0x11, "XPS");
			SetDlgItemTextA(hwnd, 0x12, "None");
			SetDlgItemTextA(hwnd, 0x13, "n/a");
			return TRUE;
		}

		sprintf(buf, "PDF %d.%d", xref->version / 10, xref->version % 10);
		SetDlgItemTextA(hwnd, 0x11, buf);

		if (xref->crypt)
		{
			sprintf(buf, "Standard V%d %d-bit %s", pdf_get_crypt_revision(xref),
				pdf_get_crypt_length(xref), pdf_get_crypt_method(xref));
			SetDlgItemTextA(hwnd, 0x12, buf);
			strcpy(buf, "");
			if (pdf_has_permission(xref, PDF_PERM_PRINT))
				strcat(buf, "print, ");
			if (pdf_has_permission(xref, PDF_PERM_CHANGE))
				strcat(buf, "modify, ");
			if (pdf_has_permission(xref, PDF_PERM_COPY))
				strcat(buf, "copy, ");
			if (pdf_has_permission(xref, PDF_PERM_NOTES))
				strcat(buf, "annotate, ");
			if (strlen(buf) > 2)
				buf[strlen(buf)-2] = 0;
			else
				strcpy(buf, "none");
			SetDlgItemTextA(hwnd, 0x13, buf);
		}
		else
		{
			SetDlgItemTextA(hwnd, 0x12, "None");
			SetDlgItemTextA(hwnd, 0x13, "n/a");
		}

		info = fz_dict_gets(xref->trailer, "Info");
		if (!info)
			return TRUE;

#define SETUCS(ID) \
		{ \
			unsigned short *ucs; \
			ucs = pdf_to_ucs2(obj); \
			SetDlgItemTextW(hwnd, ID, ucs); \
			fz_free(ucs); \
		}

		if ((obj = fz_dict_gets(info, "Title")))
			SETUCS(0x20);
		if ((obj = fz_dict_gets(info, "Author")))
			SETUCS(0x21);
		if ((obj = fz_dict_gets(info, "Subject")))
			SETUCS(0x22);
		if ((obj = fz_dict_gets(info, "Keywords")))
			SETUCS(0x23);
		if ((obj = fz_dict_gets(info, "Creator")))
			SETUCS(0x24);
		if ((obj = fz_dict_gets(info, "Producer")))
			SETUCS(0x25);
		if ((obj = fz_dict_gets(info, "CreationDate")))
			SETUCS(0x26);
		if ((obj = fz_dict_gets(info, "ModDate")))
			SETUCS(0x27);
		return TRUE;

	case WM_COMMAND:
		EndDialog(hwnd, 1);
		return TRUE;
	}
	return FALSE;
}