ФайлÑÑ Ñе оÑваÑÑ Ð±ÐµÐ·Ð¿Ñоблемно на ваÑÐ¸Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑÑ. Acrobat го визÑализиÑа, пÑедпеÑаÑниÑÑ Ð¿Ñеглед изглежда пÑавилен, вÑÑка ÑÑÑаниÑа е на мÑÑÑоÑо Ñи. След Ñова Ñой оÑива в пеÑаÑниÑаÑа или в аÑÑ
ивнаÑа ÑиÑÑема, коÑÑо пÑиема ваÑаÑа меÑеÑна паÑÑида, и Ñе вÑÑÑа оÑÑ
вÑÑлен: RGB изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² CMYK задаÑа, липÑа на клÑÑ /Trapped, изÑ
одно намеÑение (output intent), коеÑо не ÑÑоÑвеÑÑÑва на пеÑаÑнаÑа маÑина. Ðикой не е могÑл да види ниÑо неÑедно в докÑменÑа. ÐÑоблемÑÑ Ðµ неÑÑоÑвеÑÑÑвие Ñ Ð¾Ð¿Ñеделен пÑоÑил, койÑо е бил ÑеÑÑван нÑкÑде, кÑдеÑо вие не ÑÑе пÑиÑÑÑÑвали. ÐÑедпеÑаÑна пÑовеÑка (preflight) е ÑеÑминÑÑ Ð·Ð° Ñози ÑеÑÑ Ð² пеÑаÑнаÑа индÑÑÑÑиÑ, а ÑÑÑинÑкиÑÑ Ð²ÑпÑÐ¾Ñ Ðµ кÑде ÑÑÑбва да Ñе намиÑа Ñой, когаÑо PDF ÑайловеÑе Ñе генеÑиÑÐ°Ñ Ð¾Ñ ÑобÑÑÐ²ÐµÐ½Ð¸Ñ Ð²Ð¸ код в Delphi, а не Ð¾Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑÑа на дизайнеÑ.
HotPDF не пÑедлага ÑÑнкÑÐ¸Ñ Ð·Ð° пÑедпеÑаÑна пÑовеÑка, коÑÑо можеÑе да извикаÑе. ÐомпоненÑÑÑ ÑÑдÑÑжа пÑозоÑÐµÑ Ð·Ð° пÑедпеÑаÑен оÑÑÐµÑ Ð² ÑвоеÑо гÑаÑиÑно демо (GUI demo), но зад него нÑма пÑиложен пÑогÑамен инÑеÑÑÐµÐ¹Ñ (API), койÑо ÑÑлÑга или ÑкÑÐ¸Ð¿Ñ Ð·Ð° компилиÑане Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° задейÑÑваÑ. Ðко ÑвÑÑдим обÑаÑноÑо, Ñова би ви изпÑаÑило да ÑÑÑÑиÑе меÑод, койÑо не ÑÑÑеÑÑвÑва. Това звÑÑи каÑо липÑа, докаÑо не забележиÑе, Ñе за ÑайловеÑе, коиÑо генеÑиÑаÑе Ñами, извикванеÑо на валидаÑÐ¾Ñ Ð²ÑÑÑ Ñ ÑобÑÑвениÑе ви ÑезÑлÑаÑи Ñака или инаÑе е гÑеÑен Ð¿Ð¾Ð´Ñ Ð¾Ð´. Ðие веÑе конÑÑолиÑаÑе вÑÑко ÑвойÑÑво, коеÑо валидаÑоÑÑÑ Ð±Ð¸ пÑовеÑил. ÐолезноÑо Ñазделение е да напÑавиÑе генеÑаÑоÑа неÑпоÑобен да ÑÑздаде гÑеÑен Ñайл, а Ñлед Ñова да го докажеÑе Ñ Ð¸Ð½ÑÑÑÑменÑ, койÑо не е напиÑан Ð¾Ñ Ð²Ð°Ñ.
ÐаÑо пÑовеÑÑваÑе ÑобÑÑвениÑе Ñи Ñайлове по ÑазлиÑен наÑин
ТÑадиÑионнаÑа пÑедпеÑаÑна пÑовеÑка пÑедполага ÑÑжд Ñайл. СÑздаден Ð¾Ñ Ð½Ñкой дизайнеÑ, дÑÑго пÑиложение или ÑÑез непознаÑа веÑига Ð¾Ñ ÑедакÑии â?вие го пÑовеÑÑваÑе, заÑоÑо нÑмаÑе пÑедÑÑава какво има вÑÑÑе. ÐокÑменÑÑÑ, ÑÑздаден Ð¾Ñ Ð²Ð°ÑÐ¸Ñ ÐºÐ¾Ð´, не е непознаÑ. ÐгÑажданеÑо на ÑÑиÑÑове, ÑвеÑовоÑо пÑоÑÑÑанÑÑво, Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¾Ñо намеÑение, блокÑÑ Ñ Ð¼ÐµÑаданни: ваÑаÑа пÑогÑама е ÑеÑила вÑиÑко Ñова нÑколко милиÑекÑнди пÑеди ÑайлÑÑ Ð´Ð° бÑде запиÑан на диÑка. ÐÑовеÑÑванеÑо Ð¼Ñ Ñлед Ñова, за да оÑкÑиеÑе избоÑи, коиÑо ÑокÑ-Ñо ÑÑе напÑавили, е излиÑна ÑабоÑа. Ðо-икономиÑниÑÑ Ñ Ð¾Ð´ е да огÑаниÑиÑе Ñези избоÑи Ñака, Ñе неÑÑвмеÑÑим Ñайл никога да не бÑде ÑÑздаден.
Ðма и пÑиÑина, ÑвÑÑзана Ñ Ð´Ð¾ÑÑовеÑноÑÑÑа, поÑади коÑÑо пÑовеÑкаÑа ÑÑÑбва да бÑде вÑнÑна. ÐиблиоÑека, коÑÑо одобÑÑва ÑобÑÑвениÑе Ñи ÑезÑлÑаÑи, Ñама оÑенÑва изпиÑа Ñи. ÐогаÑо аÑÑ Ð¸Ð²Ð½Ð°Ñа ÑиÑÑема на ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸Ð»Ð¸ RIP пÑоÑеÑоÑÑÑ Ð½Ð° пеÑаÑниÑа оÑÑ Ð²ÑÑли ваÑÐ¸Ñ Ñайл, ÑвÑÑдениеÑо âнаÑиÑÑ?ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÐºÐ°Ð·Ð²Ð°, Ñе вÑиÑко е наÑедâ?нÑма никаква ÑежеÑÑ. РеÑениеÑо на veraPDF или Acrobat обаÑе има ÑежеÑÑ, ÑÑй каÑо дÑÑгаÑа ÑÑÑана използва ÑÑÑиÑе инÑÑÑÑменÑи.
ÐапÑавеÑе ÑÑоÑвеÑÑÑвиеÑо наÑÑÑойка, а не ÑпиÑÑк Ñ Ð·Ð°Ð´Ð°Ñи
СлоÑÑ Ð·Ð° пÑевенÑÐ¸Ñ Ðµ пÑоÑÑо конÑигÑÑаÑиÑ. ÐадайÑе PDFACompliance или PDFXCompliance пÑеди BeginDoc и HotPDF Ñе пÑиложи ÑÑоÑвеÑниÑе пÑавила за ÑÐµÐ»Ð¸Ñ Ð¿ÑоÑÐµÑ Ð½Ð° генеÑиÑане: он Ñе вгÑади ÑÑиÑÑовеÑе, Ñе Ñледи използванеÑо на DeviceRGB и DeviceCMYK ÑпÑÑмо деклаÑиÑаноÑо Ð¾Ñ Ð²Ð°Ñ Ð¸Ð·Ñ
одно намеÑение и Ñе оÑкаже ÑÑнкÑии, коиÑо пÑоÑилÑÑ Ð·Ð°Ð±ÑанÑва. ÐÑоÑивоÑеÑиÑÑа Ñе поÑвÑÐ²Ð°Ñ Ð¿Ñи EndDoc, кÑдеÑо заÑиÑиÑе за ÑÑоÑвеÑÑÑвие задейÑÑÐ²Ð°Ñ Ð¸Ð·ÐºÐ»ÑÑениÑ, вмеÑÑо ÑиÑ
омÑлком да изпÑаÑÑÑ Ñайл, койÑо Ñе Ñе ÑÑине по-наÑаÑÑк по веÑигаÑа. След каÑо ÑайлÑÑ Ð±Ñде запиÑан, ÑÑÑиÑе ÑвойÑÑва Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ ÐºÐ°ÐºÐ²Ð¾ дейÑÑвиÑелно е било пÑиложено, коеÑо е най-важниÑÑ ÑÐ°ÐºÑ Ð·Ð° лога на ваÑÐ¸Ñ Ð¿ÑоÑеÑ:
// After EndDoc: record the enforced profiles with the run metadata
if Pdf.PDFACompliance <> '' then
Log('Generated as PDF/A level ' + Pdf.PDFACompliance);
if Pdf.PDFXCompliance <> '' then
Log('Generated as PDF/X profile ' + Pdf.PDFXCompliance);
ÐоÑÑавеÑе Ñези Ñлагове на ÑÑÑÐ¸Ñ Ñед в лога, кÑдеÑо Ñа конÑÑолнаÑа ÑÑма (hash) на Ð²Ñ Ð¾Ð´ÑÑиÑе данни и веÑÑиÑÑа на HotPDF. РденÑ, в койÑо валидаÑоÑÑÑ Ð¸ ваÑиÑÑ Ð³ÐµÐ½ÐµÑаÑÐ¾Ñ Ñе ÑÐ°Ð·Ð¼Ð¸Ð½Ð°Ñ Ð·Ð° нÑкой Ñайл, Ñози Ñед Ñе ви каже кой Ñаблон го е ÑÑздал и ÐºÐ¾Ñ Ð²ÐµÑÑÐ¸Ñ Ð½Ð° библиоÑекаÑа е била заÑедена, а ÑпоÑÑÑ, койÑо инаÑе би ви оÑнел ÑÑл Ñледобед, Ñе ÑеÑава Ñ ÐµÐ´Ð½Ð¾ ÑÑÑÑене Ñ grep. ÐÐ·Ñ Ð¾Ð´Ð½Ð¸Ñе намеÑениÑ, ICC пÑоÑилиÑе и ÑаговеÑе, коиÑо ÑÑоÑÑ Ð·Ð°Ð´ Ñези Ñлагове, Ñа подÑобно опиÑани в ÑÑководÑÑвоÑо за PDF/A, PDF/X и PDF/UA Ð¸Ð·Ñ Ð¾Ð´ Ñ HotPDF.
ÐÑÑза пÑÑва пÑовеÑка за Ñайлове, коиÑо не ÑÑе генеÑиÑали
Ðе вÑеки пÑоÑÐµÑ Ð½Ð° обÑабоÑка е ÑиÑÑо генеÑаÑивен. ÐлиенÑиÑе каÑÐ²Ð°Ñ PDF Ñайлове, ÑкенеÑиÑе ги запиÑÐ²Ð°Ñ Ð² папка, паÑÑнÑоÑиÑе ги пÑикаÑÐ²Ð°Ñ ÐºÑм имейли. ÐÑеминаванеÑо на вÑеки един Ð¾Ñ Ñези Ñайлове пÑез пÑлен ÑÑÑÑкÑÑÑен валидаÑÐ¾Ñ Ð³Ñби вÑеме на опаÑкаÑа за Ñайлове, коиÑо доÑи нÑма да Ñе оÑвоÑÑÑ. Direct File API на HotPDF ÑеÑе доÑÑаÑÑÑно Ð¾Ñ ÑÑÑÑкÑÑÑаÑа на Ñайла, за да оÑговоÑи на вÑпÑоÑа âÑовÐ?изобÑо използваем PDF ли еâ? без да заÑежда ÑÑлоÑо дÑÑво на обекÑиÑе, коеÑо го пÑави оÑлиÑно ÑÑедÑÑво за бÑÑзо ÑилÑÑиÑане пÑи гÑеÑка (fail-fast):
function TriagePdf(Pdf: THotPDF; const FileName: string): Boolean;
var
Handle, Pages: Integer;
begin
Result := False;
Handle := Pdf.DAOpenFileReadOnly(FileName, '');
if Handle <= 0 then
Exit; // structurally unreadable: quarantine, do not validate
try
Pages := Pdf.DAGetPageCount(Handle);
Result := Pages > 0;
finally
Pdf.DACloseFile(Handle);
end;
end;
Ðва ÑакÑа за Ñози API опÑеделÑÑ ÐºÐ°Ðº да го обвиеÑе в кода Ñи. ÐÑекиÑÑ Ð¿ÑÑ Ñ Ð¸ÐºÐ¾Ð½Ð¾Ð¼Ð¸Ñ Ð½Ð° Ð¿Ð°Ð¼ÐµÑ Ð²Ð°Ð¶Ð¸ Ñамо за неÑиÑÑиÑани вÑ
одÑÑи данни. ÐÑедайÑе паÑола на DAOpenFileReadOnly и Ñой ÑиÑ
омÑлком Ñе пÑемине кÑм пÑлен анализ, Ñака Ñе Ñайл, за койÑо знаеÑе, Ñе е ÑиÑÑиÑан, ÑÑÑбва да бÑде пÑеминал пÑез DecryptFile до ÑиÑÑо ÑабоÑно копие пÑеди ÑилÑÑиÑанеÑо. ÐÑвен Ñова извикванеÑо на DAGetPageCount нÑма ÑмиÑÑл пÑи манипÑлаÑÐ¾Ñ (handle), койÑо не е оÑвоÑен ÑÑпеÑно, Ñака Ñе пÑовеÑкаÑа на манипÑлаÑоÑа оÑÑава ÑÑÑога и неположиÑелен ÑезÑлÑÐ°Ñ Ð¾Ð·Ð½Ð°Ñава оÑÑ
вÑÑлÑне, а не повÑоÑен опиÑ. ÐовеÑе за Ñези модели на ÑабоÑа можеÑе да пÑоÑеÑеÑе в ÑÑаÑиÑÑа за Direct File API за големи PDF ÑабоÑни пÑоÑеÑи.
veraPDF, инÑегÑиÑан каÑо ÑаÑÑ Ð¾Ñ Ð¿ÑоÑеÑа по компилиÑане
Ðа вÑеки Ñайл, за койÑо ÑвÑÑдиÑе, Ñе оÑговаÑÑ Ð½Ð° PDF/A или PDF/UA, veraPDF е Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑиÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¾Ñ Ð·Ð° инÑегÑаÑиÑ. Той ÑабоÑи без гÑаÑиÑен инÑеÑÑÐµÐ¹Ñ (headless), пÑиема паÑÑиди Ñайлове, генеÑиÑа XML или JSON и поÑоÑва вÑÑка гÑеÑка ÑÑез ÑÑоÑвеÑнаÑа ISO клаÑза. Така напÑÐ¸Ð¼ÐµÑ Ð³ÑеÑка в пÑавилоÑо ÑпÑÑмо ISO 19005-1 клаÑза 6.2.2 ви наÑоÑва диÑекÑно кÑм конкÑеÑна наÑÑÑойка на генеÑаÑоÑа, вмеÑÑо да ви оÑÑÐ°Ð²Ñ Ð´Ð° гадаеÑе. УпÑавлениеÑо Ð¼Ñ Ð¾Ñ Delphi е ÑÑандаÑÑен конÑÑол на пÑоÑеÑи:
function RunVeraPdf(const PdfFile, ReportFile: string): Cardinal;
var
Cmd: string;
SI: TStartupInfo;
PI: TProcessInformation;
begin
Cmd := Format('cmd /c verapdf.bat --format xml "%s" > "%s"',
[PdfFile, ReportFile]);
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
if not CreateProcess(nil, PChar(Cmd), nil, nil, False,
CREATE_NO_WINDOW, nil, nil, SI, PI) then
RaiseLastOSError;
try
WaitForSingleObject(PI.hProcess, 120000); // bound the wait per file
GetExitCodeProcess(PI.hProcess, Result);
finally
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
end;
end;
Този Ð»Ð¸Ð¼Ð¸Ñ Ð¾Ñ Ð²Ñеме (timeout) Ñи плаÑа ÑенаÑа. ÐовÑеден Ñайл може да блокиÑа вÑеки паÑÑÐµÑ Ð² ÑÑÑÑоÑние, Ð¾Ñ ÐºÐ¾ÐµÑо Ñой никога нÑма да излезе, а безкÑайноÑо изÑакване в пÑоÑÐµÑ Ð¾Ñ Ð¾Ð¿Ð°ÑкаÑа Ñе забави и оÑÑаналиÑе задаÑи. ÐгÑаниÑеÑе вÑемеÑо за изÑакване, задайÑе ÑобÑÑвен код за гÑеÑка пÑи пÑекÑÑване на вÑемеÑо и оÑÑавеÑе Ñайла наÑÑÑана за ÑÑÑна пÑовеÑка Ð¾Ñ Ñовек. ÐогаÑо анализиÑаÑе ÑезÑлÑаÑа, ÑеÑеÑе XML за иденÑиÑикаÑоÑи на пÑавила, а не за ÑекÑÑ, ÑеÑим Ð¾Ñ Ñ Ð¾Ñа. ÐденÑиÑикаÑоÑиÑе на пÑавилаÑа не Ñе пÑоменÑÑ Ð¿Ñи акÑÑализаÑии на валидаÑоÑа; ÑоÑмÑлиÑовкаÑа на ÑÑобÑениÑÑа Ñе пÑоменÑ, а ÑÑабилниÑÑ ÐºÐ¾Ð´ е неÑо, по коеÑо инженеÑÑÑ Ð¿Ð¾ поддÑÑжкаÑа може да ÑÑÑÑи в ÑÑаÑи ÑикеÑи.
ÐаÑинÑÑ, по койÑо изпÑлнÑваÑе паÑÑидаÑа, има ÑÑÑоÑо знаÑение каÑо Ñова дали вÑеки Ñайл пÑеминава пÑовеÑкаÑа ÑÑпеÑно. СÑаÑÑиÑайÑе по един пÑоÑÐµÑ Ð½Ð° Ñайл, а не един на паÑÑида, Ñака Ñе повÑеден Ð²Ñ Ð¾Ð´ÑÑ Ñайл да ви коÑÑва Ñамо неговоÑо вÑеме за изÑакване и ниÑо дÑÑго. ÐгÑаниÑеÑе бÑÐ¾Ñ Ð½Ð° пÑоÑеÑиÑе на валидиÑане до бÑÐ¾Ñ Ð½Ð° пÑоÑеÑоÑниÑе ÑдÑа, ÑÑй каÑо изгÑажданеÑо на XML оÑÑеÑа наÑоваÑва пÑоÑеÑоÑа, а ÑвÑÑде многоÑо пÑоÑеÑи Ñамо Ñе забавÑÑ ÑабоÑаÑа. ÐоÑÑавеÑе и гоÑен Ð»Ð¸Ð¼Ð¸Ñ Ð·Ð° ÑазмеÑа на Ð²Ñ Ð¾Ð´ÑÑиÑе Ñайлове, ÑÑй каÑо ÑканиÑана книга Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð²Ð° гигабайÑа Ñе блокиÑа опаÑкаÑа, незавиÑимо колко ÑÑÑпелив е паÑÑеÑÑÑ. ÐиÑо Ð¾Ñ Ñова не е пÑедпеÑаÑна пÑовеÑка в ÑÑÑÐ¾Ð³Ð¸Ñ ÑмиÑÑл на дÑмаÑа: Ñова е ÑазликаÑа Ð¼ÐµÐ¶Ð´Ñ ÑиÑÑема, коÑÑо издÑÑжа на меÑеÑноÑо наÑоваÑване, и Ñакава, коÑÑо бива изклÑÑена оÑе пÑÑваÑа ноÑ, когаÑо ÑпÑе ÑабоÑÐ½Ð¸Ñ Ð¿ÑоÑÐµÑ Ð² 2 ÑаÑа ÑÑÑÑинÑа.
PDF/X е мÑÑÑоÑо, кÑдеÑо Ñози Ð¿Ð¾Ð´Ñ Ð¾Ð´ има огÑаниÑениÑ. veraPDF не го валидиÑа, Ñака Ñе ÑабоÑеÑаÑа пÑовеÑка вÑе оÑе е Preflight в Acrobat Ñ Ð¿ÑоÑила по ISO 15930, поÑоÑен Ð¾Ñ Ð²Ð°ÑаÑа пеÑаÑниÑа. Acrobat изиÑква намеÑа Ð¾Ñ Ñовек, коеÑо ознаÑава вземане на пÑоби (sampling) вмеÑÑо пÑлно покÑиÑие: пÑÑвиÑÑ Ñайл Ð¾Ñ Ð½Ð¾Ð² Ñаблон плÑÑ Ð¼Ð°Ð»ÐºÐ° ÑлÑÑайна извадка Ð¾Ñ Ð²ÑÑка паÑÑида, докаÑо авÑомаÑизиÑанаÑа пÑовеÑка обÑабоÑва вÑиÑко, коеÑо може да Ñе мине без ÑовеÑка намеÑа. Ð ÑÑна пÑовеÑка на извадки, коÑÑо наиÑÑина Ñе извÑÑÑва, е по-добÑа Ð¾Ñ Ð¿Ñлно авÑомаÑизиÑане, коеÑо оÑÑава наполовина завÑÑÑено завинаги.
ÐÑÑеÑ, койÑо вÑе оÑе Ñе ви ÑÑÑбва Ñлед година
ÐаÑиÑаÑа Ñ Ð¿ÑедпеÑаÑна пÑовеÑка ноÑи ползи два пÑÑи. ÐÑÑво, когаÑо ÑпÑе повÑеден Ñайл на Ð²Ñ Ð¾Ð´Ð°, и вÑоÑи пÑÑ Ð¼Ð½Ð¾Ð³Ð¾ по-кÑÑно, когаÑо нÑкой попиÑа заÑо конкÑеÑен Ñайл е бил допÑÑнаÑ. Този вÑоÑи Ð¼Ð¾Ð¼ÐµÐ½Ñ Ðµ Ñози, койÑо ÑÑÑбва да опÑедели ÑоÑмаÑа на оÑÑеÑа, ÑÑй каÑо оÑкÑдниÑÑ Ð¾ÑÑÐµÑ Ñе ви оÑÑави без доказаÑелÑÑва. Ðа вÑеки пÑовеÑен Ñайл запазвайÑе конÑÑолнаÑа ÑÑма (hash) на Ð²Ñ Ð¾Ð´ÑÑиÑе данни, ÑлаговеÑе за ÑÑоÑвеÑÑÑвие на генеÑаÑоÑа и веÑÑиÑÑа на библиоÑекаÑа Ð¾Ñ ÑпоменаÑÐ¸Ñ Ð¿Ð¾-гоÑе Ñед в лога, имеÑо и веÑÑиÑÑа на валидаÑоÑа, пÑоÑила, ÑпÑÑмо койÑо е бил пÑовеÑен, инÑоÑмаÑиÑÑа за ÑÑÐ¿ÐµÑ Ð¸Ð»Ð¸ неÑÑÐ¿ÐµÑ Ð¸ иденÑиÑикаÑоÑиÑе на неÑÑпеÑниÑе пÑавила Ñ Ð½Ð¾Ð¼ÐµÑаÑа на ÑÑÑаниÑиÑе, когаÑо валидаÑоÑÑÑ Ð³Ð¸ пÑедоÑÑавÑ. СÑÑ ÑанÑвайÑе Ñози оÑÑÐµÑ Ð´Ð¾ Ñайла, койÑо опиÑва. Ðко го поÑÑавиÑе в оÑделна ÑиÑÑема, ÑÑ Ð²ÐµÑоÑÑно Ñе бÑде ÑпÑÑна Ð¾Ñ ÐµÐºÑплоаÑаÑÐ¸Ñ Ð¿Ñеди аÑÑ Ð¸Ð²Ð°, койÑо докÑменÑиÑа.
ÐзклÑÑениÑÑа ÑÑÑо ÑÑÑбва да бÑÐ´Ð°Ñ Ð´Ð¾ÐºÑменÑиÑани. ÐогаÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ð°ÑÑоÑва да изпÑаÑи Ñайл, койÑо пÑовеÑкаÑа оÑÑ Ð²ÑÑлÑ, ÑеÑениеÑо не е да ÑмекÑиÑе пÑавилаÑа за вÑиÑки. ÐапиÑеÑе кой е одобÑил Ñози Ñайл, на какви оÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ до ÐºÐ¾Ñ Ð´Ð°Ñа, Ñлед коеÑо пÑикаÑеÑе Ñова ÑазÑеÑение (waiver) кÑм Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ Ð¾ÑÑеÑ. РазÑеÑение Ñ Ð¸Ð¼Ðµ и ÑÑок е ÑеÑение, за коеÑо нÑкой ноÑи оÑговоÑноÑÑ. ÐÑовеÑка, коменÑиÑана в кода каÑо âвÑеменнаâ? е пÑоÑÑо инÑиденÑ, койÑо оÑаква ÑвоÑÑа даÑа.
ÐÑе един навик Ñе оÑплаÑа многокÑаÑно: когаÑо даден Ñайл Ñе пÑовали, копиÑайÑе го в папка за ÑегÑеÑионни ÑеÑÑове, пÑеди нÑкой да го е пÑоменил. ÐоÑÑи вÑеки пÑоблем Ñ Ð¿ÑедпеÑаÑна пÑовеÑка, койÑо Ñи ÑÑÑÑва да бÑде оÑÑÑÑанÑван, води наÑалоÑо Ñи Ð¾Ñ ÐµÐ´Ð¸Ð½ конкÑеÑен Ð²Ñ Ð¾Ð´ÑÑ Ñайл, а екипиÑе, коиÑо пазÑÑ Ñези Ñайлове, оÑÑÑÑанÑÐ²Ð°Ñ Ð¿Ð¾Ð²ÑоÑнаÑа поÑва за ÑаÑ, вмеÑÑо да ÑÐ°ÐºÐ°Ñ Ð¿ÑоблемÑÑ Ð´Ð° Ñе поÑви оÑново в пÑоизводÑÑвена ÑÑеда. СвойÑÑваÑа за ÑÑоÑвеÑÑÑвие и Direct File API, показани ÑÑк, Ñа ÑаÑÑ Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа HotPDF за Delphi и C++Builder, ÑиÑÑо докÑменÑаÑÐ¸Ñ Ð¾Ð¿Ð¸Ñва подÑобно вÑÑко извикване.