PDF аноÑаÑиÑÑа е ÑеÑник, пÑикаÑен кÑм ÑÑÑаниÑаÑа, а не маÑкеÑ, наÑиÑÑван вÑÑÑ Ñ Ð½ÐµÑ. СÑандаÑÑÑÑ ISO 32000-1 §12.5 деÑиниÑа около две дÑзини подÑипове, каÑо вÑеки ноÑи /Subtype, пÑавоÑгÑлник в кооÑдинаÑи на ÑÑÑаниÑаÑа, Ð½Ð°Ð±Ð¾Ñ Ð¾Ñ Ñлагове и обикновено поÑок Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸ за вÑнÑÐ½Ð¸Ñ Ð²Ð¸Ð´ (appearance stream), койÑо опÑÐµÐ´ÐµÐ»Ñ ÐºÐ°ÐºÐ²Ð¾ вÑÑÑноÑÑ Ð¸Ð·Ð¾Ð±ÑазÑва визÑализаÑоÑÑÑ. ÐодÑиповеÑе не ознаÑÐ°Ð²Ð°Ñ ÐµÐ´Ð½Ð¾ и ÑÑÑо неÑо за Ñовека, пÑÐµÐ³Ð»ÐµÐ¶Ð´Ð°Ñ Ð´Ð¾ÐºÑменÑа. ÐаÑкиÑанеÑо (Highlight) и ÑÑÐ¸Ñ Ð¸Ñе Ñ Ð¼Ð°ÑÑило (Ink stroke) Ñа коменÑаÑи; вÑÑзкаÑа (Link) е навигаÑиÑ; изÑкаÑаÑиÑÑ Ð¿ÑозоÑÐµÑ (Popup) е малкиÑÑ Ð¿ÑозоÑеÑ, койÑо Ñе оÑваÑÑ Ð¿Ñи ÑÑакване вÑÑÑ Ñ Ð»ÐµÐ¿ÐºÐ°Ð²Ð° бележка, ÑÑÑ ÑанÑван каÑо ÑамоÑÑоÑÑелен Ð¾Ð±ÐµÐºÑ Ð¸ поÑоÑен Ð¾Ñ ÑодиÑелÑÐºÐ¸Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ. ÐÑговоÑиÑе Ñа пÑлни ÑекÑÑови аноÑаÑии, коиÑо пÑепÑаÑÐ°Ñ ÐºÑм коменÑаÑа, на койÑо оÑговаÑÑÑ, ÑÑез Ð·Ð°Ð¿Ð¸Ñ in-reply-to. СледоваÑелно маÑивÑÑ Ð¾Ñ Ð°Ð½Ð¾ÑаÑии на ниво ÑÑÑаниÑа не е ÑпиÑÑкÑÑ Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑи на ÑеÑензенÑа. Той е плоÑка ÑÑÑÑкÑÑÑа, ÑÑдÑÑжаÑа коменÑаÑи, вÑÑзкиÑе Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ Ð¸ нÑколко елеменÑа, коиÑо никой ÑеÑÐµÐ½Ð·ÐµÐ½Ñ Ð½Ðµ би наÑекÑл коменÑаÑ. Ðанел, койÑо ÑÑеÑиÑа маÑива каÑо ÑпиÑÑк Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑи, Ñе показва данни, ÑазлиÑни Ð¾Ñ Ñези вÑв вÑеки дÑÑг визÑализаÑоÑ, койÑо клиенÑÑÑ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°.
ÐзгÑажданеÑо на ÑабоÑен пÑоÑÐµÑ Ð·Ð° пÑеглед на аноÑаÑии Ñ PDFium Component (базиÑаниÑÑ Ð½Ð° PDFium VCL/LCL ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð·Ð° Delphi, C++Builder и Lazarus) ознаÑава конÑенÑÑиÑане вÑÑÑ Ñ ÑоÑкиÑе, кÑдеÑо ÑазликаÑа Ð¼ÐµÐ¶Ð´Ñ Ð½ÐµÐ¾Ð±ÑабоÑÐµÐ½Ð¸Ñ Ð¼Ð°Ñив и ÑовеÑÐºÐ¸Ñ Ð¸Ð·Ð³Ð»ÐµÐ´ ÑÑздава пÑоблеми: бÑоене, индекÑиÑане, пÑеоÑвеÑÑване на маÑкеÑи, коиÑо енджинÑÑ Ð²ÐµÑе е ÑикÑиÑал, изÑÑиване без оÑÑавÑне на оÑÑаÑÑÑни Ñледи (ghosts) и добавÑне на ваÑи ÑобÑÑвени маÑкеÑи.
ÐаÑо ваÑиÑÑ Ð±Ñой никога не ÑÑвпада Ñ Ð¿Ð°Ð½ÐµÐ»Ð° за коменÑаÑи на Acrobat
ÐÑвоÑеÑе маÑкиÑан Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ Ð²Ñв ваÑÐ¸Ñ Ð²Ð¸Ð·ÑализаÑÐ¾Ñ Ð¸ в Acrobat един до дÑÑг и обÑиÑÑ Ð±Ñой ÑÑдко Ñе ÑÑвпадне. Acrobat показва ÑилÑÑиÑан изглед: маÑкиÑовки, гÑÑпиÑани в ниÑки Ñ Ð¾ÑговоÑи, изÑкаÑаÑи пÑозоÑÑи, ÑгÑнаÑи в бележкиÑе, кÑм коиÑо пÑинадлежаÑ, без вÑÑзки и гÑаÑиÑни компоненÑи на ÑоÑмÑлÑÑи. ÐеобÑабоÑениÑÑ Ð¼Ð°Ñив ÑÑдÑÑжа вÑиÑко Ñова без ÑазгÑаниÑение, Ñака Ñе пÑоÑÑоÑо пÑебÑоÑване едновÑеменно завиÑава бÑÐ¾Ñ Ð² нÑкои аÑпекÑи и го занижава в дÑÑги.
ÐзÑкаÑаÑиÑе пÑозоÑÑи (Popups) ÑаздÑÐ²Ð°Ñ Ð¾Ð±ÑÐ¸Ñ Ð±Ñой, ÑÑй каÑо вÑÑка лепкава бележка Ñе доÑÑÐ°Ð²Ñ Ñ Ð¾Ñделен Ð¾Ð±ÐµÐºÑ Popup и бÑоенеÑо на дваÑа елеменÑа ÑдвоÑва бележкаÑа. ÐÑговоÑиÑе намалÑÐ²Ð°Ñ Ð±ÑоÑ, ако ÑилÑÑиÑаÑе по видими маÑкеÑи, ÑÑй каÑо оÑговоÑÑÑ Ðµ ÑекÑÑова аноÑаÑÐ¸Ñ Ð±ÐµÐ· ниÑо наÑиÑÑвано, докаÑо нÑкой не ÑазгÑне ниÑкаÑа, а пÑопÑÑканеÑо Ð¼Ñ Ð³Ñби диÑкÑÑиÑÑа.
ФлаговеÑе Hidden и NoView пÑÐµÐ¼Ð°Ñ Ð²Ð°Ñ Ð°Ð½Ð¾ÑаÑиÑÑа Ð¾Ñ ÐµÐºÑана, без да Ñ Ð¿ÑÐµÐ¼Ð°Ñ Ð²Ð°Ñ Ð¾Ñ Ð¼Ð°Ñива, Ñака Ñе бÑоенеÑо без оÑÑиÑане на ÑлаговеÑе вклÑÑва маÑкеÑи, коиÑо поÑÑебиÑелÑÑ Ð½Ðµ вижда. ÐноÑаÑииÑе за вÑÑзки (Link) Ñе намиÑÐ°Ñ Ð² ÑÑÑÐ¸Ñ Ð¼Ð°Ñив каÑо коменÑаÑиÑе и не пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ Ð½Ð¸Ñо кÑм бÑоÑ, ниÑо кÑм ÑпиÑÑка. ÐземеÑе ÑеÑение за пÑавилоÑо за бÑоене, пÑеди да напиÑеÑе ÑикÑла, и запиÑеÑе Ñова ÑеÑение, заÑоÑо вÑпÑоÑÑÑ âзаÑÐ?ваÑиÑÑ Ð¿Ð°Ð½ÐµÐ» показва ÑазлиÑно ÑиÑло Ð¾Ñ Acrobatâ?е пÑÑвиÑÑ ÑикеÑ, койÑо ÑÑнкÑиÑÑа за пÑеглед Ñе полÑÑи.
ÐндекÑиÑайÑе вÑиÑко веднÑж, Ñлед коеÑо никога не анализиÑайÑе повÑоÑно ÑÑÑаниÑа
Ðдно пÑавило за пÑоекÑиÑане ÑпÑавлÑва вÑиÑко, коеÑо Ñледва: ÑилÑÑиÑанеÑо по авÑоÑ, Ñип или ÑÑÑаниÑа никога не ÑÑÑбва да анализиÑа повÑоÑно обекÑиÑе на ÑÑÑаниÑаÑа. ÐÑи докÑÐ¼ÐµÐ½Ñ Ð¾Ñ 300 ÑÑÑаниÑи Ñ Ð¾Ð±Ð¸Ð»Ð½Ð¾ маÑкиÑане, повÑоÑноÑо анализиÑане пÑи вÑÑка пÑомÑна на падаÑоÑо Ð¼ÐµÐ½Ñ Ð¿ÑевÑÑÑа панела в неÑо, коеÑо забива за ÑекÑнди.
ÐомпоненÑÑÑ Ð¿Ñедлага AnnotationCount и индекÑиÑаноÑо ÑвойÑÑво Annotation[], каÑо и двеÑе Ñа огÑаниÑени до ÑекÑÑо заÑеденаÑа ÑÑÑаниÑа, а запиÑÑÑ TPdfAnnotation, койÑо Ñе вÑÑÑаÑ, ноÑи Ñова, Ð¾Ñ ÐºÐ¾ÐµÑо Ñе нÑждае ÑпиÑÑÑниÑÑ Ð¸Ð·Ð³Ð»ÐµÐ´: Subtype, Flags, Color, Rectangle, ContentsText, AuthorText. ÐÑавилниÑÑ Ñ
од е да обÑ
одиÑе вÑÑка ÑÑÑаниÑа веднÑж пÑи оÑваÑÑне на докÑменÑа и да поддÑÑжаÑе Ñвой ÑобÑÑвен плоÑÑк индекÑ:
procedure TReviewPanel.BuildIndex;
var
PageNo, i: Integer;
A: TPdfAnnotation;
begin
FItems.Clear;
for PageNo := 1 to Pdf.PageCount do
begin
Pdf.PageNumber := PageNo;
for i := 0 to Pdf.AnnotationCount - 1 do
begin
A := Pdf.Annotation[i];
// Keep reviewer-relevant subtypes only; record the page and
// index pair because all later edits are addressed by it
if A.Subtype in [anText, anHighlight, anInk] then
FItems.Add(TReviewItem.Create(PageNo, i,
A.AuthorText, A.ContentsText, A.Rectangle, A.Color));
end;
end;
end;
ÐвойкаÑа, коÑÑо Ñи ÑÑÑÑва да Ñе подÑеÑÑае, е (PageNo, i). ÐÑÑка ÑледваÑа пÑомÑна, незавиÑимо дали е пÑеоÑвеÑÑване или изÑÑиване, Ñе адÑеÑиÑа ÑÑез номеÑа на ÑÑÑаниÑаÑа плÑÑ Ð¸Ð½Ð´ÐµÐºÑа на аноÑаÑиÑÑа, а индекÑÑÑ Ðµ кÑеÑ
Ñк: пÑемаÑ
ванеÑо на аноÑаÑÐ¸Ñ Ð¿ÑеномеÑиÑа вÑиÑко Ñлед Ð½ÐµÑ Ð½Ð° Ñази ÑÑÑаниÑа. ÐаÑова планиÑайÑе да вÑзÑÑановиÑе запиÑиÑе на заÑегнаÑаÑа ÑÑÑаниÑа Ñлед вÑÑко изÑÑиване, вмеÑÑо да коÑигиÑаÑе индекÑниÑе номеÑа на мÑÑÑо. ÐÑзÑÑановÑванеÑо оÑнема милиÑекÑнда. Ðа Ñазлика Ð¾Ñ Ñова, оÑÑаÑелиÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¸Ð·ÑÑива коменÑаÑа на гÑеÑÐ½Ð¸Ñ ÑеÑензенÑ, коеÑо е вид бÑг, койÑо ÑÑива довеÑиеÑо в ÑÑлаÑа ÑÑнкÑиÑ.
ÐеÑаÑÑ Ð¸ÑноÑо ÑÑÑÑкÑÑÑиÑане на ниÑкиÑе (threading) заÑлÑжава мÑÑÑо в индекÑа, доÑи ако пÑÑваÑа ви веÑÑÐ¸Ñ Ñамо бÑои оÑговоÑиÑе, вмеÑÑо да ги показва. ÐÑÑпиÑайÑе елеменÑиÑе по ÑÑÑ Ð½Ð°Ñа ÑодиÑелÑка пÑепÑаÑка, докаÑо ÑÑÑаниÑаÑа е оÑвоÑена, Ñака Ñе панелÑÑ Ð¿Ð¾-кÑÑно да може да ÑгÑва ниÑкаÑа по наÑина, по койÑо го пÑави Acrobat. ÐÑзÑÑановÑванеÑо на Ñова гÑÑпиÑане пÑи пÑевÑÑÑане обезÑмиÑÐ»Ñ Ð¸Ð½Ð´ÐµÐºÑиÑанеÑо, ÑÑй каÑо оÑваÑÑ Ð¾Ñново ÑÑÑаниÑи, коиÑо веÑе Ñа били анализиÑани.
ÐеомеÑÑиÑÑа изиÑква ÑÑÑаÑа диÑÑиплина. СвойÑÑвоÑо Rectangle вÑв вÑеки Ð·Ð°Ð¿Ð¸Ñ Ðµ в кооÑдинаÑна ÑиÑÑема на ÑÑÑаниÑаÑа (page-space) и пÑеобÑазÑванеÑо Ð¼Ñ Ð² кооÑдинаÑи на изгледа ÑÑÑбва да Ñе извÑÑÑва в един Ñподелен помоÑен меÑод, а не да Ñе ÑазпÑÑÑква из ÑÐµÐ»Ð¸Ñ ÐºÐ¾Ð´. ÐанелиÑе пÑоÑвÑÐ²Ð°Ñ Ð±Ñгове Ñ ÐºÐ¾Ð¾ÑдинаÑиÑе, когаÑо ÑелекÑиÑÑа, ÑеÑÑÑÑ Ð·Ð° попадение (hit-testing) и изÑеÑÑаванеÑо Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ ÑобÑÑвена маÑемаÑика за маÑабиÑане и ÑоÑаÑиÑ; наÑоÑеÑе и ÑÑиÑе пÑез едно пÑеобÑазÑване и Ñогава маÑкиÑанеÑо, ÑедÑÑ Ð¼Ñ Ð² ÑпиÑÑка и ÑелÑа за ÑÑакване Ñе оÑÑÐ°Ð½Ð°Ñ ÑоÑно позиÑиониÑани.
ÐÑеоÑвеÑÑване на маÑкиÑанеÑо и огÑаниÑениеÑо на appearance-stream
ÐÑомÑнаÑа на маÑкиÑане Ð¾Ñ Ð¶ÑлÑо в кеÑ
либаÑено звÑÑи каÑо пÑоÑÑа задаÑа Ð¾Ñ ÐµÐ´Ð¸Ð½ Ñед, и понÑкога наиÑÑина е Ñака. УловкаÑа е в ÑÑандаÑÑа ISO 32000-1 §12.5.5. ÐогаÑо една аноÑаÑÐ¸Ñ Ð½Ð¾Ñи /AP поÑок за вÑнÑен вид (appearance stream), ÑÑвмеÑÑимиÑÑ Ð²Ð¸Ð·ÑализаÑÐ¾Ñ Ð¸Ð·ÑеÑÑава Ñози пÑедваÑиÑелно изгÑаден поÑок и ÑÑеÑиÑа запиÑа за ÑвÑÑ Ð² ÑеÑника каÑо неакÑивни меÑаданни. Acrobat запиÑва поÑоÑи за вÑнÑен вид за поÑÑи вÑиÑко, коеÑо ÑÑздава, Ñака Ñе повеÑеÑо аноÑаÑии, идваÑи Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñи, веÑе Ñа в Ñова ÑÑÑÑоÑние и ÑвеÑÑÑ, койÑо задаваÑе, никога не Ñе показва на екÑана. ÐÑеоÑвеÑÑванеÑо е пÑоÑÐµÑ Ð½Ð° ÑеÑене-пÑомÑна-Ð·Ð°Ð¿Ð¸Ñ ÑÑез ÑвойÑÑвоÑо Annotation[], а компоненÑÑÑ ÑигнализиÑа за Ñози конÑликÑ: когаÑо енджинÑÑ Ð¾Ñкаже да позволи на ÑвеÑа Ð¾Ñ ÑеÑника да замени вгÑÐ°Ð´ÐµÐ½Ð¸Ñ Ð²ÑнÑен вид, запиÑÑÑ Ð¿Ñедизвиква изклÑÑение EPdfError.
A := Pdf.Annotation[Item.Index];
A.HasColor := True;
A.Color := $0000B0FF; // amber
A.ColorAlpha := 160;
try
Pdf.Annotation[Item.Index] := A;
except
on EPdfError do
begin
// The annotation owns a pre-rendered /AP stream; the dictionary
// color alone cannot change what viewers paint
Item.AppearanceLocked := True;
StatusBar.SimpleText := 'Color is fixed by the annotation appearance';
end;
end;
ÐÑÐ¸Ñ Ð²Ð°ÑайÑе Ñова изклÑÑение вÑеки пÑÑ Ð¸ го ÑÑеÑиÑайÑе каÑо инÑоÑмаÑиÑ, а не каÑо гÑеÑка. Ðко пÑопÑÑнеÑе Ñази заÑиÑа, ваÑиÑÑ Ð¿Ð°Ð½ÐµÐ» Ñе показва ÐºÐµÑ Ð»Ð¸Ð±Ð°Ñен ÑвÑÑ Ð² ÑÐ²Ð¾Ñ ÑпиÑÑк, докаÑо ÑÑÑаниÑаÑа пÑодÑлжава да Ñе изобÑазÑва в жÑлÑо; ÑедмиÑи по-кÑÑно поÑÑебиÑелÑÑ Ñе изпÑаÑи оплакване, Ñе визÑализаÑоÑÑÑ Ð²Ð¸ игноÑиÑа ÑедакÑииÑе мÑ, а вие Ñе пÑекаÑаÑе ÑÑл Ñледобед в неÑÑпеÑни опиÑи да вÑзпÑоизведеÑе пÑоблема Ñ Ñайл, койÑо ÑлÑÑайно нÑма поÑок за вÑнÑен вид. След каÑо ÑазбеÑеÑе, Ñе вÑнÑниÑÑ Ð²Ð¸Ð´ е заклÑÑен, имаÑе два пÑавилни наÑина за ÑеакÑиÑ: пÑеоÑвеÑеÑе ÑобÑÑÐ²ÐµÐ½Ð¸Ñ Ñи Ñлой за ÑелекÑÐ¸Ñ Ð²Ð¼ÐµÑÑо аноÑаÑиÑÑа, Ñака Ñе ÑеÑензенÑÑÑ Ð¿Ð¾Ð½Ðµ да вижда избÑÐ°Ð½Ð¸Ñ Ð¾Ñ Ð½ÐµÐ³Ð¾ ÑвÑÑ, или маÑкиÑайÑе Ñеда каÑо заклÑÑен (appearance-locked), за да не оÑаква никой пÑомÑнаÑа да Ñе запази.
ÐзÑÑиване на аноÑаÑии без оÑÑавÑне на оÑÑаÑÑÑни Ñледи (ghosts)
DeleteAnnotation пÑемаÑ
ва обекÑа Ð¾Ñ Ð´ÑÑвоÑо на аноÑаÑииÑе на ÑекÑÑаÑа ÑÑÑаниÑа, но оÑÑÐ°Ð²Ñ ÐºÐµÑиÑÐ°Ð½Ð¸Ñ ÑаÑÑÐµÑ Ð½Ð° ÑÑÑаниÑаÑа непÑоменен. Ðко извÑÑÑиÑе изÑеÑÑаване веднага Ñлед повикванеÑо, изÑÑиÑоÑо маÑкиÑане вÑе оÑе Ñе бÑде на екÑана, намиÑайки Ñе в ÑаÑÑеÑно изобÑажение, коеÑо веÑе не ÑÑоÑвеÑÑÑва на модела на докÑменÑа зад него. РеÑениеÑо е да ÑÑеÑиÑаÑе повÑоÑноÑо изÑеÑÑаване каÑо ÑаÑÑ Ð¾Ñ Ð¸Ð·ÑÑиванеÑо, а не каÑо ÑÑÑпка, коÑÑо извикваÑиÑÑ Ð¼Ð¾Ð¶Ðµ да забÑави:
Pdf.PageNumber := Item.PageNo;
Pdf.DeleteAnnotation(Item.Index); // raises EPdfError on failure
Bmp := Pdf.RenderPage(0, 0, ViewWidth, ViewHeight, ro0, [reAnnotations]);
try
PaintPageBitmap(Bmp);
finally
Bmp.Free; // RenderPage hands bitmap ownership to the caller
end;
RebuildPageEntries(Item.PageNo); // indices after Item.Index shifted
Ðва деÑайла в Ñози блок леÑно Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ ÑгÑеÑени. ÐпÑиÑÑа reAnnotations ÑÑÑбва да пÑиÑÑÑÑва, в пÑоÑивен ÑлÑÑай новиÑÑ ÑаÑÑÐµÑ Ñе изгÑби вÑиÑки оÑÑанали аноÑаÑии и ÑÑÑаниÑаÑа Ñе изглежда Ñака, ÑÑÐºÐ°Ñ ÑÑе изÑÑили ÑÐµÐ»Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ Ð¾Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑи вмеÑÑо Ñамо един маÑкеÑ. ÐÑвен Ñова Bmp.Free е задÑлжиÑелно: ÑÑнкÑиÑÑа RenderPage пÑеÑ
вÑÑÐ»Ñ ÑобÑÑвеноÑÑÑа вÑÑÑ
Ñ ÑаÑÑеÑноÑо изобÑажение на извикваÑÐ¸Ñ ÐºÐ¾Ð´, Ñака Ñе липÑаÑа на оÑвобождаване изÑиÑа ÑаÑÑÐµÑ Ð½Ð° ÑÑла ÑÑÑаниÑа пÑи вÑÑко изÑÑиване, коеÑо пÑи ÑабоÑа Ñ Ð´ÑлÑг докÑÐ¼ÐµÐ½Ñ Ð±ÑÑзо Ñе доведе до ÑеÑиозен ÑазÑ
од на памеÑ.
ÐобавÑне на ÑеÑензенÑÑки маÑкеÑи Ð¾Ñ Ð²Ð°ÑÐ¸Ñ ÑобÑÑвен поÑÑебиÑелÑки инÑеÑÑейÑ
СÑздаванеÑо на аноÑаÑии пÑеминава пÑез CreateAnnotation, коÑÑо пÑиема попÑлнен Ð·Ð°Ð¿Ð¸Ñ TPdfAnnotation (подÑип, пÑавоÑгÑлник, ÑвÑÑ, ÑÑдÑÑжание, авÑоÑ) и го пÑикаÑва кÑм ÑекÑÑаÑа ÑÑÑаниÑа. ÐепкаваÑа бележка Ñ Ð¿Ð¾Ð´Ñип anText е леÑниÑÑ ÑлÑÑай: задаваÑе позиÑиÑÑа, ÑÑдÑÑжаниеÑо и авÑоÑа и ÑÑе гоÑови. ÐноÑаÑииÑе Ñ Ð¼Ð°ÑÑило (Ink) Ñа мÑÑÑоÑо, кÑдеÑо ÑазÑабоÑÑиÑиÑе ÑÑеÑÐ°Ñ ÑÑÑдноÑÑи. ÐÑавоÑгÑлникÑÑ Ð½Ð° запиÑа Ñамо огÑаниÑава ÑеÑÑежа; ÑамиÑе ÑÑиÑ
и Ñа маÑиви Ð¾Ñ ÑоÑки, коиÑо ÑÑÑбва да бÑÐ´Ð°Ñ Ð¿ÑикаÑени оÑделно ÑÑез повикване на ÑÑнкÑиÑÑа за ÑÑиÑ
и Ñ Ð¼Ð°ÑÑило на енджина FPDFAnnot_AddInkStroke Ñ Ð´Ð°Ð½Ð½Ð¸ FS_POINTF, заÑнеÑи Ð¾Ñ Ð¼Ð¸ÑкаÑа или пиÑалкаÑа ÑÑиÑ
по ÑÑиÑ
. Ðко изгÑадиÑе аноÑаÑÐ¸Ñ Ñ Ð¼Ð°ÑÑило Ñамо Ð¾Ñ Ð¿ÑавоÑгÑлник, Ñе полÑÑиÑе пÑазна дÑаÑканиÑа, коÑÑо Ñе ÑендеÑиÑа каÑо пÑазно пÑоÑÑÑанÑÑво, коеÑо изглежда каÑо бÑг в енджина, а вÑÑÑноÑÑ Ðµ наполовина завÑÑÑена аноÑаÑиÑ.
РеÑеÑе полиÑикаÑа за авÑоÑÑÑво веднага. ÐÑеки маÑкеÑ, киÑо ваÑиÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ ÑÑздава, ÑÑÑбва да ноÑи поÑÑоÑнен AuthorText, ÑÑй каÑо ÑилÑÑÑÑÑ Ð·Ð° ÑеÑензенÑи, койÑо Ñе изгÑадиÑе ÑледваÑÐ¸Ñ Ð¼ÐµÑеÑ, е Ñолкова добÑÑ, колкоÑо Ñа именаÑа, коиÑо поÑÑавÑÑе вÑÑÑ
Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑиÑе днеÑ. ÐÑазни или непоÑледоваÑелни авÑоÑÑки низове не Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ ÐºÐ¾ÑигиÑани ÑÑÑ Ð·Ð°Ð´Ð½Ð° даÑа, без да оÑваÑÑÑе оÑново вÑеки Ñайл.
ÐкÑпоÑÑиÑане на пÑегледа извÑн визÑализаÑоÑа
ÐанниÑе Ð¾Ñ Ð¿Ñегледа ÑÑÐ°Ð²Ð°Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¸, когаÑо Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° напÑÑÐ½Ð°Ñ Ð²Ð¸Ð·ÑализаÑоÑа под ÑоÑмаÑа на ÑезÑме, коеÑо ÑÑководиÑелÑÑ Ð½Ð° пÑоекÑа ÑеÑе без да оÑваÑÑ Ñайла, или на CSV Ñайл за пÑоÑледÑване. ÐкÑпоÑÑиÑайÑе Ð¾Ñ Ð¸Ð½Ð´ÐµÐºÑа, койÑо веÑе ÑÑе изгÑадили, а не Ð¾Ñ Ð½Ð¾Ð² анализ, и избеÑеÑе ÑÑабилен наÑин за пÑепÑаÑка кÑм вÑеки маÑкеÑ. ÐомеÑÑÑ Ð½Ð° ÑÑÑаниÑаÑа, ÑÑÑеÑан Ñ Ð¿ÑавоÑгÑлника на аноÑаÑиÑÑа, оÑелÑва пÑи пÑомени, пÑи коиÑо индекÑÑÑ Ð½Ð° маÑива Ñе гÑби, ÑÑй каÑо ÑледваÑоÑо изÑÑиване ÑÐ¸Ñ Ð¾ пÑеномеÑиÑа индекÑиÑе и ваÑиÑÑ CSV Ñайл запоÑва да ÑоÑи кÑм гÑеÑниÑе коменÑаÑи.
РедÑÑ, койÑо Ñи ÑÑÑÑва да Ñе запази, ÑÑдÑÑжа ÑÑÑаниÑаÑа, подÑипа, авÑоÑа, вÑемевоÑо клеймо за ÑÑздаване (когдаÑо е налиÑно вÑв Ñайла), ÑекÑÑа на ÑÑдÑÑжаниеÑо и колона за ÑÑаÑÑÑ, коÑÑо вие ÑпÑавлÑваÑе, а не пÑедоÑÑавена Ð¾Ñ PDF докÑменÑа. СÑÑиÑÑ Ð¸Ð½Ð´ÐµÐºÑен Ð¾Ð±Ñ Ð¾Ð´ е полезен и по-Ñано, пÑи пÑиемане на докÑменÑи, когаÑо докÑменÑÑÑ Ð¿ÑиÑÑига оÑвÑн и иÑкаÑе да ÑазбеÑеÑе какво ÑÑдÑÑжа, пÑеди нÑкой да го пÑегледа. СÑаÑиÑÑа за ÑабоÑнаÑа ÑÑеда за пÑиемане на PDF опиÑва Ñова ÑоÑÑиÑане, а ÑÑаÑиÑÑа за навигаÑиÑÑа в полеÑа на ÑоÑмÑлÑÑи Ñазглежда Ð¾Ð³Ð»ÐµÐ´Ð°Ð»Ð½Ð¸Ñ Ð¿Ñоблем: пÑеглед на докÑменÑи, ÑÑздадени за ÑÑбиÑане на данни, а не за коменÑаÑи.
Ðдин ÑлÑÑай, койÑо маÑивÑÑ Ð½Ñма да ви покаже
Ðдин Ð¾Ñ ÑÑенаÑииÑе за неÑÑпеÑ
заÑлÑжава да бÑде оÑбелÑзан, ÑÑй каÑо изглежда каÑо деÑÐµÐºÑ Ð²Ñв ваÑÐ¸Ñ ÐºÐ¾Ð´, но не е. ÐоÑÑебиÑел ÑÑобÑава за видими маÑкиÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ ÑÑлаÑа ÑÑÑаниÑа, но ваÑиÑÑ Ð¿Ð°Ð½ÐµÐ» не показва ниÑо, а AnnotationCount вÑÑÑа нÑла. ÐбиÑайноÑо обÑÑнение е, Ñе маÑкиÑаниÑÑа Ñа били ÑлÑÑи (flattened) нÑкÑде по веÑигаÑа. СливанеÑо вгÑажда вÑнÑÐ½Ð¸Ñ Ð²Ð¸Ð´ на аноÑаÑииÑе в обикновеноÑо ÑÑдÑÑжание на ÑÑÑаниÑаÑа, Ñака Ñе маÑкиÑаниÑÑа ÑÑÐ°Ð²Ð°Ñ ÑаÑÑ Ð¾Ñ Ð³ÑаÑикиÑе на ÑÑÑаниÑаÑа и ÑпиÑÐ°Ñ Ð´Ð° ÑÑÑеÑÑвÑÐ²Ð°Ñ ÐºÐ°Ñо обекÑи на аноÑаÑии. Ðе оÑÑава ниÑо, коеÑо API за аноÑаÑии да избÑои, пÑеоÑвеÑи или изÑÑие. ÐогаÑо видиÑе изÑиÑÑвано маÑкиÑане пÑи нÑлев бÑой, ÑпÑеÑе да ÑÑÑÑиÑе гÑеÑка вÑв ваÑÐ¸Ñ ÑикÑл за избÑоÑване и попиÑайÑе как е бил ÑÑздаден ÑайлÑÑ.
ÐÑиложниÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð·Ð° аноÑаÑии, използван ÑÑк (Ð¾Ñ Ð¸Ð·Ð±ÑоÑване и ÑÑздаване до пÑеоÑвеÑÑване, изÑÑиване и опÑии за ÑендиÑане, коиÑо поддÑÑÐ¶Ð°Ñ Ð´Ð¸ÑÐ¿Ð»ÐµÑ Ð²ÐµÑен), Ñе доÑÑÐ°Ð²Ñ Ñ PDFium Component за Delphi, C++Builder, and Lazarus/FPC.