示例#1
0
static ACCB1 ASBool ACCB2 IsEnabled (void *permRequired)
{
	AVDoc avDoc = AVAppGetActiveDoc();
	if (!avDoc)
		return false;
	else
	{
		PDPerms docPerms = PDDocGetPermissions(AVDocGetPDDoc(avDoc));
		PDPerms reqPerms = (PDPerms)permRequired;
		return ((reqPerms & docPerms) == reqPerms);
	}
}
示例#2
0
CDocument::CDocument()
{
#ifdef ACRO_SDK_PLUGIN_SAMPLE
//#ifdef PLUGIN
	CTOR; /* Macro for creating a RaiseAwareConstructor */
	avDoc = AVAppGetActiveDoc();
	if(avDoc)
	{
		pdDoc = AVDocGetPDDoc(avDoc);
		//also get the current page
		AVPageView pageView = AVDocGetPageView(avDoc);
		PDPageNumber pageNum = AVPageViewGetPageNum (pageView);
		pdPage = PDDocAcquirePage (pdDoc, pageNum);
	}
#else
	//these are automatically initialized to null since they are 'static'
	//we can't set initialize them because of some cases of overlapping CDocument creations
	//asPathName = NULL;
	//pdPage = NULL;
#endif
}
示例#3
0
ACCB1 void ACCB2 MyPluginCommand(void *clientData)
{
	
	// try to get front PDF document 
	AVDoc avDoc = AVAppGetActiveDoc();
	PDDoc pdDoc = NULL;
	int numPages = 0;
	if(avDoc==NULL) {
		// if no doc is loaded, make a message.
		//strcat(str,"There is no PDF document loaded in Acrobat.");
		return;
	}
	else {
		// if a PDF is open, get its number of pages
		pdDoc = AVDocGetPDDoc (avDoc);
		numPages = PDDocGetNumPages (pdDoc);
	}

	if(pdDoc == NULL)	return;
 
	// get a PDF open in front.
	/*CDocument document;
	PDDoc pdDoc = (PDDoc)document;

	if(pdDoc == NULL){
		return;
	}*/

	// enumerate from PDF conversion handlers to find the "rtf" handler.
	AVConversionEnumFromPDFConverters(myAVConversionFromPDFEnumProc, NULL);
	SnippetRunnerUtils::ShowDebugWindow();

	string szPath = "C:\\";
	CDocument::SetBaseDirectory(szPath);
	// save the rtf file to the snippetRunner's output files folder. 
	ASPathName OutPath = SnippetRunnerUtils::getOutputPath(RTF_FILE);
	if(OutPath==NULL) 
		OutPath = ASFileSysCreatePathName (NULL, ASAtomFromString("Cstring"), RTF_FILE, 0);
	if(OutPath==NULL) {
		AVAlertNote("Cannot open an output file.");
		return;
	}
	
	// do conversion
	AVConversionStatus status=AVConversionConvertFromPDFWithHandler(RightHandler, 
					NULL,kAVConversionNoFlags, pdDoc, OutPath, ASGetDefaultFileSys(),NULL);

	//////////////////////////////////////////////////////////////////////
		// save the rtf file to the snippetRunner's output files folder. 
	// enumerate from PDF conversion handlers to find the "rtf" handler.
	AVConversionEnumFromPDFConverters(myAVConversionFromPDFEnumProc2, NULL);
	SnippetRunnerUtils::ShowDebugWindow();

	OutPath = SnippetRunnerUtils::getOutputPath(TXT_FILE);
	if(OutPath==NULL) 
		OutPath = ASFileSysCreatePathName (NULL, ASAtomFromString("Cstring"), TXT_FILE, 0);
	if(OutPath==NULL) {
		AVAlertNote("Cannot open an output file.");
		return;
	}
	
	// do conversion
	status=AVConversionConvertFromPDFWithHandler(RightHandler, 
					NULL,kAVConversionNoFlags, pdDoc, OutPath, ASGetDefaultFileSys(),NULL);

	/////////////////////////////////////////////////////////////////////////
	// check the returned status and show message 
/*	if(status == kAVConversionSuccess)
		AVAlertNote("The Rtf file was saved in SnippetRunner output folder.");
	else if(status == kAVConversionFailed)
		AVAlertNote("The Rtf file conversion failed.");
	else if(status == kAVConversionSuccessAsync)
		AVAlertNote("The conversion will continue asynchronously.");
	else if(status == kAVConversionCancelled)
		AVAlertNote("The conversion was cancelled.");

/*
	ASInt32 nStartPage, nEndPage, nToUnicode;
	ASBool bToUnicode;
	nStartPage = 1;
	nEndPage = numPages;
	nToUnicode = 0;
	bToUnicode = false;

	//bToUnicode = (nToUnicode==0)?(false):(true);

	// Set up WordFinder creation options record
	PDWordFinderConfigRec wfConfig;
	
	memset(&wfConfig, 0, sizeof(PDWordFinderConfigRec));
	
	wfConfig.recSize = sizeof(PDWordFinderConfigRec);
	wfConfig.ignoreCharGaps = true;
	wfConfig.ignoreLineGaps = false;
	wfConfig.noAnnots = true;
	wfConfig.noEncodingGuess = true;		// leave non-Roman single-byte font alone

	// Std Roman treatment for custom encoding; overrides the noEncodingGuess option
	wfConfig.unknownToStdEnc = false;		
		
	wfConfig.disableTaggedPDF = false;		// legacy mode WordFinder creation
	wfConfig.noXYSort = false;
	wfConfig.preserveSpaces = false;
	wfConfig.noLigatureExp = false;
	wfConfig.noHyphenDetection = false;
	wfConfig.trustNBSpace = false;
	wfConfig.noExtCharOffset = false;		// text extraction efficiency
	wfConfig.noStyleInfo = false;			// text extraction efficiency
	wfConfig.decomposeTbl = NULL;			// Unicode character replacement
	wfConfig.decomposeTblSize = 0;
	wfConfig.charTypeTbl = NULL;			// Custom char type table
	wfConfig.charTypeTblSize = 0;
		
	ASPathName pathName;
	pathName = SnippetRunnerUtils::getOutputPath("output.txt");

#ifndef MAC_PLATFORM
	//on the Mac ASFileSysDisplayStringFromPath returns an Mac OS 9 style path.
	pOutput = fopen(ASFileSysDisplayStringFromPath (NULL, pathName), "w+b");

#else
	ASPlatformPath platformPath;
	ASFileSysAcquirePlatformPath (NULL, pathName, ASAtomFromString("POSIXPath"), &platformPath);
	POSIXPath_Ptr path = ASPlatformPathGetPOSIXPathPtr (platformPath);
	pOutput = fopen(path, "w+b");
	ASFileSysReleasePlatformPath(NULL, platformPath);
#endif
	if (pOutput)
	{
		if(ExtractText(pdDoc, nStartPage - 1, nEndPage - 1, 
			bToUnicode, &wfConfig, pOutput))
				Console::displayString("Text extraction completed."); 
		return;
	}
	else
		AVAlertNote("Text extraction aborted.");

	
	if (pathName) ASFileSysReleasePath(NULL, pathName);

	if (pOutput) fclose(pOutput);

	return;
	*/
}
void CDataShield::CalcPlaceholdersMBox()
{
	STAT_PAIR m_SizeStat;
	PDPage m_P;
	ASFixedRect m_CBox;
	FORMAT m_PF;
	// Статистическая таблица
	vector<STAT_PAIR> m_StatTbl;
	// Активный документ
	PDDoc m_ActPDDoc = AVDocGetPDDoc(AVAppGetActiveDoc());
	//------------------------------------------------------------
	// БЛОК СТАТИСТИЧЕСКОГО АНАЛИЗА
	//------------------------------------------------------------
	for (int i = 0; i < m_PagesInDocument; i++)
	{
		// Получаем страницу
		m_P = PDDocAcquirePage(m_ActPDDoc, i);
		// Получаем размер кроп-бокса страницы
		PDPageGetCropBox(m_P, &m_CBox);
		m_PF.H	= ASFixedToFloat(m_CBox.top - m_CBox.bottom);
		m_PF.W	= ASFixedToFloat(m_CBox.right - m_CBox.left);
		// Ищем, нет ли такого формата в статистическом массиве
		BOOL m_FormatPresent = FALSE;
		for (int j = 0; j < m_StatTbl.size(); j++)
		{
			if (m_StatTbl[j].second.H == m_PF.H && m_StatTbl[j].second.W == m_PF.W)
			{
				// Есть такой формат! Инкрементируем счетчик вхождений
				m_StatTbl[j].first++;
				m_FormatPresent = TRUE;
			}
		}
		// Формат в массиве отсутствует. Добавляем вхождение
		if (!m_FormatPresent)
		{
			m_SizeStat = make_pair(1, m_PF);
			m_StatTbl.push_back(m_SizeStat);
		}
		// Освобождаем страницу
		PDPageRelease(m_P);
	}
	// Сбор статистической информации завершен, приступаем к пределению размера плейсхолдера
	int m_KeyValueMax = 1;
	int m_IndexMax = -1;
	for (int i = 0; i < m_StatTbl.size(); i++)
	{
		if (m_StatTbl[i].first > m_KeyValueMax)
		{
			m_KeyValueMax = m_StatTbl[i].first;
			m_IndexMax = i;
		}
	}
	// Теперь обрабатываем ситуацию, когда ВСЕ страницы в документе РАЗНОГО размера
	// В этом случае за основу принимаем наибольший из размеров
	// Из рассмотрения стараемся исключить форматы с нестандартными пропорциями(сильно вытянутые по ширине или высоте)
	// В основу сравнения ложим соотношение сторон 0.7 (или 1.4), как характерное для
	// стандартных форматов А4, А3 и т.п. Максимальное отклонение принимаем 20%
	// Т.е. предельные пропорции находятся в диапазоне 0.56..0.84 (1.12..1.68)  
	if (m_IndexMax == -1)
	{
		double m_Prop;
		double m_Square = 0.0;
		for (int i = 0; i < m_StatTbl.size(); i++)
		{
			m_Prop = m_StatTbl[i].second.H / m_StatTbl[i].second.W;
			if ((m_Prop >= 0.56 && m_Prop <= 0.84 ) || (m_Prop >= 1.12 && m_Prop <= 1.68))
			{
				if (m_StatTbl[i].second.H * m_StatTbl[i].second.W > m_Square)
				{
					m_Square = m_StatTbl[i].second.H * m_StatTbl[i].second.W;
					m_IndexMax = i;
				}
			}
		}
	}
	// Анализ окончен. Проверяем не случилось ли так,что и поиск по формату не дал результатов.
	// Если так произошло (все страницы не удовлетворяют условиям соблюдения пропорций),
	// в качестве основного размера выбираем первый попавшийся формат
	if (m_IndexMax == -1) m_IndexMax = 0;
	// Теперь все. Приступаем к формированию размера плейсхолдера
	m_PlaceholderSize.bottom	= fixedZero;
	m_PlaceholderSize.left		= fixedZero;
	m_PlaceholderSize.right		= ASFloatToFixed(m_StatTbl[m_IndexMax].second.W);
	m_PlaceholderSize.top		= ASFloatToFixed(m_StatTbl[m_IndexMax].second.H);
}
CDataShield::CDataShield(void)
{
	// Определяем количество страниц в активном докменте
	m_PagesInDocument = PDDocGetNumPages(AVDocGetPDDoc(AVAppGetActiveDoc()));
	//-------------------------------------------------------------
	// Создаем набор непротиворечивых данных, используемых по умолчанию
	//-------------------------------------------------------------
	// Единицы измерения - дюймы
	m_UnitType = INCH;
	m_UnitK = 1.0;
	// Режим работы - по умолчанию фиксированный размер страницы, фиксированная схема, подбор размера пластины
	m_OPMode = C;
	// По умолчанию используем печать STANDARD, SADDLE STITCHED, GERMAN FOLD, 8-UP Imposition scheme
	m_PRNType	= STANDARD;
	m_BNDType	= SADDLE_STITCHED;
	m_FLDType	= GERMAN;
	m_NRows		= 2;
	m_NCols		= 4;
	m_Places    = m_NCols * m_NRows;
	// Сборка тетрадями по 16 листов (одна двустороняя пластина для заданого типа печати)
	m_NPagesPerSection = 16;
	m_PlatesPerSection = 1;
	// Количество тетрадей на документ и количество чистых страниц
	m_WhitePages = m_NPagesPerSection - (m_PagesInDocument % m_NPagesPerSection);
	m_Sections   = (m_PagesInDocument + m_WhitePages) / m_NPagesPerSection;
	// Полное число пластин в задании
	m_PlatesTotal = m_Sections * m_PlatesPerSection;
	//=============================================================
	// Технологические параметры
	//=============================================================
	// Устанавливаем принимаемые по умолчанию технологические параметры генератора
	m_TechAllowence_Y_width = m_TechAllowence_X_width = m_TechAllowence_M_width = ASFloatToFixed(72 * 10 / 25.4);
	// Отступ между страницами. По умолчанию 2мм = 0.079 дюйма
	m_PlaceholdersGap = ASFloatToFixed(72 * 0.079);
	// Размер страницы документа
	ASFixedRect m_PageCropBox;
	PDPageGetCropBox(PDDocAquirePage(AVDocGetPDDoc(AVAppGetActiveDoc()), 0), &m_PageCropBox);
	// Вычисляем размер области печати
	m_PrintingArea.left		= m_TechAllowence_Y_width;
	m_PrintingArea.right	= m_PrintingArea.left + 
		ASFixedMul((m_PageCropBox.right - m_PageCropBox.left), ASInt16ToFixed(m_NCols)) + 
		ASFixedMul(m_PlaceholdersGap, ASInt16ToFixed(m_NCols - 1));
	m_PrintingArea.bottom	= m_TechAllowence_X_width;
	m_PrintingArea.top		= m_PrintingArea.bottom +
		ASFixedMul((m_PageCropBox.top - m_PageCropBox.bottom), ASInt16ToFixed(m_NRows)) +
		ASFixedMul(m_TechAllowence_M_width, ASInt16ToFixed(m_NRows - 1));
	// Размер листа
	m_OutputMediaBox.bottom		= fixedZero;
	m_OutputMediaBox.top		= m_OutputMediaBox.bottom +
		ASFixedMul(m_TechAllowence_X_width, fixedTwo) + (m_PrintingArea.top - m_PrintingArea.bottom);
	m_OutputMediaBox.left		= fixedZero;
	m_OutputMediaBox.right		= m_OutputMediaBox.left +
		ASFixedMul(m_TechAllowence_Y_width, fixedTwo) + (m_PrintingArea.right - m_PrintingArea.left);
	// Формат печати - вычисляемый, ориентация - ЛАНДШАФТ
	m_OutputMediaSize.H = ASFloatToFixed(m_OutputMediaBox.top - m_OutputMediaBox.bottom) / 72.0;
	m_OutputMediaSize.W = ASFloatToFixed(m_OutputMediaBox.right - m_OutputMediaBox.left) / 72.0;
	m_MediaOrient		= LANDSCAPE;
	// Отмена зеркальной печати
	m_InversePrinting = false;
	// Устанавливаем общие к-ты масштабирования-перемещения-поворота для страницы
	m_X_Scale_Total = fixedOne;
	m_Y_Scale_Total = fixedOne;
	m_X_Translation_Total = fixedZero;
	m_Y_Translation_Total = fixedZero;
	m_Rotation_Angle_Total = 0.0;
	m_ALFA_Skew_Total = 0.0;
	m_BETA_Skew_Total = 0.0;
	// По умолчанию печатаем все технологические метки
	m_PrintRegMarks				= true;
	m_PrintCMYKColorBar			= true;
	m_PrintPANTONEcolorBar		= true;
	m_PrintProgressiveGray		= true;
	m_PrintCFMarks				= true;
	// Создаем массив технологических меток
	PrepareTMArray();
	// Текущий номер страницы предварительного просмотра
	m_CurrentPreviewPN = 0;
	m_CurrentPreviewPDPage = NULL;
	// Толщина бумаги
	m_PaperThickness = 0.002;
	// Режим предварительного просмотра - включен
	m_PreviewMode = TRUE;
}