ТÑи ÑазлиÑни ÑаÑÑеÑни ÑдÑа Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° заÑедÑÑ ÐµÐ´Ð¸Ð½ и ÑÑÑ PDF докÑÐ¼ÐµÐ½Ñ Ð¸ да го Ð¿Ð¾ÐºÐ°Ð¶Ð°Ñ Ð¿Ð¾ ÑазлиÑен наÑин. ÐгÑаденоÑо ÑдÑо в PDFlibPas Ñе ÑазпÑоÑÑÑанÑва без допÑлниÑелни вÑнÑни Ñайлове и Ñе ÑпÑÐ°Ð²Ñ Ð¾ÑлиÑно Ñ Ð¸Ð·Ð¾Ð±ÑазÑванеÑо на вÑиÑко, коеÑо е и пÑиÑинаÑа да бÑде избÑано по подÑазбиÑане. Cairo пÑедлага ÑазлиÑна обÑабоÑка на пÑозÑаÑноÑÑ Ð¸ заглаждане (anti-aliasing) и обикновено Ñе избиÑа, когаÑо меки маÑки (soft masks) или Ñежими на ÑмеÑване (blend modes) не Ñе изобÑазÑÐ²Ð°Ñ Ð¿Ñавилно Ñ Ð´ÑÑги инÑÑÑÑменÑи. PDFium ÑÑдÑÑжа кода за ÑендеÑиÑане на Chrome, Ñака Ñе ÑÑÑаниÑа, коÑÑо изглежда пÑавилно в бÑаÑзÑÑ, обикновено Ñе изобÑазÑва добÑе и пÑез PDFium, но ÑÑеÑÑ ÑенаÑа на голÑм DLL Ñайл и ÑÑÑого ÑÑобÑазÑване Ñ Ð½ÐµÐ³Ð¾Ð²Ð°Ñа ÑазÑÑдноÑÑ. Ðикое Ð¾Ñ ÑÑиÑе ÑдÑа не е пеÑÑекÑно в обÑÐ¸Ñ ÑлÑÑай. ÐоÑекÑноÑÑÑа завиÑи Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð¸Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð¸ единÑÑвениÑÑ ÑигÑÑен наÑин да ÑазбеÑеÑе кое ÑдÑо Ñе ÑпÑÐ°Ð²Ñ Ð½Ð°Ð¹-добÑе Ñ Ð²Ð°ÑиÑе докÑменÑи е да ги ÑеÑÑваÑе и Ñ ÑÑиÑе.
Това налага ÑдÑоÑо за ÑендеÑиÑане да Ñе избиÑа по вÑеме на изпÑлнение на пÑогÑамаÑа, а не пÑи нейноÑо компилиÑане. PDFlibPas, PDF библиоÑекаÑа за Delphi и C++Builder Ð¾Ñ losLab, поÑÑÐ°Ð²Ñ ÑÑиÑе ÑдÑа зад един Ð¾Ð±Ñ Ð¸Ð½ÑеÑÑейÑ, Ñака Ñе избоÑÑÑ Ð¸Ð·Ð¸Ñква пÑомÑна Ñамо на едно ÑÑло ÑиÑло вмеÑÑо Ñложни клонове в кода. ÐÑиÑко оÑÑанало Ñе Ñвежда до безопаÑен Ð¸Ð·Ð±Ð¾Ñ Ð½Ð° ÑдÑо, пÑовеÑка кои ÑдÑа ÑÑдÑÑжа инÑÑалиÑанаÑа пÑогÑама и пÑедоÑвÑаÑÑване на Ñова наÑÑÑойкиÑе на ÑекÑÑаÑа задаÑа да повлиÑÑÑ Ð±ÐµÐ·ÑÑмно на ÑледваÑаÑа.
ТÑи ÑаÑÑеÑни ÑдÑа зад Ð¾Ð±Ñ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ Ð·Ð° извикване
ÐиблиоÑекаÑа номеÑиÑа ÑвоиÑе ÑдÑа. ЯдÑо 1 е вгÑадениÑÑ ÑендеÑÐµÑ Ð¿Ð¾ подÑазбиÑане, Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ Ð¾Ð¿Ñии за изглаждане на GDI+ под Windows. ЯдÑо 2 е Cairo, а ÑдÑо 3 - PDFium, каÑо и двеÑе Ñе избиÑÐ°Ñ Ð¿Ð¾ вÑеме на изпÑлнение ÑÑез SelectRenderer. ÐвеÑе вÑнÑни ÑдÑа Ñе заÑÐµÐ¶Ð´Ð°Ñ Ð¾Ñ DLL библиоÑеки, ÑииÑо пÑÑиÑа задаваÑе ÑÑез SetCairoFileName и SetPDFiumFileName пеÑед избоÑа им. ÐезавиÑимо кое ÑдÑо е акÑивно, опеÑаÑииÑе пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð¿Ñез еднакви извикваниÑ: RenderPageToFile, RenderPageToStream, RenderDocumentToFile. СмÑнаÑа на ÑдÑа изиÑква пÑомÑна Ñамо на едно ÑиÑло; оÑÑаналаÑа ÑаÑÑ Ð¾Ñ ÐºÐ¾Ð´Ð° ви не Ñе пÑоменÑ.
СпиÑÑкÑÑ Ð¾Ñ Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ ÑоÑмаÑи Ñе пÑоÑÑиÑа Ð´Ð°Ð»ÐµÑ Ð¾ÑвÑд ÑаÑÑеÑниÑе изобÑажениÑ. ÐлаÑÑÑ Ð½Ð° ÑендеÑеÑа поддÑÑжа меÑаÑайлове (WMF, EMF, EMF+), EPS, диÑекÑни конÑекÑÑи на ÑÑÑÑойÑÑва (device contexts), пÑинÑеÑи и HTML5, каÑо Cairo и PDFium Ñе поÑвÑÐ²Ð°Ñ ÐºÐ°Ñо допÑлниÑелни Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ Ñели Ñамо когаÑо Ñа вклÑÑени пÑи компилаÑиÑÑа. РаÑÑеÑниÑÑ Ð¸Ð·Ñ Ð¾Ð´ е мÑÑÑоÑо, кÑдеÑо ÑÑиÑе ÑдÑа Ñе ÑазлиÑÐ°Ð²Ð°Ñ Ð½Ð°Ð¹-видимо, заÑова пÑимеÑиÑе ÑÑк Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ ÑаÑÑеÑни изобÑажениÑ.
Ðикога не пÑиемайÑе, Ñе дадено ÑдÑо е налиÑно: ÑеÑÑвайÑе пÑи ÑÑаÑÑиÑане
Cairo и PDFium Ñа ÑÑнкÑии за ÑÑловна компилаÑиÑ, коеÑо ознаÑава, Ñе дадена пÑогÑама може да бÑде компилиÑана напÑлно без ÑÑÑ
. ÐогаÑо Ñова Ñе ÑлÑÑи, заÑвкаÑа за използване на ÑдÑо 2 или 3 нÑма да пÑедизвика изклÑÑение. ÐеÑодÑÑ SelectRenderer пÑоÑÑо Ñе вÑÑне ÑÑойноÑÑ, ÑазлиÑна Ð¾Ñ Ð¿Ð¾Ð¸ÑÐºÐ°Ð½Ð¸Ñ ID, а кодÑÑ, койÑо игноÑиÑа вÑÑнаÑаÑа ÑÑойноÑÑ, Ñе пÑодÑлжи да ÑендеÑиÑа Ñ Ð´Ð¾Ñега акÑивноÑо ÑдÑо. ÐаÑиÑаÑа ÑÑеÑÑ Ñова е ÑеÑÑ Ð¿Ñи ÑÑаÑÑиÑане на пÑогÑамаÑа, койÑо изиÑква вÑÑко ÑдÑо да Ñе иденÑиÑиÑиÑа и запиÑва ÑезÑлÑаÑа:
function ProbeEngines(PDF: TPDFlib): string;
begin
Result := 'built-in'; // engine 1 is always present
if (PDF.SetCairoFileName('cairo.dll') = 1) and (PDF.SelectRenderer(2) = 2) then
Result := Result + ', cairo';
if (PDF.SetPDFiumFileName('pdfium.dll') = 1) and (PDF.SelectRenderer(3) = 3) then
Result := Result + ', pdfium';
PDF.SelectRenderer(1); // restore the default before real work
end;
ÐзпÑлнеÑе Ñози ÑеÑÑ Ð²ÐµÐ´Ð½Ñж пÑи ÑÑаÑÑиÑане и запиÑеÑе ÑезÑлÑаÑа в дневника (log) до вÑÑка задаÑа за ÑендеÑиÑане. Ðай-ÑеÑÑиÑÑ Ð²ÑпÑоÑ, когаÑо ÐºÐ»Ð¸ÐµÐ½Ñ ÑÑобÑи за Ñазлика пÑи изобÑазÑванеÑо, е кои ÑдÑа дейÑÑвиÑелно Ñа налиÑни в неговаÑа инÑÑалаÑиÑ, а налиÑиеÑо на Ñази инÑоÑмаÑÐ¸Ñ Ð² дневника ÑеÑава вÑпÑоÑа веднага, без необÑ
одимоÑÑ Ð¾Ñ ÑеÑÐ¸Ñ Ð·Ð° оÑдалеÑен доÑÑÑп. Ðолезен ÑÑÑаниÑен еÑекÑ: ако ÑамаÑа ÑÑнкÑÐ¸Ñ SetPDFiumFileName вÑÑне 0, веÑе знаеÑе, Ñе пÑоблемÑÑ Ðµ в DLL Ñайла (гÑеÑен пÑÑ, ÑазÑÑдноÑÑ Ð¸Ð»Ð¸ липÑваÑа завиÑимоÑÑ), а не в липÑаÑа на PDFium поддÑÑжка пÑи компилаÑиÑÑа на бинаÑÐ½Ð¸Ñ Ñайл, ÑÑй каÑо опÑеделÑнеÑо на пÑÑÑ Ñе е пÑовалило оÑе пÑеди ÑÑаÑÑиÑанеÑо на SelectRenderer.
ÐеÑÐµÑ Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ ÑоÑмаÑа зад едно ÑÑло ÑиÑло в Options
ÐаÑамеÑÑÑÑÑ Options пÑи извикваниÑÑа за ÑендеÑиÑане опÑÐµÐ´ÐµÐ»Ñ Ð¸Ð·Ñ
Ð¾Ð´Ð½Ð¸Ñ ÑоÑмаÑ: 0 е BMP, 1 - JPEG, 2 - WMF, 3 - EMF, 4 - EPS, 5 - PNG, 6 - GIF, 7 - TIFF, 8 - EMF+ и 9 - HTML5. PNG (5) е логиÑниÑÑ Ð¸Ð·Ð±Ð¾Ñ Ð¿Ð¾ подÑазбиÑане за визÑализаÑÐ¸Ñ Ð¸ аÑÑ
ивни изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑÑаниÑи. JPEG (1), комбиниÑан ÑÑÑ SetJPEGQuality, е по-добÑиÑÑ Ð¸Ð·Ð±Ð¾Ñ Ð·Ð° ÑканиÑани Ñнимки, кÑдеÑо ÑазмеÑÑÑ Ð½Ð° Ñайла е по-важен Ð¾Ñ Ð¾ÑÑÑиÑе конÑÑÑи.
Ðдин Ð¾Ñ ÑоÑмаÑиÑе ÑÑдÑÑжа ÑкÑиÑо изиÑкване кÑм Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð¾Ñок. BMP ÑоÑмаÑÑÑ Ð·Ð°Ð¿Ð¸Ñва пÑÑво изобÑажениеÑо, Ñлед коеÑо Ñе вÑÑÑа на оÑмеÑÑване 0x26, за да коÑигиÑа полеÑаÑа за ÑазделиÑелна ÑпоÑобноÑÑ Ð² заглавнаÑа ÑаÑÑ. Ðко наÑоÑиÑе Ñова кÑм поÑок, койÑо поддÑÑжа Ñамо пÑевÑÑÑане напÑед (каÑо компÑеÑиÑан поÑок или мÑежов ÑокеÑ), извикванеÑо Ñе Ñе пÑовали по наÑин, койÑо изглежда каÑо ÑиÑÑемна гÑеÑка в ÑдÑоÑо, но не е. ÐогаÑо не можеÑе да избегнеÑе поÑок без поддÑÑжка на пÑоизволен доÑÑÑп, ÑендеÑиÑайÑе в PNG или пÑекаÑайÑе BMP данниÑе пÑез поÑок в памеÑÑа (memory stream) и ги копиÑайÑе напÑед Ñлед завÑÑÑванеÑо им.
ÐодаденаÑа ÑÑойноÑÑ Ð·Ð° DPI не е полÑÑенаÑа ÑазделиÑелна ÑпоÑобноÑÑ
ÐÑÑко извикване за ÑендеÑиÑане пÑиема аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð° DPI, но ÑеалнаÑа ÑазделиÑелна ÑпоÑобноÑÑ Ð½Ð° изÑ
ода е Ñази ÑÑойноÑÑ, Ñмножена по Ð³Ð»Ð¾Ð±Ð°Ð»Ð½Ð¸Ñ Ð¼Ð°Ñаб на ÑендеÑиÑане. СвойÑÑвоÑо SetRenderScale запова Ð¾Ñ 1.0 и Ñлед каÑо го пÑомениÑе, новиÑÑ ÐºÐ¾ÐµÑиÑÐ¸ÐµÐ½Ñ Ñе пÑилага безÑÑмно кÑм вÑÑко ÑледваÑо извикване за Ñази инÑÑанÑиÑ:
PDF.SetRenderScale(2.0); // every later render is doubled
PDF.RenderPageToFile(150, 1, 5, 'p1.png'); // effectively 300 DPI
PDF.SetRenderScale(1.0); // reset, or your thumbnails arrive huge
СÑÑоÑо запазване на ÑÑÑÑоÑниеÑо Ñе оÑнаÑÑ Ð·Ð° SetRenderCropType и наÑÑÑойкиÑе за каÑеÑÑво на JPEG. Ð ÑÑлÑга, коÑÑо генеÑиÑа миниаÑÑÑи (thumbnails), визÑализаÑии и изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð·Ð° пеÑÐ°Ñ Ð¾Ñ ÐµÐ´Ð½Ð° Ñподелена инÑÑанÑиÑ, именно Ñези оÑÑанали наÑÑÑойки водÑÑ Ð´Ð¾ Ð¾Ð¿Ð»Ð°ÐºÐ²Ð°Ð½Ð¸Ñ Ð¾Ñ Ñипа "миниаÑÑÑиÑе изведнÑж ÑÑанаÑ
а по 40 MB". Ðма два леÑни наÑина за ÑеÑаване на пÑоблема: нÑлиÑайÑе ÑÑоÑвеÑниÑе паÑамеÑÑи в наÑалоÑо на вÑÑка опеÑаÑÐ¸Ñ Ð¸Ð»Ð¸ използвайÑе оÑделна инÑÑанÑÐ¸Ñ Ð·Ð° вÑеки пÑоÑил на изÑ
одниÑе данни, за да не Ñе допÑÑка ÑмеÑване на паÑамеÑÑиÑе.
ÐаÑÑÑойка на вгÑаденоÑо ÑдÑо пÑеди Ð¸Ð·Ð±Ð¾Ñ Ð½Ð° дÑÑго
ÐзненадваÑо голÑма ÑаÑÑ Ð¾Ñ Ð·Ð°ÑвкиÑе за използване на дÑÑго ÑдÑо вÑÑÑноÑÑ Ñе дÑÐ»Ð¶Ð°Ñ Ð½Ð° непÑавилни наÑÑÑойки. ÐгÑадениÑÑ ÑендеÑÐµÑ ÑазкÑива поведениеÑо Ñи на изглаждане ÑÑез SetGDIPlusOptions и ÑамилиÑÑа наÑÑÑойки SetRenderOptions, а SetGDIPlusFileName ви позволÑва да го наÑоÑиÑе кÑм ÑпеÑиÑиÑна ÑÑеда за изпÑлнение на GDI+, ако ÑÑедаÑа на внедÑÑване ÑÑдÑÑжа необиÑайна веÑÑиÑ. ÐакÑÑани линии пÑи ниÑÑк DPI, замÑглен ÑекÑÑ Ð² миниаÑÑÑиÑе, ÑÑÑпаловидни гÑадиенÑи: вÑиÑко Ñова Ñе коÑигиÑа ÑÑез Ñези наÑÑÑойки, каÑо използванеÑо им не оÑкÑпÑва инÑÑалаÑÐ¸Ð¾Ð½Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ. Ðа Ñазлика Ð¾Ñ Ñова, добавÑнеÑо на Cairo или PDFium изиÑква ÑазпÑоÑÑÑанение на допÑлниÑелни DLL Ñайлове, Ñледене на ÑазÑÑдноÑÑÑа на Ñ
оÑÑа и Ð°Ð½Ð³Ð°Ð¶Ð¸Ð¼ÐµÐ½Ñ Ð·Ð° ÑÑÑ
наÑа поддÑÑжка и акÑÑализаÑиÑ.
ÐаÑова оплакваниÑÑа за каÑеÑÑво Ð¸Ð¼Ð°Ñ ÐµÑÑеÑÑвен Ñед на анализ. ÐÑÑво вÑзпÑоизведеÑе пÑоблема пÑи ÑоÑниÑе паÑамеÑÑи за DPI и маÑаб на клиенÑа, ÑÑй каÑо в половинаÑа Ð¾Ñ ÑлÑÑаиÑе ÑазликаÑа изÑезва пÑи еднакви паÑамеÑÑи. След Ñова опиÑайÑе опÑииÑе за изглаждане на вгÑаденоÑо ÑдÑо. Ðдва Ñлед Ñова ÑÑавнеÑе изобÑазÑванеÑо на ÑÑÑаниÑаÑа пÑи ÑÑиÑе ÑдÑа Ñ ÑикÑиÑани дÑÑги пÑоменливи: ÑендеÑиÑайÑе Ñ Ð² PNG пÑез ÑдÑа 1, 2 и 3 пÑи еднакÑв DPI и ги ÑÑавнеÑе. Ðбикновено две Ð¾Ñ ÑÑиÑе ÑдÑа Ð´Ð°Ð²Ð°Ñ ÐµÐ´Ð½Ð°ÐºÑв ÑезÑлÑÐ°Ñ Ð¸ Ñова мнозинÑÑво ви показва дали изклÑÑениеÑо Ñе дÑлжи на ÑпеÑиÑиÑна инÑеÑпÑеÑаÑÐ¸Ñ Ð½Ð° докÑменÑа или на непÑавилни оÑÐ°ÐºÐ²Ð°Ð½Ð¸Ñ Ð¾Ñ Ð²Ð°Ñа ÑÑÑана. ТÑи Ñеални изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑеÑÐ°Ð²Ð°Ñ ÑпоÑове за лоÑо изобÑазÑване много по-бÑÑзо Ð¾Ñ Ð²ÑÑкакви ÑекÑÑови опиÑаниÑ.
ÐеÑига Ð¾Ñ ÑезеÑвни ваÑианÑи Ñ Ð¾ÑÑиÑане на гÑеÑкиÑе
След каÑо ÑеÑÑÑÑ Ð·Ð° налиÑноÑÑ Ð¸ изÑиÑÑванеÑо на наÑÑÑойкиÑе Ñа ÑеализиÑани, ÑамаÑа веÑига Ð¾Ñ ÑезеÑвни ваÑианÑи е кÑаÑка. ÐÑкÑиванеÑо на гÑеÑка ÑазÑиÑа на ÑвойÑÑвоÑо LastRenderError, коеÑо ÑÑÑ
ÑанÑва ÑÑобÑениеÑо за гÑеÑка Ð¾Ñ Ð¿Ð¾ÑледноÑо ÑендеÑиÑане и е пÑазно пÑи ÑÑпеÑ
:
procedure RenderPageWithFallback(PDF: TPDFlib; Page: Integer; const OutFile: string);
begin
PDF.SelectRenderer(1); // built-in first
PDF.RenderPageToFile(200, Page, 5, OutFile); // 5 = PNG
if PDF.LastRenderError = '' then Exit;
LogEngineFailure('built-in', Page, PDF.LastRenderError);
if PDF.SelectRenderer(3) = 3 then // PDFium as the heavy fallback
begin
PDF.RenderPageToFile(200, Page, 5, OutFile);
if PDF.LastRenderError = '' then Exit;
LogEngineFailure('pdfium', Page, PDF.LastRenderError);
end;
raise Exception.CreateFmt('Page %d failed on all available engines', [Page]);
end;
Ðва аÑÑ Ð¸ÑекÑÑÑни деÑайла Ñа важни ÑÑк. ÐеÑигаÑа запиÑва заÑо Ñе е ÑлÑÑило пÑевклÑÑванеÑо, ÑÑй каÑо Ñед в дневника каÑо "Ñази ÑÑÑаниÑа пÑемина кÑм PDFium Ñлед веÑÑÐ¸Ñ 3.7" е важен Ñигнал за ÑегÑеÑиÑ, койÑо ÑÑÑбва да Ñе пÑоÑледÑва в ÑиÑÑемаÑа за мониÑоÑинг. СамиÑÑ Ñед на пÑевклÑÑване е избоÑ, койÑо Ñе пÑави ÑпÑÑмо наÑоваÑванеÑо. ÐгÑаденоÑо ÑдÑо Ñе ÑазпÑоÑÑÑанÑва без допÑлниÑелни библиоÑеки, коеÑо го пÑави оÑлиÑен пÑÑви Ð¸Ð·Ð±Ð¾Ñ Ð·Ð° повеÑеÑо инÑÑалаÑии, докаÑо докÑменÑи ÑÑÑ Ñложна пÑозÑаÑноÑÑ Ð¸Ð»Ð¸ ÑпеÑиÑиÑни Ñенки Ñа оÑновнаÑа пÑиÑина ÑазÑабоÑÑиÑиÑе да добавÑÑ Ð²ÑнÑни ÑдÑа. Ðикое ÑдÑо не е най-бÑÑзо в обÑÐ¸Ñ ÑлÑÑай, коеÑо е и ÑмиÑÑлÑÑ Ð¾Ñ Ð¸Ð·Ð±Ð¾Ñ Ð¿Ñи вÑÑко извикване: ÑеÑÑвайÑе вÑÑко ÑдÑо Ñ Ñеални докÑменÑи пÑи ÑеалниÑе паÑамеÑÑи на ваÑаÑа ÑиÑÑема и акÑÑализиÑайÑе Ñези измеÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñи подмÑна на DLL библиоÑекиÑе или пÑомÑна в Ñипа на докÑменÑиÑе. РеалниÑе Ñайлове Ñа най-добÑиÑÑ Ð°ÑгÑменÑ.
ÐÑвÑд оÑделниÑе ÑÑÑаниÑи: TIFF пакеÑи и конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво в Ñеално вÑеме
Ðве допÑлниÑелни ÑÑнкÑии допÑÐ»Ð²Ð°Ñ Ð¸Ð½ÑÑÑÑменÑиÑе за ÑендеÑиÑане. RenderAsMultipageTIFFToFile ÑендеÑиÑа диапазон Ð¾Ñ ÑÑÑаниÑи диÑекÑно в многоÑÑÑаниÑен TIFF Ñайл, коеÑо е ÑÑандаÑÑниÑÑ ÑоÑÐ¼Ð°Ñ Ð·Ð° пÑеÑ
вÑÑлÑне на данни кÑм по-ÑÑаÑи ÑиÑÑеми за ÑпÑавление на докÑменÑи. RenderPageToDC изобÑазÑва ÑÑÑаниÑаÑа диÑекÑно вÑÑÑ
Ñ Windows конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво (device context) за конÑÑоли за визÑализаÑиÑ, каÑо Ñе ÑпÑавлÑва Ð¾Ñ ÑÑи наÑÑÑойки (SetRenderDCOffset, SetRenderDCErasePage и Ñипа изÑÑзване), коиÑо изиÑÐºÐ²Ð°Ñ ÑÑÑоÑо нÑлиÑане, какÑо и маÑабÑÑ. ÐÑегледÑÑ Ð½Ð° екÑана и пеÑаÑÑÑ ÑÑдÑÑÐ¶Ð°Ñ ÑпеÑиÑиÑни оÑобеноÑÑи, коиÑо Ñа Ñазгледани в оÑделна ÑÑаÑÐ¸Ñ Ð¿Ð¾-долÑ.
ÐÑм какво да пÑеминеÑе наÑаÑÑк
Ðолезен навик: ÑÑй каÑо избоÑÑÑ Ð½Ð° SelectRenderer Ñе пÑилага кÑм вÑÑко ÑледваÑо извикване за инÑÑанÑиÑÑа, единиÑна ÑÑÑдна ÑÑÑаниÑа може да бÑде обÑабоÑена Ñ Ð´ÑÑго ÑдÑо, докаÑо оÑÑаналаÑа ÑаÑÑ Ð¾Ñ Ð´Ð¾ÐºÑменÑа Ñе изобÑазÑва Ñ ÑдÑоÑо по подÑазбиÑане. Ðа изобÑазÑване на пÑеглед, Ð¸Ð·Ð±Ð¾Ñ Ð½Ð° пÑинÑÐµÑ Ð¸ ÑпÑавление на DevMode пÑеминеÑе кÑм ÑÑаÑиÑÑа за пÑеглед на пеÑÐ°Ñ Ð¸ конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво. ÐогаÑо ÑендеÑиÑанеÑо Ñе извÑÑÑва в инÑензивни пÑоÑеÑи вÑÑÑ
Ñ Ð¼Ð½Ð¾Ð³Ð¾ големи Ñайлове, подÑ
одÑÑ Ñ Ð´ÐµÑкÑипÑоÑи Ð¾Ñ ÑÑководÑÑвоÑо за диÑекÑен доÑÑÑп Ñе ÑÑÑеÑава оÑлиÑно Ñ ÑендеÑиÑане на ниво ÑÑÑаниÑи ÑÑез DARenderPageToFile.
РазпÑоÑÑÑанениеÑо на ÑдÑаÑа, поддÑÑжаниÑе ÑоÑмаÑи и пÑобни веÑÑии Ñа опиÑани подÑобно на пÑодÑкÑоваÑа ÑÑÑаниÑа на PDFlibPas.