/*
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());
}
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
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文書の注釈の情報がコマンドライン上に表示されます。

