OEM販売のご相談
ご相談ください!

PDF Tool APIサンプルコード:注釈情報取得

機能イメージ

PDFの各ページに含まれる注釈の個数と注釈の情報を取得します。

概要

サンプルコードの概要

入力PDFの全てのページに含まれている注釈の情報を取得します。

  • PtlAnnots:注釈のコンテナを表現するクラス
  • PtlAnnots.getCount(): 注釈数を取得
  • PtlAnnots.get(int index):指定した注釈を取得
  • PtlAnnot.getRect(): 注釈の矩形座標を取得
  • PtlAnnot.getDate(): 日時を取得
  • PtlAnnot.getAnnotFlags(): 注釈フラグを取得

サンプルコード

/*
	Antenna House PDF Tool API V8.0
	C++ Interface sample program

	概要:注釈情報の取得

	Copyright 2013-2025 Antenna House, Inc.
*/

#include < PdfTk.h >
#include < stdio.h >

using namespace PdfTk;

void showAnnot(PtlAnnot& annot, const char* outpathAttach = NULL);
void showAnnotText(PtlAnnot& annot);
void showAnnotLink(PtlAnnot& annot);
void showAnnotStamp(PtlAnnot& annot);
void showAnnotFileAttachment(PtlAnnot& annot, const char* outpathAttach);
void showPopup(PtlAnnot& annot);
void showAnnotOther(PtlAnnot& annot);
void showAnnotCommon(PtlAnnot& annot);
void showAnnotMarkup(PtlAnnot& annot);
void showColor(const PtlColor& color);
void showAction(PtlAction& act);
void showDest(const PtlDest& dest);

int main(int argc, char* argv[])
{
	if (argc < 2) {
		printf("usage: GetAnnots.exe in-pdf-file [out-attach-file]\n");
		return 1;
	}
	try
	{
		PtlParamInput input(argv[1]);
		PtlPDFDocument doc;

		// PDFファイルをロードします。
		doc.load(input);

		// ページコンテナの取得
		PtlPages& pages = doc.getPages();

		// ページコンテナが空かどうか
		if (pages.isEmpty()){
			printf("ページコンテナが空\n");
			return 1;
		}

		int numPages = pages.getCount();
        for (int i=0; i < numPages; i++)
        {
			printf("ページ : %d\n", i+1);
			// ページの取得
			PtlPage page = pages.get(i);
		
			// 注釈コンテナの取得
			PtlAnnots& annots = page.getAnnots();

			// 注釈コンテナが空かどうか
			if (annots.isEmpty()){
				printf("注釈なし\n");
			} else {
				// 注釈数の取得
				int numAnnots = annots.getCount();
				printf("注釈数 : %d\n", numAnnots);
				for (int j=0; j < numAnnots; j++)
				{
					PtlAnnot annot = annots.get(j);
					if (argc < 3) {
						showAnnot(annot);
					} else {
						showAnnot(annot, argv[2]);
					}
				}
			}
		}

		printf("完了!\n");
	}
	catch (const PtlException &e)
	{
		fprintf(stderr, "Error code : %d\n %s\n", e.getErrorCode(), e.getErrorMessage().c_str());
		return 1;
	}	
	return 0;
}

void showAnnot(PtlAnnot& annot, const char* outpathAttach)
{
	PtlAnnot::ANNOT_TYPE annotType = annot.getType();
	switch (annotType) {
	case PtlAnnot::TYPE_TEXT:
		showAnnotText(annot);
		break;
	case PtlAnnot::TYPE_LINK:
		showAnnotLink(annot);
		break;
	case PtlAnnot::TYPE_STAMP:
		showAnnotStamp(annot);
		break;
	case PtlAnnot::TYPE_FILE_ATTACHMENT:
		showAnnotFileAttachment(annot, outpathAttach);
		break;
	default:
		showAnnotOther(annot);
		break;
	}
}

void showAnnotText(PtlAnnot& annot)
{
	printf("ANNOT_TYPE = Text\n");
	PtlAnnotText& annotText = (PtlAnnotText&)annot;
	showAnnotCommon(annotText);
	PtlAnnotText::ICON_TYPE iconType = annotText.getIconType();
	switch (iconType) {
	case PtlAnnotText::ICON_COMMENT:
		printf("ICON_TYPE = COMMENT\n" );
		break;
	case PtlAnnotText::ICON_HELP:
		printf("ICON_TYPE = HELP\n" );
		break;
	case PtlAnnotText::ICON_INSERT:
		printf("ICON_TYPE = INSERT\n" );
		break;
	case PtlAnnotText::ICON_KEY:
		printf("ICON_TYPE = KEY\n" );
		break;
	case PtlAnnotText::ICON_NEWPARAGRAPH:
		printf("ICON_TYPE = NEWPARAGRAPH\n" );
		break;
	case PtlAnnotText::ICON_NOTE:
		printf("ICON_TYPE = NOTE\n" );
		break;
	case PtlAnnotText::ICON_PARAGRAPH:
		printf("ICON_TYPE = PARAGRAPH\n" );
		break;
	case PtlAnnotText::ICON_CUSTOM:
		printf("ICON_TYPE = CUSTOM\n" );
		break;
	case PtlAnnotText::ICON_UNKNOWN:
		printf("ICON_TYPE = UNKNOWN\n" );
		break;
	}
	PtlParamString iconName = annotText.getIconName();
	printf("ICON_NAME = \"%s\"\n", iconName.c_str());
	showAnnotMarkup(annotText);
}

void showAnnotLink(PtlAnnot& annot)
{
	printf("ANNOT_TYPE = Link\n");
	PtlAnnotLink& annotLink = (PtlAnnotLink&)annot;
	showAnnotCommon(annotLink);
	PtlAnnotLink::HIGHLIGHTING_MODE highlight = annotLink.getHighlightMode();
	switch (highlight) {
	case PtlAnnotLink::HIGHLIGHTING_MODE_NONE:
		printf("HIGHLIGHTING_MODE = NONE\n" );
		break;
	case PtlAnnotLink::HIGHLIGHTING_MODE_INVERT:
		printf("HIGHLIGHTING_MODE = INVERT\n" );
		break;
	case PtlAnnotLink::HIGHLIGHTING_MODE_OUTLINE:
		printf("HIGHLIGHTING_MODE = OUTLINE\n" );
		break;
	case PtlAnnotLink::HIGHLIGHTING_MODE_PUSH:
		printf("HIGHLIGHTING_MODE = PUSH\n" );
		break;
	}
	PtlDest& dest = annotLink.getDest();
	showDest(dest);

	PtlAction& act = annotLink.getAction();
	showAction(act);
}

void showAnnotStamp(PtlAnnot& annot)
{
	printf("ANNOT_TYPE = Stamp\n");
	PtlAnnotStamp& annotStamp = (PtlAnnotStamp&)annot;
	showAnnotCommon(annotStamp);
	PtlAnnotStamp::ICON_TYPE iconType = annotStamp.getIconType();
	switch (iconType) {
	case PtlAnnotStamp::ICON_APPROVED:
		printf("ICON_TYPE = APPROVED\n" );
		break;
	case PtlAnnotStamp::ICON_AS_IS:
		printf("ICON_TYPE = AS_IS\n" );
		break;
	case PtlAnnotStamp::ICON_CONFIDENTIAL:
		printf("ICON_TYPE = CONFIDENTIAL\n" );
		break;
	case PtlAnnotStamp::ICON_DEPARTMENTAL:
		printf("ICON_TYPE = DEPARTMENTAL\n" );
		break;
	case PtlAnnotStamp::ICON_DRAFT:
		printf("ICON_TYPE = DRAFT\n" );
		break;
	case PtlAnnotStamp::ICON_EXPERIMENTAL:
		printf("ICON_TYPE = EXPERIMENTAL\n" );
		break;
	case PtlAnnotStamp::ICON_EXPIRED:
		printf("ICON_TYPE = EXPIRED\n" );
		break;
	case PtlAnnotStamp::ICON_FINAL:
		printf("ICON_TYPE = FINAL\n" );
		break;
	case PtlAnnotStamp::ICON_FOR_COMMENT:
		printf("ICON_TYPE = FOR_COMMENT\n" );
		break;
	case PtlAnnotStamp::ICON_FOR_PUBLIC_RELEASE:
		printf("ICON_TYPE = FOR_PUBLIC_RELEASE\n" );
		break;
	case PtlAnnotStamp::ICON_NOT_APPROVED:
		printf("ICON_TYPE = NOT_APPROVED\n" );
		break;
	case PtlAnnotStamp::ICON_NOT_FOR_PUBLIC_RELEASE:
		printf("ICON_TYPE = NOT_FOR_PUBLIC_RELEASE\n" );
		break;
	case PtlAnnotStamp::ICON_SOLD:
		printf("ICON_TYPE = SOLD\n" );
		break;
	case PtlAnnotStamp::ICON_TOP_SECRET:
		printf("ICON_TYPE = TOP_SECRET\n" );
		break;
	case PtlAnnotStamp::ICON_SB_APPROVED:
		printf("ICON_TYPE = SB_APPROVED\n" );
		break;
	case PtlAnnotStamp::ICON_SB_COMPLETED:
		printf("ICON_TYPE = SB_COMPLETED\n" );
		break;
	case PtlAnnotStamp::ICON_SB_CONFIDENTIAL:
		printf("ICON_TYPE = SB_CONFIDENTIAL\n" );
		break;
	case PtlAnnotStamp::ICON_SB_DRAFT:
		printf("ICON_TYPE = SB_DRAFT\n" );
		break;
	case PtlAnnotStamp::ICON_SB_FINAL:
		printf("ICON_TYPE = SB_FINAL\n" );
		break;
	case PtlAnnotStamp::ICON_SB_FOR_COMMENT:
		printf("ICON_TYPE = SB_FOR_COMMENT\n" );
		break;
	case PtlAnnotStamp::ICON_SB_FOR_PUBLIC_RELEASE:
		printf("ICON_TYPE = SB_FOR_PUBLIC_RELEASE\n" );
		break;
	case PtlAnnotStamp::ICON_SB_INFORMATIONONLY:
		printf("ICON_TYPE = SB_INFORMATIONONLY\n" );
		break;
	case PtlAnnotStamp::ICON_SB_NOT_APPROVED:
		printf("ICON_TYPE = SB_NOT_APPROVED\n" );
		break;
	case PtlAnnotStamp::ICON_SB_NOT_FOR_PUBLIC_RELEASE:
		printf("ICON_TYPE = SB_NOT_FOR_PUBLIC_RELEASE\n" );
		break;
	case PtlAnnotStamp::ICON_SB_PRELIMINARYRESULTS:
		printf("ICON_TYPE = SB_PRELIMINARYRESULTS\n" );
		break;
	case PtlAnnotStamp::ICON_SB_VOID:
		printf("ICON_TYPE = SB_VOID\n" );
		break;
	case PtlAnnotStamp::ICON_CUSTOM:
		printf("ICON_TYPE = CUSTOM\n" );
		break;
	case PtlAnnotStamp::ICON_UNKNOWN:
		printf("ICON_TYPE = UNKNOWN\n" );
		break;
	}
	PtlParamString iconName = annotStamp.getIconName();
	printf("ICON_NAME = \"%s\"", iconName.c_str());
	showAnnotMarkup(annotStamp);
}

void showAnnotFileAttachment(PtlAnnot& annot, const char* outpathAttach)
{
	printf("ANNOT_TYPE = FileAttachment\n");
	PtlAnnotFileAttachment& annotFileAttachment = (PtlAnnotFileAttachment&)annot;
	showAnnotCommon(annotFileAttachment);
	PtlAnnotFileAttachment::ICON_TYPE iconType = annotFileAttachment.getIconType();
	switch (iconType) {
	case PtlAnnotFileAttachment::ICON_GRAPH:
		printf("ICON_TYPE = GRAPH\n" );
		break;
	case PtlAnnotFileAttachment::ICON_PAPERCLIP:
		printf("ICON_TYPE = PAPERCLIP\n" );
		break;
	case PtlAnnotFileAttachment::ICON_PUSHPIN:
		printf("ICON_TYPE = PUSHPIN\n" );
		break;
	case PtlAnnotFileAttachment::ICON_TAG:
		printf("ICON_TYPE = TAG\n" );
		break;
	case PtlAnnotFileAttachment::ICON_CUSTOM:
		printf("ICON_TYPE = CUSTOM\n" );
		break;
	case PtlAnnotFileAttachment::ICON_UNKNOWN:
		printf("ICON_TYPE = UNKNOWN\n" );
		break;
	}
	PtlParamString iconName = annotFileAttachment.getIconName();
	printf("ICON_NAME = \"%s\"", iconName.c_str());
	PtlParamString filenName = annotFileAttachment.getFileName();
	printf("FILE_NAME = \"%s\"", filenName.c_str());
	if (outpathAttach) {
		PtlParamOutput outputAttach(outpathAttach);
		annotFileAttachment.writeFile(outputAttach);
	}
	showAnnotMarkup(annotFileAttachment);
}

void showAnnotOther(PtlAnnot& annot)
{
	switch (annot.getType()) {
	case PtlAnnot::TYPE_FREE_TEXT:
		printf("ANNOT_TYPE = FreeText\n" );
		break;
	case PtlAnnot::TYPE_LINE:
		printf("ANNOT_TYPE = Line\n" );
		break;
	case PtlAnnot::TYPE_SQUARE:
		printf("ANNOT_TYPE = Square\n" );
		break;
	case PtlAnnot::TYPE_CIRCLE:
		printf("ANNOT_TYPE = Circle\n" );
		break;
	case PtlAnnot::TYPE_POLYGON:
		printf("ANNOT_TYPE = Polygon\n" );
		break;
	case PtlAnnot::TYPE_POLYLINE:
		printf("ANNOT_TYPE = Polyline\n" );
		break;
	case PtlAnnot::TYPE_HIGHLIGHT:
		printf("ANNOT_TYPE = Highlight\n" );
		break;
	case PtlAnnot::TYPE_UNDERLINE:
		printf("ANNOT_TYPE = Underline\n" );
		break;
	case PtlAnnot::TYPE_SQUIGGLY:
		printf("ANNOT_TYPE = Squiggly\n" );
		break;
	case PtlAnnot::TYPE_STRIKEOUT:
		printf("ANNOT_TYPE = Strikeout\n" );
		break;
	case PtlAnnot::TYPE_CARET:
		printf("ANNOT_TYPE = Caret\n" );
		break;
	case PtlAnnot::TYPE_INK:
		printf("ANNOT_TYPE = Ink\n" );
		break;
	case PtlAnnot::TYPE_SOUND:
		printf("ANNOT_TYPE = Sound\n" );
		break;
	case PtlAnnot::TYPE_MOVIE:
		printf("ANNOT_TYPE = Movie\n" );
		break;
	case PtlAnnot::TYPE_WIDGET:
		printf("ANNOT_TYPE = Widget\n" );
		break;
	case PtlAnnot::TYPE_SCREEN:
		printf("ANNOT_TYPE = Screen\n" );
		break;
	case PtlAnnot::TYPE_PRINTER_MARK:
		printf("ANNOT_TYPE = PrinterMark\n" );
		break;
	case PtlAnnot::TYPE_TRAP_NETWORK:
		printf("ANNOT_TYPE = TrapNetwork\n" );
		break;
	case PtlAnnot::TYPE_WATERMARK:
		printf("ANNOT_TYPE = Watermark\n" );
		break;
	case PtlAnnot::TYPE_3D:
		printf("ANNOT_TYPE = 3D\n" );
		break;
	case PtlAnnot::TYPE_REDACT:
		printf("ANNOT_TYPE = Redact\n" );
		break;
	case PtlAnnot::TYPE_PROJECTION:
		printf("ANNOT_TYPE = Projection\n" );
		break;
	case PtlAnnot::TYPE_RICHMEDIA:
		printf("ANNOT_TYPE = Richmedia\n" );
		break;
	default:
		printf("ANNOT_TYPE = Unknown\n" );
		break;
	}
	showAnnotCommon(annot);
	if (annot.isMarkup()) {
		showAnnotMarkup(annot);
	}
}

void showPopup(PtlAnnot& annot)
{
	printf("ANNOT_TYPE = Popup\n");
	PtlAnnotPopup& annotPopup = (PtlAnnotPopup&)annot;
	showAnnotCommon(annotPopup);
	bool openState = annotPopup.getOpenState();
	if (openState)
		printf("OPEN_STATE == true\n" );
	else
		printf("OPEN_STATE == false\n" );
}

void showAnnotCommon(PtlAnnot& annot)
{
	PtlRect rect = annot.getRect();
	printf("Rcet = %f,%f,%f,%f\n" , rect.getLeft(), rect.getBottom(), rect.getRight(), rect.getTop());

	PtlParamString textContents = annot.getTextContents();
	printf("TextContents = \"%s\"\n", textContents.c_str());

	PtlDate date = annot.getDate();
	{
		int year = date.getYear();
		int month = date.getMonth();
		int day = date.getDay();
		int hour = date.getHour();
		int min = date.getMin();
		int sec = date.getSec();
		printf("Date : %d/%d/%d %d:%d:%d\n", year, month, day, hour, min, sec);
	}

	int flags = annot.getAnnotFlags();
	if ((flags & PtlAnnot::FLAG_INVISIBLE) == PtlAnnot::FLAG_INVISIBLE)
		printf("FLAG_INVISIBLE on\n" );
	else
		printf("FLAG_INVISIBLE off\n" );
	if ((flags & PtlAnnot::FLAG_HIDDEN) == PtlAnnot::FLAG_HIDDEN)
		printf("FLAG_HIDDEN on\n" );
	else
		printf("FLAG_HIDDEN off\n" );
	if ((flags & PtlAnnot::FLAG_PRINT) == PtlAnnot::FLAG_PRINT)
		printf("FLAG_PRINT on\n" );
	else
		printf("FLAG_PRINT off\n" );
	if ((flags & PtlAnnot::FLAG_NOZOOM) == PtlAnnot::FLAG_NOZOOM)
		printf("FLAG_NOZOOM on\n" );
	else
		printf("FLAG_NOZOOM off\n" );
	if ((flags & PtlAnnot::FLAG_NOROTATE) == PtlAnnot::FLAG_NOROTATE)
		printf("FLAG_NOROTATE on\n" );
	else
		printf("FLAG_NOROTATE off\n" );
	if ((flags & PtlAnnot::FLAG_NOVIEW) == PtlAnnot::FLAG_NOVIEW)
		printf("FLAG_NOVIEW on\n" );
	else
		printf("FLAG_NOVIEW off\n" );
	if ((flags & PtlAnnot::FLAG_READONLY) == PtlAnnot::FLAG_READONLY)
		printf("FLAG_READONLY on\n" );
	else
		printf("FLAG_READONLY off\n" );
	if ((flags & PtlAnnot::FLAG_LOCKED) == PtlAnnot::FLAG_LOCKED)
		printf("FLAG_LOCKED on\n" );
	else
		printf("FLAG_LOCKED off\n" );
	if ((flags & PtlAnnot::FLAG_TOGGLE_NOVIEW) == PtlAnnot::FLAG_TOGGLE_NOVIEW)
		printf("FLAG_TOGGLE_NOVIEW on\n" );
	else
		printf("FLAG_TOGGLE_NOVIEW off\n" );
	if ((flags & PtlAnnot::FLAG_LOCKED_CONTENTS) == PtlAnnot::FLAG_LOCKED_CONTENTS)
		printf("FLAG_LOCKED_CONTENTS on\n" );
	else
		printf("FLAG_LOCKED_CONTENTS off\n" );

	PtlColor color = annot.getColor();
	showColor(color);
	PtlColor colorI = annot.getInteriorColor();
	showColor(colorI);

	PtlAnnot::BORDER_STYLE boderStyle = annot.getBorderStyle();
	switch (boderStyle) {
	case PtlAnnot::BORDER_SOLID:
		printf("BORDER_STYLE = SOLID\n" );
		break;
	case PtlAnnot::BORDER_DASHED:
		printf("BORDER_STYLE = DASHED\n" );
		break;
	case PtlAnnot::BORDER_BEVELED:
		printf("BORDER_STYLE = BEVELED\n" );
		break;
	case PtlAnnot::BORDER_INSET:
		printf("BORDER_STYLE = INSET\n" );
		break;
	case PtlAnnot::BORDER_UNDERLINE:
		printf("BORDER_STYLE = UNDERLINE\n" );
		break;
	}

	PtlAnnot::BORDER_LINE_WIDTH boderWidth = annot.getBorderWidth();
	switch (boderWidth) {
	case PtlAnnot::BORDER_WIDTH_NONE:
		printf("BORDER_WIDTH = NONE\n" );
		break;
	case PtlAnnot::BORDER_WIDTH_THIN:
		printf("BORDER_WIDTH = THIN\n" );
		break;
	case PtlAnnot::BORDER_WIDTH_MIDDLE:
		printf("BORDER_WIDTH = MIDDLE\n" );
		break;
	case PtlAnnot::BORDER_WIDTH_THICK:
		printf("BORDER_WIDTH = THICK\n" );
		break;
	}
}

void showAnnotMarkup(PtlAnnot& annot)
{
	PtlAnnotMarkup& annotMarkup = (PtlAnnotMarkup&)annot;
	PtlParamString markUpTitle = annotMarkup.getMarkUpTitle();
	printf("MarkUpTitle = \"%s\"\n", markUpTitle.c_str());
	PtlParamString markUpSubj = annotMarkup.getMarkUpSubj();
	printf("MarkUpSubj = \"%s\"\n", markUpSubj.c_str());
	PtlDate date = annotMarkup.getMarkUpDate();
	{
		int year = date.getYear();
		int month = date.getMonth();
		int day = date.getDay();
		int hour = date.getHour();
		int min = date.getMin();
		int sec = date.getSec();
		printf("MarkUpDate : %d/%d/%d %d:%d:%d\n", year, month, day, hour, min, sec);
	}
	printf("MarkUpCA : %f\n", annotMarkup.getMarkUpCA());
	if (annotMarkup.hasAnnotPopup()) {
		PtlAnnotPopup popup = annotMarkup.getAnnotPopup();
		showPopup(popup);
	}
}

void showColor(const PtlColor& color)
{
	int colorType = color.getType();
	switch (colorType) {
	case PtlColor::TYPE_NONE:
		printf("COLOR_TYPE = None\n" );
		break;
	case PtlColor::TYPE_DEVICE_GRAY:
		{
			const PtlColorDeviceGray& colorGray = (const PtlColorDeviceGray&)color;
			printf("COLOR_TYPE = GRAY(%f)\n" , colorGray.getGray());
		}
		break;
	case PtlColor::TYPE_DEVICE_RGB:
		{
			const PtlColorDeviceRGB& colorRGB = (const PtlColorDeviceRGB&)color;
			printf("COLOR_TYPE = RGB(%f,%f,%f)\n" , colorRGB.getR(), colorRGB.getG(), colorRGB.getB());
		}
		break;
	case PtlColor::TYPE_DEVICE_CMYK:
		{
			const PtlColorDeviceCMYK& colorCMYK = (const PtlColorDeviceCMYK&)color;
			printf("COLOR_TYPE = CMYK(%f,%f,%f,%f)\n" , colorCMYK.getC(), colorCMYK.getM(), colorCMYK.getY(), colorCMYK.getK());
		}
		break;
	}
}

void showAction(PtlAction& act)
{
	int actType = act.getType();
	switch (actType) {
	case PtlAction::TYPE_GOTO:
		{
			printf("ACTION_TYPE = GOTO\n" );
			PtlActionGoTo& actGoTo = (PtlActionGoTo&)act;
			PtlDest& destGoTo = actGoTo.getDest();
			showDest(destGoTo);
		}
		break;
	case PtlAction::TYPE_GOTO_R:
		{
			printf("ACTION_TYPE = GOTOR\n" );
			PtlActionGoToR& actGoToR = (PtlActionGoToR&)act;
			PtlDest destGoToR = actGoToR.getDest();
			showDest(destGoToR);
			PtlParamString fileName1 = actGoToR.getFileName();
			printf("GOTOR FILENAME = %s\n", fileName1.c_str());
			if (actGoToR.getNewWindowFlag())
				printf("GOTOR NewWindowFlag on\n" );
			else
				printf("GOTOR NewWindowFlag off\n" );
		}
		break;
	case PtlAction::TYPE_LAUNCH:
		{
			printf("ACTION_TYPE = LAUNCH" );
			PtlActionLaunch& actLaunch = (PtlActionLaunch&)act;
			PtlParamString fileName2 = actLaunch.getFileName();
			printf("LAUNCH FILENAME = %s\n", fileName2.c_str());
			if (actLaunch.getNewWindowFlag())
				printf("LAUNCH NewWindowFlag on\n" );
			else
				printf("LAUNCH NewWindowFlag off\n" );
		}
		break;
	case PtlAction::TYPE_URI:
		{
			printf("ACTION_TYPE = URI\n" );
			PtlActionURI& actURI = (PtlActionURI&)act;
			PtlParamString uri = actURI.getURI();
			printf("URI = %s\n", uri.c_str());
		}
		break;
	case PtlAction::TYPE_UNKNOWN:
		printf("ACTION_TYPE = UNKNOWN\n" );
		break;
	}
}

void showDest(const PtlDest& dest)
{
	int destType = dest.getType();
	switch (destType) {
	case PtlDest::TYPE_NONE:
		printf("DEST_TYPE = NONE\n" );
		break;
	case PtlDest::TYPE_XYZ:
		printf("DEST_TYPE = XYZ\n" );
		break;
	case PtlDest::TYPE_FIT:
		printf("DEST_TYPE = FIT\n" );
		break;
	case PtlDest::TYPE_FIT_H:
		printf("DEST_TYPE = FITH\n" );
		break;
	case PtlDest::TYPE_FIT_V:
		printf("DEST_TYPE = FITV\n" );
		break;
	case PtlDest::TYPE_FIT_R:
		printf("DEST_TYPE = FITR\n" );
		break;
	case PtlDest::TYPE_FIT_B:
		printf("DEST_TYPE = FITB\n" );
		break;
	case PtlDest::TYPE_FIT_BH:
		printf("DEST_TYPE = FITBH\n" );
		break;
	case PtlDest::TYPE_FIT_BV:
		printf("DEST_TYPE = FITBV\n" );
		break;
	}
	printf("DEST_PAGE : %d\n", dest.getPageNumber());
	if (dest.isLeftNull())
		printf("DEST_LEFT = null\n" );
	else
		printf("DEST_LEFT : %f\n", dest.getLeft());
	if (dest.isBottomNull())
		printf("DEST_BOTTOM = null\n" );
	else
		printf("DEST_BOTTOM : %f\n", dest.getBottom());
	if (dest.isRightNull())
		printf("DEST_RIGHT = null\n" );
	else
		printf("DEST_RIGHT : %f\n", dest.getRight());
	if (dest.isTopNull())
		printf("DEST_TOP = null\n" );
	else
		printf("DEST_TOP : %f\n", dest.getTop());
	if (dest.isZoomNull())
		printf("DEST_ZOOM = null\n" );
	else
		printf("DEST_ZOOM : %f\n", dest.getZoom());
}

            
/*
    Antenna House PDF Tool API V8.0
    Java Interface sample program

    概要:注釈情報の取得

    Copyright 2015-2025 Antenna House, Inc.
*/

package Sample;

import jp.co.antenna.ptl.*;

public class GetAnnots {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        if (args.length < 1)
        {
            System.out.println("usage: java GetAnnots in-pdf-file [out-attach-file]");
            return;
        }
        String outpathAttach = "";
        if (args.length == 2) {
            outpathAttach = args[1];
        }

        try (PtlParamInput inputFile = new PtlParamInput(args[0]);
             PtlPDFDocument doc = new PtlPDFDocument()) {

            // PDFファイルをロードします。
            doc.load(inputFile);

            try (PtlPages pages = doc.getPages()) //ページコンテナの取得
            {
                // ページコンテナが空かどうか
                if (pages.isEmpty())
                {
                    System.out.println("ページコンテナが空\n");
                    return;
                }

                int numPages = pages.getCount();
                for (int i=0; i < numPages; i++)
                {
                    System.out.println("ページ" + (i+1));

                    try (PtlPage page = pages.get(i))
                    {
                        // 注釈コンテナが空かどうか
                        if (!page.hasAnnots())
                        {
                            System.out.println("注釈なし");
                            continue;
                        }

                        try (PtlAnnots annots = page.getAnnots())
                        {
                            // 注釈数の取得
                            int numAnnots = annots.getCount();
                            System.out.println("注釈数 : " + numAnnots);
                            for (int j=0; j < numAnnots; j++)
                            {
                                try (PtlAnnot annot = annots.get(j)) {
                                    showAnnot(annot, outpathAttach);
                                }
                            }
                        }
                    }
                }
            }
        }
        catch (PtlException pex) {
            System.out.println("PtlException : ErrorCode = " + pex.getErrorCode() + "\n  " + pex.getErrorMessage());
        }
        catch (Exception ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Error ex) {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
        finally {
            System.out.println("-- 完了 --");
        }
    }

    public static void showAnnot(PtlAnnot annot, String outpathAttach) throws PtlException, Exception, Error
    {
        PtlAnnot.ANNOT_TYPE annotType = annot.getType();
        switch (annotType) {
        case TYPE_TEXT:
            showAnnotText(annot);
            break;
        case TYPE_LINK:
            showAnnotLink(annot);
            break;
        case TYPE_STAMP:
            showAnnotStamp(annot);
            break;
        case TYPE_FILE_ATTACHMENT:
            showAnnotFileAttachment(annot, outpathAttach);
            break;
        default:
            showAnnotOther(annot);
            break;
        }
    }

    public static void showAnnotText(PtlAnnot annot) throws PtlException, Exception, Error
    {
        System.out.println("ANNOT_TYPE = Text ");
        PtlAnnotText annotText = (PtlAnnotText)annot;
        showAnnotCommon(annotText);
        PtlAnnotText.ICON_TYPE iconType = annotText.getIconType();
        switch (iconType) {
        case ICON_COMMENT:
            System.out.println("ICON_TYPE = COMMENT" );
            break;
        case ICON_HELP:
            System.out.println("ICON_TYPE = HELP" );
            break;
        case ICON_INSERT:
            System.out.println("ICON_TYPE = INSERT" );
            break;
        case ICON_KEY:
            System.out.println("ICON_TYPE = KEY" );
            break;
        case ICON_NEWPARAGRAPH:
            System.out.println("ICON_TYPE = NEWPARAGRAPH" );
            break;
        case ICON_NOTE:
            System.out.println("ICON_TYPE = NOTE" );
            break;
        case ICON_PARAGRAPH:
            System.out.println("ICON_TYPE = PARAGRAPH" );
            break;
        case ICON_CUSTOM:
            System.out.println("ICON_TYPE = CUSTOM" );
            break;
        case ICON_UNKNOWN:
            System.out.println("ICON_TYPE = UNKNOWN" );
            break;
        }
        System.out.println("ICON_NAME = \"" + annotText.getIconName() + "\"" );
        showAnnotMarkup(annotText);
    }

    public static void showAnnotLink(PtlAnnot annot) throws PtlException, Exception, Error
    {
        System.out.println("ANNOT_TYPE = Link ");
        PtlAnnotLink annotLink = (PtlAnnotLink)annot;
        showAnnotCommon(annotLink);
        PtlAnnotLink.HIGHLIGHTING_MODE highlight = annotLink.getHighlightMode();
        switch (highlight) {
        case HIGHLIGHTING_MODE_NONE:
            System.out.println("HIGHLIGHTING_MODE = NONE" );
            break;
        case HIGHLIGHTING_MODE_INVERT:
            System.out.println("HIGHLIGHTING_MODE = INVERT" );
            break;
        case HIGHLIGHTING_MODE_OUTLINE:
            System.out.println("HIGHLIGHTING_MODE = OUTLINE" );
            break;
        case HIGHLIGHTING_MODE_PUSH:
            System.out.println("HIGHLIGHTING_MODE = PUSH" );
            break;
        }
        try (PtlDest dest = annotLink.getDest()) {
            showDest(dest);
        }
        try (PtlAction act = annotLink.getAction()) {
            showAction(act);
        }
    }

    public static void showAnnotStamp(PtlAnnot annot) throws PtlException, Exception, Error
    {
        System.out.println("ANNOT_TYPE = Stamp");
        PtlAnnotStamp annotStamp = (PtlAnnotStamp)annot;
        showAnnotCommon(annotStamp);
        PtlAnnotStamp.ICON_TYPE iconType = annotStamp.getIconType();
        switch (iconType) {
        case ICON_APPROVED:
            System.out.println("ICON_TYPE = APPROVED" );
            break;
        case ICON_AS_IS:
            System.out.println("ICON_TYPE = AS_IS" );
            break;
        case ICON_CONFIDENTIAL:
            System.out.println("ICON_TYPE = CONFIDENTIAL" );
            break;
        case ICON_DEPARTMENTAL:
            System.out.println("ICON_TYPE = DEPARTMENTAL" );
            break;
        case ICON_DRAFT:
            System.out.println("ICON_TYPE = DRAFT" );
            break;
        case ICON_EXPERIMENTAL:
            System.out.println("ICON_TYPE = EXPERIMENTAL" );
            break;
        case ICON_EXPIRED:
            System.out.println("ICON_TYPE = EXPIRED" );
            break;
        case ICON_FINAL:
            System.out.println("ICON_TYPE = FINAL" );
            break;
        case ICON_FOR_COMMENT:
            System.out.println("ICON_TYPE = FOR_COMMENT" );
            break;
        case ICON_FOR_PUBLIC_RELEASE:
            System.out.println("ICON_TYPE = FOR_PUBLIC_RELEASE" );
            break;
        case ICON_NOT_APPROVED:
            System.out.println("ICON_TYPE = NOT_APPROVED" );
            break;
        case ICON_NOT_FOR_PUBLIC_RELEASE:
            System.out.println("ICON_TYPE = NOT_FOR_PUBLIC_RELEASE" );
            break;
        case ICON_SOLD:
            System.out.println("ICON_TYPE = SOLD" );
            break;
        case ICON_TOP_SECRET:
            System.out.println("ICON_TYPE = TOP_SECRET" );
            break;
        case ICON_SB_APPROVED:
            System.out.println("ICON_TYPE = SB_APPROVED" );
            break;
        case ICON_SB_COMPLETED:
            System.out.println("ICON_TYPE = SB_COMPLETED" );
            break;
        case ICON_SB_CONFIDENTIAL:
            System.out.println("ICON_TYPE = SB_CONFIDENTIAL" );
            break;
        case ICON_SB_DRAFT:
            System.out.println("ICON_TYPE = SB_DRAFT" );
            break;
        case ICON_SB_FINAL:
            System.out.println("ICON_TYPE = SB_FINAL" );
            break;
        case ICON_SB_FOR_COMMENT:
            System.out.println("ICON_TYPE = SB_FOR_COMMENT" );
            break;
        case ICON_SB_FOR_PUBLIC_RELEASE:
            System.out.println("ICON_TYPE = SB_FOR_PUBLIC_RELEASE" );
            break;
        case ICON_SB_INFORMATIONONLY:
            System.out.println("ICON_TYPE = SB_INFORMATIONONLY" );
            break;
        case ICON_SB_NOT_APPROVED:
            System.out.println("ICON_TYPE = SB_NOT_APPROVED" );
            break;
        case ICON_SB_NOT_FOR_PUBLIC_RELEASE:
            System.out.println("ICON_TYPE = SB_NOT_FOR_PUBLIC_RELEASE" );
            break;
        case ICON_SB_PRELIMINARYRESULTS:
            System.out.println("ICON_TYPE = SB_PRELIMINARYRESULTS" );
            break;
        case ICON_SB_VOID:
            System.out.println("ICON_TYPE = SB_VOID" );
            break;
        case ICON_CUSTOM:
            System.out.println("ICON_TYPE = CUSTOM" );
            break;
        case ICON_UNKNOWN:
            System.out.println("ICON_TYPE = UNKNOWN" );
            break;
        }
        System.out.println("ICON_NAME = \"" + annotStamp.getIconName() + "\"" );
        showAnnotMarkup(annotStamp);
    }

    public static void showAnnotFileAttachment(PtlAnnot annot, String outpathAttach) throws PtlException, Exception, Error
    {
        System.out.println("ANNOT_TYPE = FileAttachment");
        PtlAnnotFileAttachment annotFileAttachment = (PtlAnnotFileAttachment)annot;
        showAnnotCommon(annotFileAttachment);
        PtlAnnotFileAttachment.ICON_TYPE iconType = annotFileAttachment.getIconType();
        switch (iconType) {
        case ICON_GRAPH:
            System.out.println("ICON_TYPE = GRAPH" );
            break;
        case ICON_PAPERCLIP:
            System.out.println("ICON_TYPE = PAPERCLIP" );
            break;
        case ICON_PUSHPIN:
            System.out.println("ICON_TYPE = PUSHPIN" );
            break;
        case ICON_TAG:
            System.out.println("ICON_TYPE = TAG" );
            break;
        case ICON_CUSTOM:
            System.out.println("ICON_TYPE = CUSTOM" );
            break;
        case ICON_UNKNOWN:
            System.out.println("ICON_TYPE = UNKNOWN" );
            break;
        }
        System.out.println("ICON_NAME = \"" + annotFileAttachment.getIconName() + "\"" );
        System.out.println("FILE_NAME = \"" + annotFileAttachment.getFileName() + "\"" );
        if (!outpathAttach.isEmpty()) {
            try (PtlParamOutput outputAttach = new PtlParamOutput(outpathAttach)) {
                annotFileAttachment.writeFile(outputAttach);
            }
        }
        showAnnotMarkup(annotFileAttachment);
    }

    public static void showAnnotOther(PtlAnnot annot) throws PtlException, Exception, Error
    {
        PtlAnnot.ANNOT_TYPE annotType = annot.getType();
        switch (annotType) {
        case TYPE_FREE_TEXT:
            System.out.println("ANNOT_TYPE = FreeText" );
            break;
        case TYPE_LINE:
            System.out.println("ANNOT_TYPE = Line" );
            break;
        case TYPE_SQUARE:
            System.out.println("ANNOT_TYPE = Square" );
            break;
        case TYPE_CIRCLE:
            System.out.println("ANNOT_TYPE = Circle" );
            break;
        case TYPE_POLYGON:
            System.out.println("ANNOT_TYPE = Polygon" );
            break;
        case TYPE_POLYLINE:
            System.out.println("ANNOT_TYPE = Polyline" );
            break;
        case TYPE_HIGHLIGHT:
            System.out.println("ANNOT_TYPE = Highlight" );
            break;
        case TYPE_UNDERLINE:
            System.out.println("ANNOT_TYPE = Underline" );
            break;
        case TYPE_SQUIGGLY:
            System.out.println("ANNOT_TYPE = Squiggly" );
            break;
        case TYPE_STRIKEOUT:
            System.out.println("ANNOT_TYPE = Strikeout" );
            break;
        case TYPE_CARET:
            System.out.println("ANNOT_TYPE = Caret" );
            break;
        case TYPE_INK:
            System.out.println("ANNOT_TYPE = Ink" );
            break;
        case TYPE_SOUND:
            System.out.println("ANNOT_TYPE = Sound" );
            break;
        case TYPE_MOVIE:
            System.out.println("ANNOT_TYPE = Movie" );
            break;
        case TYPE_WIDGET:
            System.out.println("ANNOT_TYPE = Widget" );
            break;
        case TYPE_SCREEN:
            System.out.println("ANNOT_TYPE = Screen" );
            break;
        case TYPE_PRINTER_MARK:
            System.out.println("ANNOT_TYPE = PrinterMark" );
            break;
        case TYPE_TRAP_NETWORK:
            System.out.println("ANNOT_TYPE = TrapNetwork" );
            break;
        case TYPE_WATERMARK:
            System.out.println("ANNOT_TYPE = Watermark" );
            break;
        case TYPE_3D:
            System.out.println("ANNOT_TYPE = 3D" );
            break;
        case TYPE_REDACT:
            System.out.println("ANNOT_TYPE = Redact" );
            break;
        case TYPE_PROJECTION:
            System.out.println("ANNOT_TYPE = Projection" );
            break;
        case TYPE_RICHMEDIA:
            System.out.println("ANNOT_TYPE = Richmedia" );
            break;
        default:
            System.out.println("ANNOT_TYPE = Unknown" );
            break;
        }
        showAnnotCommon(annot);
        if (annot.isMarkup()) {
            showAnnotMarkup(annot);
        }
    }

    public static void showPopup(PtlAnnot annot) throws PtlException, Exception, Error
    {
        System.out.println("ANNOT_TYPE = Popup");
        PtlAnnotPopup annotPopup = (PtlAnnotPopup)annot;
        showAnnotCommon(annotPopup);
        boolean openState = annotPopup.getOpenState();
        if (openState)
            System.out.println("OPEN_STATE == true" );
        else
            System.out.println("OPEN_STATE == false" );
    }

    public static void showAnnotCommon(PtlAnnot annot) throws PtlException, Exception, Error
    {
        try (PtlRect rect = annot.getRect()) {
            System.out.printf("Rcet = %f,%f,%f,%f\n" , rect.getLeft(), rect.getBottom(), rect.getRight(), rect.getTop());
        }
        System.out.println("TextContents = \"" + annot.getTextContents() + "\"" );
        try (PtlDate date = annot.getDate())
        {
            int year = date.getYear();
            int month = date.getMonth();
            int day = date.getDay();
            int hour = date.getHour();
            int min = date.getMin();
            int sec = date.getSec();
            System.out.printf("Date : %d/%d/%d %d:%d:%d\n", year, month, day, hour, min, sec);
        }
        int flags = annot.getAnnotFlags();
        if ((flags & PtlAnnot.FLAG_INVISIBLE) == PtlAnnot.FLAG_INVISIBLE)
            System.out.println("FLAG_INVISIBLE on" );
        else
            System.out.println("FLAG_INVISIBLE off" );
        if ((flags & PtlAnnot.FLAG_HIDDEN) == PtlAnnot.FLAG_HIDDEN)
            System.out.println("FLAG_HIDDEN on" );
        else
            System.out.println("FLAG_HIDDEN off" );
        if ((flags & PtlAnnot.FLAG_PRINT) == PtlAnnot.FLAG_PRINT)
            System.out.println("FLAG_PRINT on" );
        else
            System.out.println("FLAG_PRINT off" );
        if ((flags & PtlAnnot.FLAG_NOZOOM) == PtlAnnot.FLAG_NOZOOM)
            System.out.println("FLAG_NOZOOM on" );
        else
            System.out.println("FLAG_NOZOOM off" );
        if ((flags & PtlAnnot.FLAG_NOROTATE) == PtlAnnot.FLAG_NOROTATE)
            System.out.println("FLAG_NOROTATE on" );
        else
            System.out.println("FLAG_NOROTATE off" );
        if ((flags & PtlAnnot.FLAG_NOVIEW) == PtlAnnot.FLAG_NOVIEW)
            System.out.println("FLAG_NOVIEW on" );
        else
            System.out.println("FLAG_NOVIEW off" );
        if ((flags & PtlAnnot.FLAG_READONLY) == PtlAnnot.FLAG_READONLY)
            System.out.println("FLAG_READONLY on" );
        else
            System.out.println("FLAG_READONLY off" );
        if ((flags & PtlAnnot.FLAG_LOCKED) == PtlAnnot.FLAG_LOCKED)
            System.out.println("FLAG_LOCKED on" );
        else
            System.out.println("FLAG_LOCKED off" );
        if ((flags & PtlAnnot.FLAG_TOGGLE_NOVIEW) == PtlAnnot.FLAG_TOGGLE_NOVIEW)
            System.out.println("FLAG_TOGGLE_NOVIEW on" );
        else
            System.out.println("FLAG_TOGGLE_NOVIEW off" );
        if ((flags & PtlAnnot.FLAG_LOCKED_CONTENTS) == PtlAnnot.FLAG_LOCKED_CONTENTS)
            System.out.println("FLAG_LOCKED_CONTENTS on" );
        else
            System.out.println("FLAG_LOCKED_CONTENTS off" );
        try (PtlColor color = annot.getColor()) {
            showColor(color);
        }
        try (PtlColor colorI = annot.getInteriorColor()) {
            showColor(colorI);
        }
        PtlAnnot.BORDER_STYLE boderStyle = annot.getBorderStyle();
        switch (boderStyle) {
        case BORDER_SOLID:
            System.out.println("BORDER_STYLE = SOLID" );
            break;
        case BORDER_DASHED:
            System.out.println("BORDER_STYLE = DASHED" );
            break;
        case BORDER_BEVELED:
            System.out.println("BORDER_STYLE = BEVELED" );
            break;
        case BORDER_INSET:
            System.out.println("BORDER_STYLE = INSET" );
            break;
        case BORDER_UNDERLINE:
            System.out.println("BORDER_STYLE = UNDERLINE" );
            break;
        }
        PtlAnnot.BORDER_LINE_WIDTH boderWidth = annot.getBorderWidth();
        switch (boderWidth) {
        case BORDER_WIDTH_NONE:
            System.out.println("BORDER_WIDTH = NONE" );
            break;
        case BORDER_WIDTH_THIN:
            System.out.println("BORDER_WIDTH = THIN" );
            break;
        case BORDER_WIDTH_MIDDLE:
            System.out.println("BORDER_WIDTH = MIDDLE" );
            break;
        case BORDER_WIDTH_THICK:
            System.out.println("BORDER_WIDTH = THICK" );
            break;
        }
    }

    public static void showAnnotMarkup(PtlAnnot annot) throws PtlException, Exception, Error
    {
        PtlAnnotMarkup annotMarkup = (PtlAnnotMarkup)annot;
        System.out.println("MarkUpTitle = \"" + annotMarkup.getMarkUpTitle() + "\"" );
        System.out.println("MarkUpSubj = \"" + annotMarkup.getMarkUpSubj() + "\"" );
        try (PtlDate date = annotMarkup.getMarkUpDate())
        {
            int year = date.getYear();
            int month = date.getMonth();
            int day = date.getDay();
            int hour = date.getHour();
            int min = date.getMin();
            int sec = date.getSec();
            System.out.printf("MarkUpDate : %d/%d/%d %d:%d:%d\n", year, month, day, hour, min, sec);
        }
        System.out.printf("MarkUpCA : %f\n", annotMarkup.getMarkUpCA());
        if (annotMarkup.hasAnnotPopup()) {
            try (PtlAnnotPopup popup = annotMarkup.getAnnotPopup())
            {
                showPopup(popup);
            }
        }
    }

    public static void showColor(PtlColor color) throws PtlException, Exception, Error
    {
        PtlColor.COLOR_TYPE colorType = color.getType();
        switch (colorType) {
        case TYPE_NONE:
             System.out.println("COLOR_TYPE = None" );
             break;
         case TYPE_DEVICE_GRAY:
             PtlColorDeviceGray colorGray = (PtlColorDeviceGray)color;
             System.out.printf("COLOR_TYPE = GRAY(%f)\n" , colorGray.getGray());
             break;
         case TYPE_DEVICE_RGB:
             PtlColorDeviceRGB colorRGB = (PtlColorDeviceRGB)color;
             System.out.printf("COLOR_TYPE = RGB(%f,%f,%f)\n" , colorRGB.getR(), colorRGB.getG(), colorRGB.getB());
             break;
         case TYPE_DEVICE_CMYK:
             PtlColorDeviceCMYK colorCMYK = (PtlColorDeviceCMYK)color;
             System.out.printf("COLOR_TYPE = CMYK(%f,%f,%f,%f)\n" , colorCMYK.getC(), colorCMYK.getM(), colorCMYK.getY(), colorCMYK.getK());
             break;
        }
    }

    public static void showAction(PtlAction act) throws PtlException, Exception, Error
    {
        PtlAction.ACTION_TYPE actType = act.getType();
        switch (actType) {
        case TYPE_GOTO:
            System.out.println("ACTION_TYPE = GOTO" );
            PtlActionGoTo actGoTo = (PtlActionGoTo)act;
            try (PtlDest destGoTo = actGoTo.getDest()) {
                showDest(destGoTo);
            }
            break;
        case TYPE_GOTO_R:
            System.out.println("ACTION_TYPE = GOTOR" );
            PtlActionGoToR actGoToR = (PtlActionGoToR)act;
            try (PtlDest destGoToR = actGoToR.getDest()) {
                showDest(destGoToR);
            }
            String fileName1 = actGoToR.getFileName();
            System.out.printf("GOTOR FILENAME = %s\n", fileName1);
            if (actGoToR.getNewWindowFlag())
                System.out.println("GOTOR NewWindowFlag on" );
            else
                System.out.println("GOTOR NewWindowFlag off" );
            break;
        case TYPE_LAUNCH:
            System.out.println("ACTION_TYPE = LAUNCH" );
            PtlActionLaunch actLaunch = (PtlActionLaunch)act;
            String fileName2 = actLaunch.getFileName();
            System.out.printf("LAUNCH FILENAME = %s\n", fileName2);
            if (actLaunch.getNewWindowFlag())
                System.out.println("LAUNCH NewWindowFlag on" );
            else
                System.out.println("LAUNCH NewWindowFlag off" );
            break;
        case TYPE_URI:
            System.out.println("ACTION_TYPE = URI" );
            PtlActionURI actURI = (PtlActionURI)act;
            String uri = actURI.getURI();
            System.out.printf("URI = %s\n", uri);
            break;
        case TYPE_UNKNOWN:
            System.out.println("ACTION_TYPE = UNKNOWN" );
            break;
        }
    }

    public static void showDest(PtlDest dest) throws PtlException, Exception, Error
    {
        PtlDest.DEST_TYPE destType = dest.getType();
        switch (destType) {
        case TYPE_NONE:
             System.out.println("DEST_TYPE = NONE" );
             break;
         case TYPE_XYZ:
             System.out.println("DEST_TYPE = XYZ" );
             break;
         case TYPE_FIT:
             System.out.println("DEST_TYPE = FIT" );
             break;
         case TYPE_FIT_H:
             System.out.println("DEST_TYPE = FITH" );
             break;
         case TYPE_FIT_V:
             System.out.println("DEST_TYPE = FITV" );
             break;
         case TYPE_FIT_R:
             System.out.println("DEST_TYPE = FITR" );
             break;
         case TYPE_FIT_B:
             System.out.println("DEST_TYPE = FITB" );
             break;
         case TYPE_FIT_BH:
             System.out.println("DEST_TYPE = FITBH" );
             break;
         case TYPE_FIT_BV:
             System.out.println("DEST_TYPE = FITBV" );
             break;
        }
        System.out.printf("DEST_PAGE : %d\n", dest.getPageNumber());
        if (dest.isLeftNull())
            System.out.println("DEST_LEFT = null" );
        else
             System.out.printf("DEST_LEFT : %f\n", dest.getLeft());
        if (dest.isBottomNull())
            System.out.println("DEST_BOTTOM = null" );
        else
             System.out.printf("DEST_BOTTOM : %f\n", dest.getBottom());
        if (dest.isRightNull())
            System.out.println("DEST_RIGHT = null" );
        else
             System.out.printf("DEST_RIGHT : %f\n", dest.getRight());
        if (dest.isTopNull())
            System.out.println("DEST_TOP = null" );
        else
             System.out.printf("DEST_TOP : %f\n", dest.getTop());
        if (dest.isZoomNull())
            System.out.println("DEST_ZOOM = null" );
        else
            System.out.printf("DEST_ZOOM : %f\n", dest.getZoom());
    }
}

            
/*
	Antenna House PDF Tool API V8.0
	.NET Interface sample program

	概要:注釈情報の取得

	Copyright 2013-2025 Antenna House, Inc.
*/

using System;
using PdfTkNet;

namespace GetAnnots
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("usage: GetAnnots.exe in-pdf-file [out-attach-file]");
                return;
            }
            String outpathAttach = "";
            if (args.Length == 2)
            {
                outpathAttach = args[1];
            }

            try
            {
                using (PtlParamInput inputFile = new PtlParamInput(args[0]))
                using (PtlPDFDocument doc = new PtlPDFDocument())
                {
                    //PDFファイルをロードします。
                    doc.load(inputFile);

                    //ページコンテナの取得
                    using (PtlPages pages = doc.getPages())
                    {
                        //ページコンテナが空かどうか
                        if (pages.isEmpty())
                        {
                            Console.WriteLine("ページコンテナが空");
                            return;
                        }

                        int numPages = pages.getCount();
                        for (int i = 0; i < numPages; i++)
                        {
                            Console.WriteLine("ページ : " + (i+1));

                            using (PtlPage page = pages.get(i)) //ページの取得
                            using (PtlAnnots annots = page.getAnnots()) //注釈コンテナの取得
                            {
                                //注釈コンテナが空かどうか
                                if (annots.isEmpty())
                                {
                                    Console.WriteLine("注釈なし");
                                }
                                else
                                {
                                    //注釈数の取得
                                    int numAnnots = annots.getCount();
                                    Console.WriteLine("注釈数 : " + numAnnots);
                                    for (int j = 0; j < numAnnots; j++)
                                    {
                                        // 注釈タイプ取得
                                        using (PtlAnnot annot = annots.get(j))
                                        {
                                            showAnnot(annot, outpathAttach);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch (PtlException pex)
            {
                Console.WriteLine("ErrorCode = " + pex.getErrorCode() + " : " + pex.getErrorMessageJP());
                pex.Dispose();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.WriteLine("-- 完了 --");
            }
        }

        static void showAnnot(PtlAnnot annot, String outpathAttach)
        {
            PtlAnnot.ANNOT_TYPE annotType = annot.getType();
            switch (annotType) {
            case PtlAnnot.ANNOT_TYPE.TYPE_TEXT:
                showAnnotText(annot);
                break;
            case PtlAnnot.ANNOT_TYPE.TYPE_LINK:
                showAnnotLink(annot);
                break;
            case PtlAnnot.ANNOT_TYPE.TYPE_STAMP:
                showAnnotStamp(annot);
                break;
            case PtlAnnot.ANNOT_TYPE.TYPE_FILE_ATTACHMENT:
                showAnnotFileAttachment(annot, outpathAttach);
                break;
            default:
                showAnnotOther(annot);
                break;
            }
        }

        static void showAnnotText(PtlAnnot annot)
        {
            Console.WriteLine("ANNOT_TYPE = Text");
	        PtlAnnotText annotText = (PtlAnnotText)annot;
	        showAnnotCommon(annotText);
	        PtlAnnotText.ICON_TYPE iconType = annotText.getIconType();
	        switch (iconType) {
	        case PtlAnnotText.ICON_TYPE.ICON_COMMENT:
		        Console.WriteLine("ICON_TYPE = COMMENT" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_HELP:
		        Console.WriteLine("ICON_TYPE = HELP" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_INSERT:
		        Console.WriteLine("ICON_TYPE = INSERT" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_KEY:
		        Console.WriteLine("ICON_TYPE = KEY" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_NEWPARAGRAPH:
		        Console.WriteLine("ICON_TYPE = NEWPARAGRAPH" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_NOTE:
		        Console.WriteLine("ICON_TYPE = NOTE" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_PARAGRAPH:
		        Console.WriteLine("ICON_TYPE = PARAGRAPH" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_CUSTOM:
		        Console.WriteLine("ICON_TYPE = CUSTOM" );
		        break;
	        case PtlAnnotText.ICON_TYPE.ICON_UNKNOWN:
		        Console.WriteLine("ICON_TYPE = UNKNOWN" );
		        break;
	        }
            Console.WriteLine("ICON_NAME = \"" + annotText.getIconName() + "\"");
	        showAnnotMarkup(annotText);
        }

        static void showAnnotLink(PtlAnnot annot)
        {
            Console.WriteLine("ANNOT_TYPE = Link ");
            PtlAnnotLink annotLink = (PtlAnnotLink)annot;
            showAnnotCommon(annotLink);
            PtlAnnotLink.HIGHLIGHTING_MODE highlight = annotLink.getHighlightMode();
            switch (highlight) {
            case PtlAnnotLink.HIGHLIGHTING_MODE.HIGHLIGHTING_MODE_NONE:
                Console.WriteLine("HIGHLIGHTING_MODE = NONE" );
                break;
            case PtlAnnotLink.HIGHLIGHTING_MODE.HIGHLIGHTING_MODE_INVERT:
                Console.WriteLine("HIGHLIGHTING_MODE = INVERT" );
                break;
            case PtlAnnotLink.HIGHLIGHTING_MODE.HIGHLIGHTING_MODE_OUTLINE:
                Console.WriteLine("HIGHLIGHTING_MODE = OUTLINE" );
                break;
            case PtlAnnotLink.HIGHLIGHTING_MODE.HIGHLIGHTING_MODE_PUSH:
                Console.WriteLine("HIGHLIGHTING_MODE = PUSH" );
                break;
            }
            using (PtlDest dest = annotLink.getDest())
            {
                showDest(dest);
            }
            using (PtlAction act = annotLink.getAction())
            {
                showAction(act);
            }
        }

        static void showAnnotStamp(PtlAnnot annot)
        {
            Console.WriteLine("ANNOT_TYPE = Stamp");
            PtlAnnotStamp annotStamp = (PtlAnnotStamp)annot;
            showAnnotCommon(annotStamp);
            PtlAnnotStamp.ICON_TYPE iconType = annotStamp.getIconType();
            switch (iconType) {
            case PtlAnnotStamp.ICON_TYPE.ICON_APPROVED:
                Console.WriteLine("ICON_TYPE = APPROVED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_AS_IS:
                Console.WriteLine("ICON_TYPE = AS_IS" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_CONFIDENTIAL:
                Console.WriteLine("ICON_TYPE = CONFIDENTIAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_DEPARTMENTAL:
                Console.WriteLine("ICON_TYPE = DEPARTMENTAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_DRAFT:
                Console.WriteLine("ICON_TYPE = DRAFT" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_EXPERIMENTAL:
                Console.WriteLine("ICON_TYPE = EXPERIMENTAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_EXPIRED:
                Console.WriteLine("ICON_TYPE = EXPIRED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_FINAL:
                Console.WriteLine("ICON_TYPE = FINAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_FOR_COMMENT:
                Console.WriteLine("ICON_TYPE = FOR_COMMENT" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_FOR_PUBLIC_RELEASE:
                Console.WriteLine("ICON_TYPE = FOR_PUBLIC_RELEASE" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_NOT_APPROVED:
                Console.WriteLine("ICON_TYPE = NOT_APPROVED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_NOT_FOR_PUBLIC_RELEASE:
                Console.WriteLine("ICON_TYPE = NOT_FOR_PUBLIC_RELEASE" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SOLD:
                Console.WriteLine("ICON_TYPE = SOLD" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_TOP_SECRET:
                Console.WriteLine("ICON_TYPE = TOP_SECRET" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_APPROVED:
                Console.WriteLine("ICON_TYPE = SB_APPROVED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_COMPLETED:
                Console.WriteLine("ICON_TYPE = SB_COMPLETED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_CONFIDENTIAL:
                Console.WriteLine("ICON_TYPE = SB_CONFIDENTIAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_DRAFT:
                Console.WriteLine("ICON_TYPE = SB_DRAFT" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_FINAL:
                Console.WriteLine("ICON_TYPE = SB_FINAL" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_FOR_COMMENT:
                Console.WriteLine("ICON_TYPE = SB_FOR_COMMENT" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_FOR_PUBLIC_RELEASE:
                Console.WriteLine("ICON_TYPE = SB_FOR_PUBLIC_RELEASE" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_INFORMATIONONLY:
                Console.WriteLine("ICON_TYPE = SB_INFORMATIONONLY" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_NOT_APPROVED:
                Console.WriteLine("ICON_TYPE = SB_NOT_APPROVED" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_NOT_FOR_PUBLIC_RELEASE:
                Console.WriteLine("ICON_TYPE = SB_NOT_FOR_PUBLIC_RELEASE" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_PRELIMINARYRESULTS:
                Console.WriteLine("ICON_TYPE = SB_PRELIMINARYRESULTS" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_SB_VOID:
                Console.WriteLine("ICON_TYPE = SB_VOID" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_CUSTOM:
                Console.WriteLine("ICON_TYPE = CUSTOM" );
                break;
            case PtlAnnotStamp.ICON_TYPE.ICON_UNKNOWN:
                Console.WriteLine("ICON_TYPE = UNKNOWN" );
                break;
            }
            Console.WriteLine("ICON_NAME = \"" + annotStamp.getIconName() + "\"" );
            showAnnotMarkup(annotStamp);
        }

        static void showAnnotFileAttachment(PtlAnnot annot, String outpathAttach)
        {
            Console.WriteLine("ANNOT_TYPE = FileAttachment");
            PtlAnnotFileAttachment annotFileAttachment = (PtlAnnotFileAttachment)annot;
            showAnnotCommon(annotFileAttachment);
            PtlAnnotFileAttachment.ICON_TYPE iconType = annotFileAttachment.getIconType();
            switch (iconType) {
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_GRAPH:
               Console.WriteLine("ICON_TYPE = GRAPH" );
                break;
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_PAPERCLIP:
               Console.WriteLine("ICON_TYPE = PAPERCLIP" );
                break;
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_PUSHPIN:
               Console.WriteLine("ICON_TYPE = PUSHPIN" );
                break;
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_TAG:
               Console.WriteLine("ICON_TYPE = TAG" );
                break;
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_CUSTOM:
               Console.WriteLine("ICON_TYPE = CUSTOM" );
                break;
            case PtlAnnotFileAttachment.ICON_TYPE.ICON_UNKNOWN:
               Console.WriteLine("ICON_TYPE = UNKNOWN" );
                break;
            }
           Console.WriteLine("ICON_NAME = \"" + annotFileAttachment.getIconName() + "\"" );
           Console.WriteLine("FILE_NAME = \"" + annotFileAttachment.getFileName() + "\"" );
            if (outpathAttach.Length > 0) {
                using (PtlParamOutput outputAttach = new PtlParamOutput(outpathAttach))
                {
                    annotFileAttachment.writeFile(outputAttach);
                }
            }
            showAnnotMarkup(annotFileAttachment);
        }

        
        static void showAnnotOther(PtlAnnot annot)
        {
	        switch (annot.getType()) {
	        case PtlAnnot.ANNOT_TYPE.TYPE_FREE_TEXT:
		        Console.WriteLine("ANNOT_TYPE = FreeText" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_LINE:
		        Console.WriteLine("ANNOT_TYPE = Line" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_SQUARE:
		        Console.WriteLine("ANNOT_TYPE = Square" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_CIRCLE:
		        Console.WriteLine("ANNOT_TYPE = Circle" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_POLYGON:
		        Console.WriteLine("ANNOT_TYPE = Polygon" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_POLYLINE:
		        Console.WriteLine("ANNOT_TYPE = Polyline" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_HIGHLIGHT:
		        Console.WriteLine("ANNOT_TYPE = Highlight" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_UNDERLINE:
		        Console.WriteLine("ANNOT_TYPE = Underline" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_SQUIGGLY:
		        Console.WriteLine("ANNOT_TYPE = Squiggly" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_STRIKEOUT:
		        Console.WriteLine("ANNOT_TYPE = Strikeout" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_CARET:
		        Console.WriteLine("ANNOT_TYPE = Caret" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_INK:
		        Console.WriteLine("ANNOT_TYPE = Ink" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_SOUND:
		        Console.WriteLine("ANNOT_TYPE = Sound" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_MOVIE:
		        Console.WriteLine("ANNOT_TYPE = Movie" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_WIDGET:
		        Console.WriteLine("ANNOT_TYPE = Widget" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_SCREEN:
		        Console.WriteLine("ANNOT_TYPE = Screen" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_PRINTER_MARK:
		        Console.WriteLine("ANNOT_TYPE = PrinterMark" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_TRAP_NETWORK:
		        Console.WriteLine("ANNOT_TYPE = TrapNetwork" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_WATERMARK:
		        Console.WriteLine("ANNOT_TYPE = Watermark" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_3D:
		        Console.WriteLine("ANNOT_TYPE = 3D" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_REDACT:
		        Console.WriteLine("ANNOT_TYPE = Redact" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_PROJECTION:
		        Console.WriteLine("ANNOT_TYPE = Projection" );
		        break;
	        case PtlAnnot.ANNOT_TYPE.TYPE_RICHMEDIA:
		        Console.WriteLine("ANNOT_TYPE = Richmedia" );
		        break;
	        default:
		        Console.WriteLine("ANNOT_TYPE = Unknown" );
		        break;
	        }
	        showAnnotCommon(annot);
	        if (annot.isMarkup()) {
		        showAnnotMarkup(annot);
	        }
        }


        static void showPopup(PtlAnnot annot)
        {
            Console.WriteLine("ANNOT_TYPE = Popup");
            PtlAnnotPopup annotPopup = (PtlAnnotPopup)annot;
            showAnnotCommon(annotPopup);
            bool openState = annotPopup.getOpenState();
            if (openState)
                Console.WriteLine("OPEN_STATE == true" );
            else
                Console.WriteLine("OPEN_STATE == false" );
        }

        static void showAnnotCommon(PtlAnnot annot)
        {
            using (PtlRect rect = annot.getRect())
            {
                Console.WriteLine("Rcet = {0},{1},{2},{3}", rect.getLeft(), rect.getBottom(), rect.getRight(), rect.getTop());
            }
            Console.WriteLine("TextContents = \"" + annot.getTextContents() + "\"" );
            using (PtlDate date = annot.getDate())
            {
                int year = date.getYear();
                int month = date.getMonth();
                int day = date.getDay();
                int hour = date.getHour();
                int min = date.getMin();
                int sec = date.getSec();
                Console.WriteLine("Date : {0}/{1}/{2} {3}:{4}:{5}", year, month, day, hour, min, sec);
            }
            PtlAnnot.ANNOT_FLAGS flags = annot.getAnnotFlags();
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_INVISIBLE) == PtlAnnot.ANNOT_FLAGS.FLAG_INVISIBLE)
                Console.WriteLine("FLAG_INVISIBLE on" );
            else
                Console.WriteLine("FLAG_INVISIBLE off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_HIDDEN) == PtlAnnot.ANNOT_FLAGS.FLAG_HIDDEN)
                Console.WriteLine("FLAG_HIDDEN on" );
            else
                Console.WriteLine("FLAG_HIDDEN off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_PRINT) == PtlAnnot.ANNOT_FLAGS.FLAG_PRINT)
                Console.WriteLine("FLAG_PRINT on" );
            else
                Console.WriteLine("FLAG_PRINT off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_NOZOOM) == PtlAnnot.ANNOT_FLAGS.FLAG_NOZOOM)
                Console.WriteLine("FLAG_NOZOOM on" );
            else
                Console.WriteLine("FLAG_NOZOOM off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_NOROTATE) == PtlAnnot.ANNOT_FLAGS.FLAG_NOROTATE)
                Console.WriteLine("FLAG_NOROTATE on" );
            else
                Console.WriteLine("FLAG_NOROTATE off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_NOVIEW) == PtlAnnot.ANNOT_FLAGS.FLAG_NOVIEW)
                Console.WriteLine("FLAG_NOVIEW on" );
            else
                Console.WriteLine("FLAG_NOVIEW off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_READONLY) == PtlAnnot.ANNOT_FLAGS.FLAG_READONLY)
                Console.WriteLine("FLAG_READONLY on" );
            else
                Console.WriteLine("FLAG_READONLY off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_LOCKED) == PtlAnnot.ANNOT_FLAGS.FLAG_LOCKED)
                Console.WriteLine("FLAG_LOCKED on" );
            else
                Console.WriteLine("FLAG_LOCKED off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_TOGGLE_NOVIEW) == PtlAnnot.ANNOT_FLAGS.FLAG_TOGGLE_NOVIEW)
                Console.WriteLine("FLAG_TOGGLE_NOVIEW on" );
            else
                Console.WriteLine("FLAG_TOGGLE_NOVIEW off" );
            if ((flags & PtlAnnot.ANNOT_FLAGS.FLAG_LOCKED_CONTENTS) == PtlAnnot.ANNOT_FLAGS.FLAG_LOCKED_CONTENTS)
                Console.WriteLine("FLAG_LOCKED_CONTENTS on" );
            else
                Console.WriteLine("FLAG_LOCKED_CONTENTS off" );
            using (PtlColor color = annot.getColor())
            {
                showColor(color);
            }
            using (PtlColor colorI = annot.getInteriorColor())
            {
                showColor(colorI);
            }
            PtlAnnot.BORDER_STYLE boderStyle = annot.getBorderStyle();
            switch (boderStyle) {
            case PtlAnnot.BORDER_STYLE.BORDER_SOLID:
                Console.WriteLine("BORDER_STYLE = SOLID" );
                break;
            case PtlAnnot.BORDER_STYLE.BORDER_DASHED:
                Console.WriteLine("BORDER_STYLE = DASHED" );
                break;
            case PtlAnnot.BORDER_STYLE.BORDER_BEVELED:
                Console.WriteLine("BORDER_STYLE = BEVELED" );
                break;
            case PtlAnnot.BORDER_STYLE.BORDER_INSET:
                Console.WriteLine("BORDER_STYLE = INSET" );
                break;
            case PtlAnnot.BORDER_STYLE.BORDER_UNDERLINE:
                Console.WriteLine("BORDER_STYLE = UNDERLINE" );
                break;
            }
            PtlAnnot.BORDER_LINE_WIDTH boderWidth = annot.getBorderWidth();
            switch (boderWidth) {
            case PtlAnnot.BORDER_LINE_WIDTH.BORDER_WIDTH_NONE:
                Console.WriteLine("BORDER_WIDTH = NONE" );
                break;
            case PtlAnnot.BORDER_LINE_WIDTH.BORDER_WIDTH_THIN:
                Console.WriteLine("BORDER_WIDTH = THIN" );
                break;
            case PtlAnnot.BORDER_LINE_WIDTH.BORDER_WIDTH_MIDDLE:
                Console.WriteLine("BORDER_WIDTH = MIDDLE" );
                break;
            case PtlAnnot.BORDER_LINE_WIDTH.BORDER_WIDTH_THICK:
                Console.WriteLine("BORDER_WIDTH = THICK" );
                break;
            }
        }

        static void showAnnotMarkup(PtlAnnot annot)
        {
            PtlAnnotMarkup annotMarkup = (PtlAnnotMarkup)annot;
            Console.WriteLine("MarkUpTitle = \"" + annotMarkup.getMarkUpTitle() + "\"" );
            Console.WriteLine("MarkUpSubj = \"" + annotMarkup.getMarkUpSubj() + "\"" );
            using (PtlDate date = annotMarkup.getMarkUpDate())
            {
                int year = date.getYear();
                int month = date.getMonth();
                int day = date.getDay();
                int hour = date.getHour();
                int min = date.getMin();
                int sec = date.getSec();
                Console.WriteLine("MarkUpDate : {0}/{1}/{2} {3}:{4}:{5}", year, month, day, hour, min, sec);
            }
            Console.WriteLine("MarkUpCA : " + annotMarkup.getMarkUpCA());
            if (annotMarkup.hasAnnotPopup()) {
                using (PtlAnnotPopup popup = annotMarkup.getAnnotPopup())
                {
                    showPopup(popup);
                }
            }
        }

        static void showColor(PtlColor color)
        {
            PtlColor.COLOR_TYPE colorType = color.getType();
            switch (colorType) {
            case PtlColor.COLOR_TYPE.TYPE_NONE:
                 Console.WriteLine("COLOR_TYPE = None" );
                 break;
             case PtlColor.COLOR_TYPE.TYPE_DEVICE_GRAY:
                 PtlColorDeviceGray colorGray = (PtlColorDeviceGray)color;
                 Console.WriteLine("COLOR_TYPE = GRAY({0})", colorGray.getGray());
                 break;
             case PtlColor.COLOR_TYPE.TYPE_DEVICE_RGB:
                 PtlColorDeviceRGB colorRGB = (PtlColorDeviceRGB)color;
                 Console.WriteLine("COLOR_TYPE = RGB({0},{1},{2})", colorRGB.getR(), colorRGB.getG(), colorRGB.getB());
                 break;
             case PtlColor.COLOR_TYPE.TYPE_DEVICE_CMYK:
                 PtlColorDeviceCMYK colorCMYK = (PtlColorDeviceCMYK)color;
                 Console.WriteLine("COLOR_TYPE = CMYK({0},{1},{2},{3})", colorCMYK.getC(), colorCMYK.getM(), colorCMYK.getY(), colorCMYK.getK());
                 break;
            }
        }

        static void showAction(PtlAction act)
        {
            PtlAction.ACTION_TYPE actType = act.getType();
            switch (actType) {
            case PtlAction.ACTION_TYPE.TYPE_GOTO:
                Console.WriteLine("ACTION_TYPE = GOTO" );
                PtlActionGoTo actGoTo = (PtlActionGoTo)act;
                using (PtlDest destGoTo = actGoTo.getDest())
                {
                    showDest(destGoTo);
                }
                break;
            case PtlAction.ACTION_TYPE.TYPE_GOTO_R:
                Console.WriteLine("ACTION_TYPE = GOTOR" );
                PtlActionGoToR actGoToR = (PtlActionGoToR)act;
                using (PtlDest destGoToR = actGoToR.getDest())
                {
                    showDest(destGoToR);
                }
                String fileName1 = actGoToR.getFileName();
                Console.WriteLine("GOTOR FILENAME = " + fileName1);
                if (actGoToR.getNewWindowFlag())
                    Console.WriteLine("GOTOR NewWindowFlag on" );
                else
                    Console.WriteLine("GOTOR NewWindowFlag off" );
                break;
            case PtlAction.ACTION_TYPE.TYPE_LAUNCH:
                Console.WriteLine("ACTION_TYPE = LAUNCH" );
                PtlActionLaunch actLaunch = (PtlActionLaunch)act;
                String fileName2 = actLaunch.getFileName();
                Console.WriteLine("LAUNCH FILENAME = " + fileName2);
                if (actLaunch.getNewWindowFlag())
                    Console.WriteLine("LAUNCH NewWindowFlag on" );
                else
                    Console.WriteLine("LAUNCH NewWindowFlag off" );
                break;
            case PtlAction.ACTION_TYPE.TYPE_URI:
                Console.WriteLine("ACTION_TYPE = URI" );
                PtlActionURI actURI = (PtlActionURI)act;
                String uri = actURI.getURI();
                Console.WriteLine("URI = " + uri);
                break;
            case PtlAction.ACTION_TYPE.TYPE_UNKNOWN:
                Console.WriteLine("ACTION_TYPE = UNKNOWN" );
                break;
            }
        }

        static void showDest(PtlDest dest)
        {
            PtlDest.DEST_TYPE destType = dest.getType();
            switch (destType) {
            case PtlDest.DEST_TYPE.TYPE_NONE:
                 Console.WriteLine("DEST_TYPE = NONE" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_XYZ:
                 Console.WriteLine("DEST_TYPE = XYZ" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT:
                 Console.WriteLine("DEST_TYPE = FIT" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_H:
                 Console.WriteLine("DEST_TYPE = FITH" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_V:
                 Console.WriteLine("DEST_TYPE = FITV" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_R:
                 Console.WriteLine("DEST_TYPE = FITR" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_B:
                 Console.WriteLine("DEST_TYPE = FITB" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_BH:
                 Console.WriteLine("DEST_TYPE = FITBH" );
                 break;
             case PtlDest.DEST_TYPE.TYPE_FIT_BV:
                 Console.WriteLine("DEST_TYPE = FITBV" );
                 break;
            }
            Console.WriteLine("DEST_PAGE : " + dest.getPageNumber());
            if (dest.isLeftNull())
                Console.WriteLine("DEST_LEFT = null" );
            else
                Console.WriteLine("DEST_LEFT : " + dest.getLeft());
            if (dest.isBottomNull())
                Console.WriteLine("DEST_BOTTOM = null" );
            else
                Console.WriteLine("DEST_BOTTOM : " + dest.getBottom());
            if (dest.isRightNull())
                Console.WriteLine("DEST_RIGHT = null" );
            else
                Console.WriteLine("DEST_RIGHT : " + dest.getRight());
            if (dest.isTopNull())
                Console.WriteLine("DEST_TOP = null" );
            else
                Console.WriteLine("DEST_TOP : " + dest.getTop());
            if (dest.isZoomNull())
                Console.WriteLine("DEST_ZOOM = null" );
            else
                Console.WriteLine("DEST_ZOOM : " + dest.getZoom());
        }
    }
}

            
AHPDFToolCmd80.exe -getAnnotInfo -d C:\in\test2.pdf

            

サンプルコードのダウンロードはこちら

実行例

コマンドラインでの実行例

GetAnnots.exe C:\in\test2.pdf
ページ : 1
注釈数 : 2
ANNOT_TYPE = FileAttachment
Rcet = 155.282898,243.328476,160.221786,250.384033
TextContents = "特急しなの"
Date : 2021/5/28 15:22:35
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.250980,0.333333,1.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = PUSHPIN
ICON_NAME = "PushPin"FILE_NAME = "test.jpg"MarkUpTitle = "アンテナハウス"
MarkUpSubj = "添付ファイル"
MarkUpDate : 2021/5/28 14:7:50
MarkUpCA : 1.000000
ANNOT_TYPE = Stamp
Rcet = 14.135770,10.612049,64.145584,30.119320
TextContents = ""
Date : 2021/5/28 14:13:52
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.898039,0.133333,0.215686)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = SB_FOR_PUBLIC_RELEASE
ICON_NAME = "SBForPublicRelease"MarkUpTitle = "AntennaHouse"
MarkUpSubj = "公開用"
MarkUpDate : 2021/5/28 14:13:10
MarkUpCA : 0.705002
ANNOT_TYPE = Popup
Rcet = 210.015671,-0.148290,273.515656,49.946278
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ : 2
注釈なし
ページ : 3
注釈数 : 1
ANNOT_TYPE = Text
Rcet = 115.785904,169.820862,122.135902,176.170868
TextContents = "テキスト注釈"
Date : 2021/5/28 14:12:13
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1.000000,0.000000,1.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = COMMENT
ICON_NAME = "Comment"
MarkUpTitle = "アンテナハウス"
MarkUpSubj = "注1"
MarkUpDate : 2021/5/28 14:10:39
MarkUpCA : 1.000000
ANNOT_TYPE = Popup
Rcet = 210.015671,126.076416,273.515656,176.170868
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ : 4
注釈なし
ページ : 5
注釈なし
ページ : 6
注釈なし
ページ : 7
注釈なし
ページ : 8
注釈なし
ページ : 9
注釈なし
ページ : 10
注釈数 : 1
ANNOT_TYPE = Link
Rcet = 124.014786,247.638000,192.048325,269.408600
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT off
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = MIDDLE
HIGHLIGHTING_MODE = INVERT
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
ACTION_TYPE = GOTO
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
完了!
java -jar GetAnnots.jar C:\in\test2.pdf
ページ1
注釈数 : 2
ANNOT_TYPE = FileAttachment
Rcet = 155.282898,243.328476,160.221786,250.384033
TextContents = "特急しなの"
Date : 2021/5/28 15:22:35
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.250980,0.333333,1.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = PUSHPIN
ICON_NAME = "PushPin"
FILE_NAME = "test.jpg"
MarkUpTitle = "アンテナハウス"
MarkUpSubj = "添付ファイル"
MarkUpDate : 2021/5/28 14:7:50
MarkUpCA : 1.000000
ANNOT_TYPE = Stamp
Rcet = 14.135770,10.612049,64.145584,30.119320
TextContents = ""
Date : 2021/5/28 14:13:52
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.898039,0.133333,0.215686)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = SB_FOR_PUBLIC_RELEASE
ICON_NAME = "SBForPublicRelease"
MarkUpTitle = "AntennaHouse"
MarkUpSubj = "公開用"
MarkUpDate : 2021/5/28 14:13:10
MarkUpCA : 0.705002
ANNOT_TYPE = Popup
Rcet = 210.015671,-0.148290,273.515656,49.946278
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ2
注釈なし
ページ3
注釈数 : 1
ANNOT_TYPE = Text
Rcet = 115.785904,169.820862,122.135902,176.170868
TextContents = "テキスト注釈"
Date : 2021/5/28 14:12:13
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1.000000,0.000000,1.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = COMMENT
ICON_NAME = "Comment"
MarkUpTitle = "アンテナハウス"
MarkUpSubj = "注1"
MarkUpDate : 2021/5/28 14:10:39
MarkUpCA : 1.000000
ANNOT_TYPE = Popup
Rcet = 210.015671,126.076416,273.515656,176.170868
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ4
注釈なし
ページ5
注釈なし
ページ6
注釈なし
ページ7
注釈なし
ページ8
注釈なし
ページ9
注釈なし
ページ10
注釈数 : 1
ANNOT_TYPE = Link
Rcet = 124.014786,247.638000,192.048325,269.408600
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT off
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1.000000,0.000000,0.000000)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = MIDDLE
HIGHLIGHTING_MODE = INVERT
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
ACTION_TYPE = GOTO
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
-- 完了 --
GetAnnots.exe C:\in\test2.pdf
ページ : 1
注釈数 : 2
ANNOT_TYPE = FileAttachment
Rcet = 155.2829,243.32848,160.22179,250.38403
TextContents = "特急しなの"
Date : 2021/5/28 15:22:35
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.2509804,0.33333334,1)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = PUSHPIN
ICON_NAME = "PushPin"
FILE_NAME = "test.jpg"
MarkUpTitle = "アンテナハウス"
MarkUpSubj = "添付ファイル"
MarkUpDate : 2021/5/28 14:7:50
MarkUpCA : 1
ANNOT_TYPE = Stamp
Rcet = 14.13577,10.612049,64.145584,30.11932
TextContents = ""
Date : 2021/5/28 14:13:52
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0.8980392,0.13333334,0.21568628)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = SB_FOR_PUBLIC_RELEASE
ICON_NAME = "SBForPublicRelease"
MarkUpTitle = "AntennaHouse"
MarkUpSubj = "公開用"
MarkUpDate : 2021/5/28 14:13:10
MarkUpCA : 0.705002
ANNOT_TYPE = Popup
Rcet = 210.01567,-0.14828978,273.51566,49.946278
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0,0,0)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ : 2
注釈なし
ページ : 3
注釈数 : 1
ANNOT_TYPE = Text
Rcet = 115.785904,169.82086,122.1359,176.17087
TextContents = "テキスト注釈"
Date : 2021/5/28 14:12:13
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1,0,1)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
ICON_TYPE = COMMENT
ICON_NAME = "Comment"
MarkUpTitle = "アンテナハウス"
MarkUpSubj = "注1"
MarkUpDate : 2021/5/28 14:10:39
MarkUpCA : 1
ANNOT_TYPE = Popup
Rcet = 210.01567,126.076416,273.51566,176.17087
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT on
FLAG_NOZOOM on
FLAG_NOROTATE on
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(0,0,0)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = THIN
OPEN_STATE == false
ページ : 4
注釈なし
ページ : 5
注釈なし
ページ : 6
注釈なし
ページ : 7
注釈なし
ページ : 8
注釈なし
ページ : 9
注釈なし
ページ : 10
注釈数 : 1
ANNOT_TYPE = Link
Rcet = 124.014786,247.638,192.04832,269.4086
TextContents = ""
Date : 0/0/0 0:0:0
FLAG_INVISIBLE off
FLAG_HIDDEN off
FLAG_PRINT off
FLAG_NOZOOM off
FLAG_NOROTATE off
FLAG_NOVIEW off
FLAG_READONLY off
FLAG_LOCKED off
FLAG_TOGGLE_NOVIEW off
FLAG_LOCKED_CONTENTS off
COLOR_TYPE = RGB(1,0,0)
COLOR_TYPE = None
BORDER_STYLE = SOLID
BORDER_WIDTH = MIDDLE
HIGHLIGHTING_MODE = INVERT
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
ACTION_TYPE = GOTO
DEST_TYPE = FIT
DEST_PAGE : 0
DEST_LEFT = null
DEST_BOTTOM = null
DEST_RIGHT = null
DEST_TOP = null
DEST_ZOOM = null
-- 完了 --
AHPDFToolCmd80.exe -getAnnotInfo -d C:\in\test2.pdf
Annotation Information
 Annot Type : File Attachment
   Icon Type : PushPin
   Icon Name : PushPin
   File Name : test.jpg
   Rect :
     left   : 155.283
     bottom : 243.328
     right  : 160.222
     top    : 250.384
   TextContents : 特急しなの
   ModDate : 2021/5/28 15:22:35
   Annot Flags : 28
     Invisible      : off
     Hidden         : off
     Print          : on
     NoZoom         : on
     NoRotate       : on
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(64.85.255)
   Border Style  : Solid
   Border Width  : Thin
   Markup Title : アンテナハウス
   Markup Subject : 添付ファイル
   CreationDate : 2021/5/28 14:7:50
   Markup CA : 1
   Popup : not exist
 Annot Type : Stamp
   Icon Type : SBForPublicRelease
   Icon Name : SBForPublicRelease
   Rect :
     left   : 14.1358
     bottom : 10.612
     right  : 64.1456
     top    : 30.1193
   TextContents :
   ModDate : 2021/5/28 14:13:52
   Annot Flags : 4
     Invisible      : off
     Hidden         : off
     Print          : on
     NoZoom         : off
     NoRotate       : off
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(229.34.55)
   Border Style  : Solid
   Border Width  : Thin
   Markup Title : AntennaHouse
   Markup Subject : 公開用
   CreationDate : 2021/5/28 14:13:10
   Markup CA : 0.705002
   Popup : exist
 Annot Type : Popup
   Rect :
     left   : 210.016
     bottom : -0.14829
     right  : 273.516
     top    : 49.9463
   TextContents :
   ModDate : 0/0/0 0:0:0
   Annot Flags : 28
     Invisible      : off
     Hidden         : off
     Print          : on
     NoZoom         : on
     NoRotate       : on
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(0.0.0)
   Border Style  : Solid
   Border Width  : Thin
 Annot Type : Text
   Icon Type : Comment
   Icon Name : Comment
   Rect :
     left   : 115.786
     bottom : 169.821
     right  : 122.136
     top    : 176.171
   TextContents : テキスト注釈
   ModDate : 2021/5/28 14:12:13
   Annot Flags : 28
     Invisible      : off
     Hidden         : off
     Print          : on
     NoZoom         : on
     NoRotate       : on
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(255.0.255)
   Border Style  : Solid
   Border Width  : Thin
   Markup Title : アンテナハウス
   Markup Subject : 注1
   CreationDate : 2021/5/28 14:10:39
   Markup CA : 1
   Popup : exist
 Annot Type : Popup
   Rect :
     left   : 210.016
     bottom : 126.076
     right  : 273.516
     top    : 176.171
   TextContents :
   ModDate : 0/0/0 0:0:0
   Annot Flags : 28
     Invisible      : off
     Hidden         : off
     Print          : on
     NoZoom         : on
     NoRotate       : on
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(0.0.0)
   Border Style  : Solid
   Border Width  : Thin
 Annot Type : Link
   Highlighting mode : Invert
   Action : GoTo
     Dest page : 0
     Dest type : Fit
   Rect :
     left   : 124.015
     bottom : 247.638
     right  : 192.048
     top    : 269.409
   TextContents :
   ModDate : 0/0/0 0:0:0
   Annot Flags : 0
     Invisible      : off
     Hidden         : off
     Print          : off
     NoZoom         : off
     NoRotate       : off
     NoView         : off
     ReadOnly       : off
     Locked         : off
     ToggleNoView   : off
     LockedContents : off
   Color  : RGB(255.0.0)
   Border Style  : Solid
   Border Width  : Middle

 use time 0.030000s
        

出力結果イメージ

入力PDFに指定したPDF文書の注釈の情報がコマンドライン上に表示されます。

サンプルコードのダウンロード

サンプルコード

サンプルで使用した入出力PDF