ÐзвлиÑанеÑо на ÑекÑÑ, изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑÑиÑÑове Ð¾Ñ ÑÑÑеÑÑвÑÐ²Ð°Ñ PDF изглежда леÑна задаÑа, докаÑо не Ñе ÑблÑÑкаÑе Ñ Ñеални докÑменÑи. ÐÑÑнеÑе модÑл за ÑÑÑÑене вÑÑÑ Ñ ÑеÑиÑидеÑÐµÑ Ñ Ð¸Ð»Ñди клиенÑÑки Ñайла и гÑеÑкиÑе Ñе Ñе ÑазпÑеделÑÑ Ð² нÑколко добÑе познаÑи гÑÑпи. ÐÑмиÑе Ñе ÑливаÑ, ÑÑй каÑо никой не е ÑÑобÑил на модÑла колко голÑмо ÑазÑÑоÑние Ñе бÑои за инÑеÑвал. ÐÑÑги ÑÑÑаниÑи Ñе вÑÑÑÐ°Ñ ÐºÐ°Ñо неÑеÑливи Ñимволи, заÑоÑо подмножеÑÑвоÑо Ð¾Ñ ÑÑиÑÑове (subsetted font) не ÑÑдÑÑжа ÑÑпоÑÑавÑне Ð¾Ñ ÐºÐ¾Ð´Ð¾Ð²ÐµÑе на глиÑовеÑе кÑм ÑеалниÑе Ñимволи. Ð âлогоÑÐ?на компаниÑÑаâ?Ñе оказва Ð´ÐµÐ²ÐµÑ Ð¾Ñделни обекÑа на изобÑажениÑ, подÑедени зад маÑка. ÐиÑо Ð¾Ñ Ñова не е гÑеÑка в библиоÑекаÑа, Ñова е ÑазликаÑа Ð¼ÐµÐ¶Ð´Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¾Ñо извикване на ÑÑнкÑÐ¸Ñ Ð·Ð° извлиÑане и ÑазбиÑанеÑо какво ÑоÑно може и какво не може да Ñе вÑзÑÑанови Ð¾Ñ Ð±Ð°Ð¹ÑовеÑе на диÑка.
losLab PDF Library за Pascal пÑедоÑÑÐ°Ð²Ñ Ð½Ð° Delphi и C++Builder ÑазÑабоÑÑиÑиÑе повеÑе Ð¾Ñ ÐµÐ´Ð¸Ð½ наÑин за ÑеÑене на Ñези ÑÑи поÑока, каÑо ниваÑа Ñе ÑазлиÑÐ°Ð²Ð°Ñ Ð¿Ð¾ ÑвоиÑе гаÑанÑии. ÐлÑÑÑÑ Ðµ в ÑÑпоÑÑавÑнеÑо на нивоÑо кÑм задаÑаÑа: Ð¸Ð½Ð´ÐµÐºÑ Ð·Ð° ÑÑÑÑене, ÑеÑензиÑане за ÑензÑÑиÑане (redaction) и пÑовеÑка за PDF/A ÑÑвмеÑÑимоÑÑ Ð¸Ð·Ð¸ÑÐºÐ²Ð°Ñ ÑазлиÑни неÑа Ð¾Ñ ÐµÐ´Ð½Ð° и ÑÑÑа ÑÑÑаниÑа. ÐзползванеÑо на гÑеÑно извикване води до излиÑни ÑÑÐ¸Ð»Ð¸Ñ Ð¸Ð»Ð¸ ненадеждни ÑезÑлÑаÑи.
Ðива на извлиÑане на ÑекÑÑ Ð¸ ÑÐµÑ Ð½Ð¸Ñе гаÑанÑии
GetPageText пÑиема ÑÑойноÑÑ Ð½Ð° опÑииÑе Ð¾Ñ 0 до 8, каÑо Ñова ÑиÑло опÑÐµÐ´ÐµÐ»Ñ Ð¼Ð°ÑинаÑа (engine) за обÑабоÑка, а не ÑоÑмаÑа. СÑойноÑÑи Ð¾Ñ 0 до 2 изпÑлнÑÐ²Ð°Ñ Ð±ÑÑз пÑоÑ
од, подÑ
одÑÑ Ð·Ð° пÑедваÑиÑелен пÑеглед. СÑойноÑÑи Ð¾Ñ 3 до 8 Ñе наÑоÑÐ²Ð°Ñ ÐºÑм маÑина, ÑÑобÑазена Ñ Ð¾ÑоÑмлениеÑо на ÑÑÑаниÑаÑа, коÑÑо вÑзÑÑановÑва ÑедовеÑе и инÑеÑвалиÑе вÑз оÑнова на ÑеалнаÑа позиÑÐ¸Ñ Ð½Ð° глиÑовеÑе. Ð Ñози диапазон ÑазликиÑе Ñа ÑÑÑеÑÑвени: 4 и 6 ÑазделÑÑ ÑекÑÑа на дÑми, 5 и 6 вÑÑÑÐ°Ñ ÑиÑинаÑа на вÑеки глиÑ, а 7 извлиÑа ÑиÑÑ ÑекÑÑ Ð±ÐµÐ· ÑÑиÑÑове, ÑвеÑове и меÑаданни. ÐпÑÐ¸Ñ 7 е изÑ
одÑÑ Ð·Ð° индекÑиÑане пÑи ÑÑÑÑене, ÑÑй каÑо Ñо Ñе нÑждае Ñамо Ð¾Ñ Ð´Ñми.
ÐиÑо една опÑÐ¸Ñ Ð½Ðµ може да ÑпаÑи докÑменÑ, койÑо изнаÑално не ÑÑдÑÑжа нÑжнаÑа инÑоÑмаÑиÑ. PDF ÑÑпоÑÑÐ°Ð²Ñ ÐºÐ¾Ð´Ð¾Ð²ÐµÑе на ÑимволиÑе Ñ ÑоÑмиÑе на глиÑовеÑе, и единÑÑвеноÑо неÑо, коеÑо пÑевежда Ñези кодове обÑаÑно в ÑеÑим ÑекÑÑ, е ÑаблиÑаÑа ToUnicode CMap на ÑÑиÑÑа (ISO 32000-1 §9.10). ÐогаÑо даден ÑÑиÑÑ Ðµ вгÑаден ÑаÑÑиÑно (subsetted) без Ñакава ÑаблиÑа, извлиÑанеÑо е невÑзможно. Тази библиоÑека, ÑÑнкÑиÑÑа за копиÑане в ÑеÑеÑа или дÑÑги инÑÑÑÑменÑи, вÑиÑки Ñе Ñе огÑаниÑÐ°Ð²Ð°Ñ Ð´Ð¾ оÑгаÑване по именаÑа на глиÑовеÑе или не вÑÑÑÐ°Ñ Ð½Ð¸Ñо. ÐÑавилноÑо ÑеÑение е Ñазпознаване, а не Ñложни опиÑи за коÑекÑиÑ. ÐаÑкиÑайÑе ÑÑÑаниÑаÑа Ñ Ð½Ð¸Ñка ÑÑепен на надеждноÑÑ Ð¸ Ñ Ð¸Ð·Ð¿ÑаÑеÑе кÑм OCR, ÑÑй каÑо ÑÐ¸Ñ Ð¾Ñо индекÑиÑане на неÑеÑливи Ñимволи е по-лоÑо Ð¾Ñ Ð¿ÑизнаванеÑо, Ñе ÑайлÑÑ Ð½Ðµ може да бÑде пÑоÑеÑен.
Ðа ÑлÑÑаиÑе, коиÑо ÑÑандаÑÑниÑе опÑии не покÑиваÑ, каÑо пеÑÑонализиÑана ÑокенизаÑиÑ, анализ на поÑока Ð¾Ñ ÑÑдÑÑжание или обÑабоÑка по ваÑи пÑавила, декодеÑÑÑ Ðµ налиÑен едно ниво по-долÑ. ÐлаÑÑÑ TPDFExtractor Ñе изгÑажда вÑÑÑ
Ñ ÑеÑника Ñ ÑеÑÑÑÑи на ÑÑÑаниÑаÑа и колекÑиÑÑа Ð¾Ñ ÑÑиÑÑове. ÐеговиÑÑ Ð¼ÐµÑод ExtractTextW пÑевежда опеÑаÑииÑе Ñ ÑекÑÑ Ð¾Ñ Ð¿Ð¾Ñока пÑез меÑ
анизмиÑе на ÑÑиÑÑа за вÑзÑÑановÑване на Unicode, а ÑÑбиÑиеÑо OnFindObject ви пÑедава вÑеки Ð¾Ð±ÐµÐºÑ Ð² пÑоÑеÑа на обÑабоÑка. ÐовеÑеÑо пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½ÑÐ¼Ð°Ñ Ð½Ñжда Ð¾Ñ ÑакÑв деÑайлен доÑÑÑп, но Ñези, коиÑо имаÑ, оÑенÑÐ²Ð°Ñ Ð½Ð°Ð»Ð¸ÑиеÑо на Ñози пÑблиÑен Ñлой.
ÐозиÑиониÑани блокове: оÑнова за ÑÑÑÑене и ÑензÑÑиÑане
ЧиÑÑиÑÑ ÑекÑÑ Ð²Ð¸ казва какво пиÑе на ÑÑÑаниÑаÑа. Рано или кÑÑно обаÑе даден пÑодÑÐºÑ ÑÑÑбва да знае и кÑде ÑоÑно Ñе намиÑа Ñози ÑекÑÑ, за маÑкиÑане пÑи ÑÑÑÑене, оÑеÑÑаване на зони за ÑензÑÑиÑане или поÑÑавÑне на аноÑаÑии. ExtractPageTextBlocks вÑÑÑа деÑкÑипÑÐ¾Ñ ÐºÑм ÑпиÑÑк Ñ ÑекÑÑови ÑегменÑи, вÑеки Ð¾Ñ ÐºÐ¾Ð¸Ñо ÑÑдÑÑжа ÑекÑÑ, огÑаниÑÐ°Ð²Ð°Ñ Ð¿ÑавоÑгÑлник (bounding box), име и ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½Ð¸Ñ ÑÑиÑÑ:
var
Pdf: TPDFlib;
Blocks, I: Integer;
begin
Pdf := TPDFlib.Create;
try
if Pdf.LoadFromFile('contract.pdf', '') <> 1 then
raise Exception.Create('load failed');
Pdf.SelectPage(1);
Blocks := Pdf.ExtractPageTextBlocks(0);
for I := 0 to Pdf.GetTextBlockCount(Blocks) - 1 do
Writeln(Format('%s [%s %.1f pt at %.0f,%.0f]',
[Pdf.GetTextBlockText(Blocks, I),
Pdf.GetTextBlockFontName(Blocks, I),
Pdf.GetTextBlockFontSize(Blocks, I),
Pdf.GetTextBlockBound(Blocks, I, 0),
Pdf.GetTextBlockBound(Blocks, I, 1)]));
Pdf.ReleaseTextBlocks(Blocks);
finally
Pdf.Free;
end;
end;
Ðна подÑобноÑÑ Ð² Ñази облаÑÑ Ð²Ð¾Ð´Ð¸ до най-много гÑеÑки пÑи инÑегÑаÑиÑÑа. ÐаÑамеÑÑиÑе SetTextExtractionArea, SetTextExtractionWordGap и SetTextExtractionOptions пÑедÑÑавлÑÐ²Ð°Ñ ÑÑÑÑоÑÐ½Ð¸Ñ Ð½Ð° ниво докÑменÑ, коиÑо Ñе запазваÑ, а не аÑгÑменÑи за вÑÑко извикване. Ðко огÑаниÑиÑе облаÑÑÑа за ÑеÑене на заглавнаÑа ленÑа за клаÑиÑиÑиÑане на докÑменÑ, Ñова огÑаниÑение ÑиÑ
омÑлком Ñе заÑегне вÑиÑки поÑледваÑи извлиÑÐ°Ð½Ð¸Ñ Ð·Ð° ÑÑÑÐ¸Ñ Ð´ÐµÑкÑипÑоÑ, вклÑÑиÑелно повикваниÑÑа на GetPageText. ÐÑепоÑÑÑиÑелно е да нÑлиÑаÑе ÑÑÑÑоÑниеÑо за извлиÑане Ð¼ÐµÐ¶Ð´Ñ Ð¾ÑделниÑе задаÑи или да използваÑе оÑделен деÑкÑипÑÐ¾Ñ Ð·Ð° вÑÑка изÑ
одна ÑеÑиÑ.
ÐÑагÑÑ Ð·Ð° ÑазÑÑоÑние Ð¼ÐµÐ¶Ð´Ñ Ð´ÑмиÑе е инÑÑÑÑменÑÑÑ ÑÑеÑÑ Ð¿ÑÑÐ²Ð¸Ñ Ñип гÑеÑки, ÑлеÑиÑе дÑми. SetTextExtractionWordGap Ñказва на маÑинаÑа за оÑоÑмление колко Ñ
оÑизонÑално пÑоÑÑÑанÑÑво (ÑпÑÑмо ÑобÑÑÐ²ÐµÐ½Ð¸Ñ Ð¸Ð½ÑеÑвал на глиÑовеÑе) ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð´ÑмиÑе. Ðдна гÑÑÑа ÑаблиÑа изиÑква по-малÑк инÑеÑвал Ð¾Ñ Ð¼Ð°ÑкеÑингова ÑÑÑаниÑа, Ñака Ñе наÑÑÑойванеÑо на Ñози пÑаг за конкÑеÑÐ½Ð¸Ñ ÐºÐ»Ð°Ñ Ð´Ð¾ÐºÑменÑи е по-добÑо ÑеÑение Ð¾Ñ ÐµÐ´Ð½Ð° глобална конÑÑанÑа. Това ÑÑÑÑоÑние Ñе запазва за докÑменÑа, Ñака Ñе го наÑÑÑойвайÑе ÑÑзнаÑелно.
ÐзобÑажениÑ: оÑигинални поÑоÑи, а не екÑанни Ñнимки
ÐÑеÑниÑÑ Ð½Ð°Ñин за извлиÑане на изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ PDF е ÑендиÑанеÑо и изÑÑзванеÑо на ÑÑÑаниÑаÑа. Това пÑÐ¾Ð¼ÐµÐ½Ñ ÑазделиÑелнаÑа ÑпоÑобноÑÑ Ð½Ð° пикÑелиÑе, пÑилага ÑоÑаÑÐ¸Ñ Ð¸ ÑниÑожава оÑÐ¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ ÑоÑмаÑ. ÐеÑодÑÑ GetPageImageList извлиÑа ÑеалниÑе ÑеÑÑÑÑи Ð¾Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ, ÑеÑеÑиÑани Ð¾Ñ ÑÑÑаниÑаÑа, каÑо вÑеки ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð²ÑÑÑа ÑвоиÑе ÑвойÑÑва и оÑигинални данни без пÑомÑна:
var
ImgList, I: Integer;
begin
Pdf.SelectPage(1);
ImgList := Pdf.GetPageImageList(0);
for I := 0 to Pdf.GetImageListCount(ImgList) - 1 do
begin
Writeln(Pdf.GetImageListItemFormatDesc(ImgList, I, 0));
Pdf.SaveImageListItemDataToFile(ImgList, I, 0,
Format('page1-img%.2d.bin', [I]));
end;
Pdf.ReleaseImageList(ImgList);
end;
ÐÑовеÑÑвайÑе GetImageListItemFormatDesc, пÑеди да пÑавиÑе пÑÐµÐ´Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° даден елеменÑ, ÑÑй каÑо ÑеÑÑÑÑиÑе на ÑÑÑаниÑаÑа ÑÑдко Ñа пÑоÑÑо едно изобÑажение. ÐлÑа маÑкаÑа (soft mask) Ñе показва каÑо оÑделен запиÑ. Ðдин и ÑÑÑ XObject ÑеÑÑо Ñе повÑаÑÑ Ð½Ð° много ÑÑÑаниÑи, Ñака Ñе дедÑпликиÑайÑе по ÑÑдÑÑжание на Ñ
еÑа пÑеди аÑÑ
ив, за да не запиÑваÑе едно и ÑÑÑо лого ÑÑоÑиÑи пÑÑи. ÐзобÑажениÑÑа в Ñежим CMYK JPEG изиÑÐºÐ²Ð°Ñ ÑпÑавление на ÑвеÑовеÑе пÑи поÑледваÑа обÑабоÑка, инаÑе Ñе визÑализиÑÐ°Ñ Ñ Ð¾Ð±ÑÑнаÑи ÑвеÑове. ÐогаÑо иÑкаÑе ÑегиÑÑÑÑ Ð½Ð° ниво докÑменÑ, FindImages заедно Ñ SetFindImagesMode ÑканиÑа ÑÐµÐ»Ð¸Ñ Ñайл наведнÑж.
Ðма една гÑаниÑа, коÑÑо Ñи ÑÑÑÑва да Ñе обÑÑди пÑедваÑиÑелно: извлиÑанеÑо на изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑÑÑа Ñамо ÑаÑÑеÑни ÑеÑÑÑÑи. Ðого или гÑаÑика, наÑеÑÑани Ñ Ð²ÐµÐºÑоÑни линии, не Ñа изобÑажение в конÑекÑÑа на ÑеÑÑÑÑиÑе и нÑма да Ñе поÑвÑÑ Ð² ÑпиÑÑка Ñ Ð¸Ð·Ð¾Ð±ÑажениÑ, незавиÑимо колко ÑÑно Ñе Ð²Ð¸Ð¶Ð´Ð°Ñ Ð½Ð° екÑана. Ðко е Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ да извлеÑеÑе Ñакава гÑаÑика, ÑÑÑбва да ÑендиÑаÑе ÑÑоÑвеÑнаÑа облаÑÑ Ð² биÑмап, коеÑо е ÑазлиÑна опеÑаÑиÑ. ÐваÑа Ñипа ÑезÑлÑаÑи не ÑÑÑбва да Ñе ÑмеÑÐ²Ð°Ñ Ð±ÐµÐ· ÑÑно обознаÑение.
ШÑиÑÑове: одиÑ, а не екÑпоÑÑ
ÐнÑеÑÑейÑÑÑ Ð·Ð° ÑÑиÑÑове оÑговаÑÑ Ð½Ð° вÑпÑоÑи за ÑамиÑе ÑÑиÑÑове. Той не извлиÑа ÑамиÑе Ñайлове на ÑÑиÑÑовеÑе и Ñова опÑÐµÐ´ÐµÐ»Ñ Ð½Ð°Ñина Ð¼Ñ Ð½Ð° използване. След каÑо FindFonts ÑканиÑа докÑменÑа, пÑебÑоÑванеÑо пÑеминава пÑез ÑÑиÑÑовеÑе по ÑеÑ
Ð½Ð¸Ñ ID, а повикваниÑÑа за ÑвойÑÑва Ñе оÑнаÑÑÑ Ð·Ð° ÑекÑÑо избÑÐ°Ð½Ð¸Ñ ÑÑиÑÑ:
var
I: Integer;
begin
Pdf.FindFonts;
for I := 1 to Pdf.FontCount do // font indexes start at 1, not 0
if Pdf.SelectFont(Pdf.GetFontID(I)) = 1 then
Writeln(Format('%s type=%d embedded=%d subset=%d',
[Pdf.FontName, Pdf.FontType,
Pdf.GetFontIsEmbedded, Pdf.GetFontIsSubsetted]));
end;
ÐнимавайÑе Ñ Ð³ÑаниÑиÑе на ÑикÑла. ÐндекÑиÑе на ÑÑиÑÑовеÑе Ñа Ð¾Ñ 1 до FontCount, докаÑо ÑекÑÑовиÑе блокове и ÑпиÑÑÑиÑе Ñ Ð¸Ð·Ð¾Ð±ÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñа Ñ Ð±Ð°Ð·Ð¸Ñани на нÑла индекÑи. СмеÑванеÑо на дваÑа подÑ
ода води до гÑеÑка Ñ ÐµÐ´Ð¸Ð½Ð¸Ñа, коÑÑо или пÑопÑÑка пÑÑÐ²Ð¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ, или надÑ
вÑÑÐ»Ñ Ð³ÑаниÑиÑе на маÑива. ÐÑвен Ñова, Ñози API не пÑедлага байÑов екÑпоÑÑ Ð½Ð° ÑÑиÑÑове, никое повикване не вÑÑÑа вгÑÐ°Ð´ÐµÐ½Ð¸Ñ ÑÑиÑÑ ÐºÐ°Ñо TTF или OTF Ñайл. ÐоделÑÑ Ðµ пÑоекÑиÑан за анализ и пÑовеÑка на меÑаданни. Това е напÑлно доÑÑаÑÑÑно за ÑеалниÑе нÑжди: оÑкÑиване на ÑаÑÑиÑно вгÑадени ÑÑиÑÑове, пÑовеÑка на вгÑажданеÑо пÑеди аÑÑ
ивиÑане (неинÑегÑиÑаниÑÑ ÑÑиÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñа PDF/A ÑÑвмеÑÑимоÑÑÑа, какÑо е опиÑано в PDF/A и PDF/UA пÑовеÑка в Delphi) и диагноÑÑика пÑи пÑоблеми Ñ ÐºÐ¾Ð´Ð¸ÑанеÑо.
ÐоÑледноÑо повикване е изклÑÑиÑелно полезно пÑи пÑÑвонаÑална пÑовеÑка. ÐзвикайÑе GetFontEncoding за вÑеки ÑÑиÑÑ Ð¸ го анализиÑайÑе заедно Ñ Ñлага за ÑаÑÑиÑно вгÑаждане (subset), за да пÑедвидиÑе каÑеÑÑвоÑо на извлиÑане на ÑекÑÑ. СÑÑаниÑа, ÑииÑо ÑÑиÑÑове Ñа ÑаÑÑиÑно вгÑадени Ñ Ð½ÐµÑÑандаÑÑни кодиÑаниÑ, е идеален ÐºÐ°Ð½Ð´Ð¸Ð´Ð°Ñ Ð·Ð° OCR, коеÑо ÑпеÑÑÑва вÑеме Ð¾Ñ Ð¸Ð·Ð»Ð¸Ñни опиÑи за ÑекÑÑово извлиÑане.
ÐаÑабно извлиÑане без заÑеждане на докÑменÑи
ÐÑи пакеÑна обÑабоÑка заÑежданеÑо на ÑÑл докÑÐ¼ÐµÐ½Ñ Ñамо за ÑеÑене на една ÑÑÑаниÑа Ñ
аби излиÑни ÑеÑÑÑÑи. ÐаÑианÑиÑе Ñ ÐµÐ´Ð½Ð¾ извикване ExtractFilePageText and ExtractFilePageTextBlocks пÑÐ¸ÐµÐ¼Ð°Ñ Ð¸Ð¼Ðµ на Ñайл, паÑола и Ð½Ð¾Ð¼ÐµÑ Ð½Ð° ÑÑÑаниÑа диÑекÑно, каÑо избÑÐ³Ð²Ð°Ñ Ð¿ÑлноÑо заÑеждане. Ðа изклÑÑиÑелно големи Ñайлове е налиÑен оÑе по-еÑекÑивен меÑод. ÐиÑекÑниÑÑ Ð´Ð¾ÑÑÑп оÑваÑÑ Ñайл ÑÑез ÑеÑене на xref ÑаблиÑаÑа, Ñака Ñе DAOpenFileReadOnly, поÑледвано Ð¾Ñ DAExtractPageText, заÑежда Ñамо обекÑиÑе, необÑ
одими за конкÑеÑнаÑа ÑÑÑаниÑа. Това изиÑква пÑомÑна в подÑ
ода: ÑÑнкÑииÑе за диÑекÑен доÑÑÑп адÑеÑиÑÐ°Ñ ÑÑÑаниÑиÑе ÑÑез PageRef (деÑкÑипÑÐ¾Ñ Ð·Ð° ÑеÑеÑенÑÐ¸Ñ ÐºÑм обекÑ), полÑÑен Ð¾Ñ DAFindPage, а не ÑÑез ÑиÑÑ Ð½Ð¾Ð¼ÐµÑ Ð½Ð° ÑÑÑаниÑа. ÐодаванеÑо на Ð½Ð¾Ð¼ÐµÑ Ð½Ð° ÑÑÑаниÑа вмеÑÑо деÑкÑипÑÐ¾Ñ Ð²Ð¾Ð´Ð¸ до гÑеÑни ÑезÑлÑаÑи без ÑÑобÑение за гÑеÑка. ÐовеÑе за инÑÑÑÑменÑиÑе за диÑекÑен доÑÑÑп вижÑе в Ñливане, ÑазделÑне и диÑекÑен доÑÑÑп до големи PDF Ñайлове.
Ðа да пиÑеÑе ÑÑабилен код за извлиÑане, винаги ÑÑеÑиÑайÑе ÑÑÑаниÑаÑа каÑо ненадежден изÑоÑник на данни. ÐеÑÑоÑвеÑÑÑвиеÑо Ð¼ÐµÐ¶Ð´Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÑекÑÑ Ð¸ визÑализиÑаноÑо ÑÑдÑÑжание поÑÑи винаги Ñе дÑлжи на пÑоблеми Ñ ÐºÐ¾Ð´Ð¸ÑанеÑо, ÑлеÑи знаÑи или липÑваÑи ÑаблиÑи ToUnicode в ÑÑиÑÑовеÑе. РеÑениеÑо е да оÑенÑваÑе надеждноÑÑÑа и да пÑенаÑоÑваÑе лоÑиÑе ÑÑÑаниÑи кÑм OCR. ÐаÑÑÑойÑе пÑавилно пÑоÑеÑиÑе Ñи за анализ на ÑÑиÑÑове и ÑледеÑе ÑÑÑÑоÑниеÑо на паÑамеÑÑиÑе за извлиÑане (каÑо огÑаниÑаваÑÐ¸Ñ Ð¿ÑавоÑгÑлник) пÑез ÑÐµÐ»Ð¸Ñ Ð¶Ð¸Ð·Ð½ÐµÐ½ ÑикÑл на деÑкÑипÑоÑа.
ÐемонÑÑÑаÑионни пÑоекÑи, пÑобни веÑÑии и пÑлноÑо опиÑание на API Ñа налиÑни на пÑодÑкÑоваÑа ÑÑÑаниÑа на losLab PDF Library за Delphi.