РендиÑанеÑо на PDF ÑÑÑаниÑа вÑÑÑ Ñ ÐºÐ¾Ð½ÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво (device context) на Windows за пÑедваÑиÑелен пÑеглед на пеÑÐ°Ñ ÑÑбиÑа ÑÑи кооÑдинаÑни ÑиÑÑеми в един и ÑÑÑ Ñед код, коиÑо ÑÑдко ÑÑвпадаÑ. PDF ÑÑÑаниÑаÑа Ñе измеÑва в ÑоÑки Ñ Ð½Ð°Ñало в Ð´Ð¾Ð»Ð½Ð¸Ñ Ð»Ñв ÑгÑл. ÐкÑанниÑÑ DC Ñе измеÑва в пикÑели Ñ Ð½Ð°Ñало в гоÑÐ½Ð¸Ñ Ð»Ñв ÑгÑл и коеÑиÑÐ¸ÐµÐ½Ñ Ð½Ð° маÑабиÑане по Ð²Ð°Ñ Ð¸Ð·Ð±Ð¾Ñ. DC на пÑинÑеÑа, койÑо пÑедваÑиÑелен пÑеглед ÑÑÑбва да пÑогнозиÑа, измеÑва пикÑелиÑе пÑи ÑазделиÑелнаÑа ÑпоÑобноÑÑ Ð½Ð° ÑÑÑÑойÑÑвоÑо, но поÑÑÐ°Ð²Ñ ÑвоеÑо наÑало в ÑгÑла на облаÑÑÑа за пеÑаÑ, а не в ÑгÑла на лиÑÑа. Ðко ÑгÑеÑиÑе нÑкое Ð¾Ñ Ñези неÑа, пÑедваÑиÑелниÑÑ Ð¿Ñеглед Ñе изглежда добÑе, докаÑо оÑпеÑаÑанаÑа ÑÑÑаниÑа Ñе излезе измеÑÑена, маÑабиÑана или изÑÑзана по нÑкой Ð¾Ñ ÑÑбовеÑе. ÐбиÑайниÑÑ ÑимпÑом е ÑоÑмÑлÑÑ Ñ Ñамка, койÑо Ñе показва ÑенÑÑиÑан пÑи пÑеглед, но Ñе оÑпеÑаÑва Ñ Ð¾ÑÑÑзани гоÑни и леви линии, ÑÑй каÑо лазеÑниÑÑ Ð¿ÑинÑÐµÑ Ð½Ðµ може да нанаÑÑ Ð¼Ð°ÑÑило в най-вÑнÑниÑе нÑколко милимеÑÑа, а никой не е ÑÑобÑил Ñова на модÑла за пÑедваÑиÑелен пÑеглед. losLab PDF Library (PDFlibPas) покÑива ÑÐµÐ»Ð¸Ñ Ñози пÑоÑÐµÑ Ñ Ð¿Ð¾Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° ÑендиÑане в конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво, конÑигÑÑаÑионен Ñлой за виÑÑÑален пÑинÑÐµÑ Ð¸ биÑмапи за пÑеглед, генеÑиÑани Ð¾Ñ ÑобÑÑвениÑе меÑÑики на пÑинÑеÑа, коеÑо пÑави пÑедваÑиÑÐµÐ»Ð½Ð¸Ñ Ð¿Ñеглед ÑоÑен по оÑноÑение на Ñези полеÑа.
ÐеомеÑÑиÑÑа на Ñ Ð°ÑÑиÑÑа не е геомеÑÑÐ¸Ñ Ð½Ð° пеÑаÑнаÑа облаÑÑ
ÐÑеки Ñелеви пÑинÑÐµÑ Ñе опиÑва Ð¾Ñ Ð´Ð²Ð° пÑавоÑгÑлника и оÑмеÑÑванеÑо Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ
е мÑÑÑоÑо, кÑдеÑо вÑÐ·Ð½Ð¸ÐºÐ²Ð°Ñ Ð¿Ð¾Ð²ÐµÑеÑо гÑеÑки пÑи пÑедваÑиÑÐµÐ»Ð½Ð¸Ñ Ð¿Ñеглед. ÐÑавоÑгÑлникÑÑ Ð½Ð° Ñ
аÑÑиÑÑа е ÑизиÑеÑкиÑÑ Ð»Ð¸ÑÑ. ÐÑавоÑгÑлникÑÑ Ð·Ð° пеÑÐ°Ñ Ðµ по-малкаÑа облаÑÑ, коÑÑо пеÑаÑаÑиÑÑ Ð¼ÐµÑ
анизÑм може дейÑÑвиÑелно да доÑÑигне, огÑаниÑена Ð¾Ñ Ñ
аÑдÑеÑно поле, коеÑо Ñе ÑазлиÑава ÑпоÑед модела на пÑинÑеÑа и понÑкога ÑпоÑед ÑаваÑа за Ñ
аÑÑиÑ. ÐеÑаÑаÑиÑÑ Ñлой на библиоÑекаÑа измеÑва и двеÑе. ÐазовиÑÑ ÐºÐ»Ð°Ñ TPLPrinter пÑедоÑÑÐ°Ð²Ñ ÑвойÑÑваÑа PageWidth и PageHeight за пеÑаÑаемаÑа облаÑÑ, FullPageWidth и FullPageHeight за ÑÐµÐ»Ð¸Ñ Ð»Ð¸ÑÑ, какÑо и PrintOffsetX Ñ PrintOffsetY за ÑазÑÑоÑниеÑо Ð¼ÐµÐ¶Ð´Ñ ÑеÑ
ниÑе наÑала, вÑиÑки в пикÑели на ÑÑÑÑойÑÑвоÑо пÑи ÑазделиÑелнаÑа ÑпоÑобноÑÑ, оÑÑеÑна Ð¾Ñ GetDPI. Ðдна коÑекÑна ÑÑнкÑÐ¸Ñ Ð·Ð° пÑедваÑиÑелен пÑеглед маÑабиÑа ÑÑÑиÑе Ñези ÑÑойноÑÑи до ÑазделиÑелнаÑа ÑпоÑобноÑÑ Ð½Ð° екÑана, вмеÑÑо да изÑеÑÑава ÑÑÑаниÑаÑа в какÑвÑо и да е пÑавоÑгÑлник, Ñ ÐºÐ¾Ð¹Ñо Ñазполага конÑÑолаÑа. Ðко пÑопÑÑнеÑе Ñази ÑÑÑпка, пÑедваÑиÑелниÑÑ Ð¿Ñеглед мÑлÑаливо Ñе пÑиеме нÑлева гÑаниÑа, коеÑо е ÑÑойноÑÑ, коÑÑо никой Ñеален пÑинÑÐµÑ Ð½Ðµ използва.
ÐÑедваÑиÑелен пÑеглед на екÑана ÑÑез RenderPageToDC
Ðа конÑÑола за пÑедваÑиÑелен пÑеглед на екÑана RenderPageToDC(DPI, Page, DC) ÑеÑÑае ÑÑÑаниÑа Ð¾Ñ Ð·Ð°ÑÐµÐ´ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð´Ð¸ÑекÑно вÑÑÑ
Ñ Ð¿Ñоизволен GDI конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво, незавиÑимо дали Ñова е плаÑно на TPaintBox, биÑмап в памеÑÑа или DC на меÑаÑайл. ÐÑгÑменÑÑÑ DPI опÑÐµÐ´ÐµÐ»Ñ Ð¼Ð°Ñаба. СÑойноÑÑ 96 ÑÑоÑвеÑÑÑва пÑиблизиÑелно на 100% изглед на клаÑиÑеÑки диÑплей, а ÑдвоÑванеÑо й ÑдвоÑва ÑазмеÑа на ÑендиÑане.
procedure TPreviewForm.PreviewBoxPaint(Sender: TObject);
begin
// these three are sticky library state, not per-call parameters:
FPdf.SetRenderDCOffset(FOffsetX, FOffsetY);
FPdf.SetRenderDCErasePage(1);
FPdf.SetRenderCropType(0);
FPdf.RenderPageToDC(FPreviewDpi, FCurrentPage, PreviewBox.Canvas.Handle);
end;
УловкаÑа е, Ñе пÑÑÑÑ Ð½Ð° ÑендиÑане на DC Ñе ÑпÑавлÑва Ð¾Ñ Ð·Ð°Ð¿Ð°Ð·Ð²Ð°Ñо Ñе ÑÑÑÑоÑние на библиоÑекаÑа, а не Ð¾Ñ Ð¿Ð°ÑамеÑÑи пÑи вÑÑко повикване. СвойÑÑваÑа SetRenderDCOffset, SetRenderDCErasePage и SetRenderCropType оÑÑÐ°Ð²Ð°Ñ Ð² Ñила, докаÑо неÑо не ги пÑомени, Ñака Ñе ÑикÑлÑÑ Ð·Ð° генеÑиÑане на миниаÑÑÑи, койÑо Ñе изпÑлнÑва Ñлед каÑо поÑÑебиÑелÑÑ Ðµ коÑигиÑал маÑаба, наÑледÑва оÑмеÑÑванеÑо или изÑÑзванеÑо Ð¾Ñ Ð¿ÑедиÑÐ½Ð¸Ñ ÐºÐ¾Ð´. СимпÑомÑÑ Ðµ пÑедваÑиÑелен пÑеглед, койÑо Ñе оÑмеÑÑва Ñамо пÑи опÑеделени навигаÑионни поÑледоваÑелноÑÑи, коеÑо е изклÑÑиÑелно ÑÑÑдно за вÑзпÑоизвеждане. ÐаÑÑÑойванеÑо на ÑÑлоÑо ÑÑоÑвеÑно ÑÑÑÑоÑние в наÑалоÑо на обÑабоÑÑика на ÑÑбиÑиеÑо за ÑеÑÑане, какÑо е показано по-гоÑе, не изиÑква допÑлниÑелни ÑеÑÑÑÑи и елиминиÑа ÑÐµÐ»Ð¸Ñ Ñози ÐºÐ»Ð°Ñ Ð¿Ñоблеми. Ðаблизо Ñе кÑие и вÑоÑи множиÑел. ÐÑекÑивнаÑа изÑ
одна ÑазделиÑелна ÑпоÑобноÑÑ Ðµ маÑабÑÑ Ð½Ð° ÑендиÑане, Ñмножен по аÑгÑменÑа DPI, и вÑпÑеки Ñе SetRenderScale по подÑазбиÑане е 1.0, Ñой ÑÑÑо Ñе запазва Ñлед пÑомÑна, Ñака Ñе ÑÑнкÑÐ¸Ñ Ð·Ð° екÑпоÑÑиÑане, коÑÑо го е ÑвелиÑила, ÑиÑ
омÑлком пÑеоÑазмеÑÑва вÑеки ÑÐ»ÐµÐ´Ð²Ð°Ñ Ð¿ÑедваÑиÑелен пÑеглед, докаÑо неÑо не го вÑÑне обÑаÑно.
ÐÑегледиÑе Ñ Ð¿ÑокÑÑÑка (scrolling) и ÑаÑÑиÑниÑе пÑенаÑеÑÑÐ°Ð²Ð°Ð½Ð¸Ñ Ð¸Ð¼Ð°Ñ ÑпеÑиален ваÑианÑ. RenderPageToDCClip пÑиема ÑпеÑиÑикаÑÐ¸Ñ Ð·Ð° изÑÑзване (clip) заедно Ñ ÐºÐ¾Ð½ÑекÑÑа на ÑÑÑÑойÑÑвоÑо, Ñака Ñе пÑи инвалидиÑане на една облаÑÑ Ð¾Ñ Ð¿ÑозоÑеÑа Ñе пÑенаÑеÑÑава Ñамо ÑÑ, вмеÑÑо да Ñе ÑаÑÑеÑизиÑа оÑново ÑÑлаÑа ÑÑÑаниÑа. ÐÑи голÑмо маÑабиÑане на ÑÑÑаниÑи Ñ Ð³Ð¾Ð»Ñм ÑоÑÐ¼Ð°Ñ Ñова е ÑазликаÑа Ð¼ÐµÐ¶Ð´Ñ Ð²Ð¸Ð·ÑализаÑоÑ, койÑо Ñледва плавно ленÑаÑа за пÑевÑÑÑане, и ÑакÑв, койÑо закÑÑнÑва и Ñазмазва изобÑажениеÑо.
Ðадание за пеÑаÑ, ÑÑоÑвеÑÑÑваÑо на пÑедваÑиÑÐµÐ»Ð½Ð¸Ñ Ð¿Ñеглед
ÐеÑаÑÑÑ Ñе ÑпÑавлÑва ÑÑез виÑÑÑален пÑинÑеÑ. NewCustomPrinter клониÑа ÑиÑÑемен пÑинÑÐµÑ Ð² лиÑна конÑигÑÑаÑÐ¸Ñ Ð½Ð° библиоÑекаÑа, а SetupPrinter коÑигиÑа Ñози клонинг, без да заÑÑга обÑоÑиÑÑÐµÐ¼Ð½Ð¸Ñ DevMode: Ñ
аÑÑиÑÑа Ñе задава каÑо наÑÑÑойка 1 (конÑÑанÑа DMPAPER_*), а оÑиенÑаÑиÑÑа каÑо наÑÑÑойка 11. ÐÑедимÑÑвоÑо е пÑлна изолаÑиÑ. Ðадена ÑÑлÑга може да оÑпеÑаÑва еÑикеÑи в ÑÐ°Ð·Ð¼ÐµÑ A4, докаÑо пÑинÑеÑÑÑ Ð¿Ð¾ подÑазбиÑане на Ñ
оÑÑа оÑÑава на ÑоÑÐ¼Ð°Ñ Letter, без да е необÑ
одимо вÑзÑÑановÑване на наÑÑÑойкиÑе Ñлед Ñова.
var
Pdf: TPDFlib;
Virt: WideString;
Opt: Integer;
begin
Pdf := TPDFlib.Create;
try
if Pdf.LoadFromFile('report.pdf', '') <> 1 then
raise Exception.Create('load failed');
Virt := Pdf.NewCustomPrinter(Pdf.GetDefaultPrinterName);
Pdf.SetupPrinter(Virt, 1, 9); // setting 1 = paper, DMPAPER_A4
Pdf.SetupPrinter(Virt, 11, 1); // setting 11 = orientation, 1 = portrait
Opt := Pdf.PrintOptions(1, 1, 'Monthly Report'); // fit to paper, auto-rotate + center
Pdf.PrintDocument(Virt, 1, Pdf.PageCount, Opt);
finally
Pdf.Free;
end;
end;
ФÑнкÑиÑÑа PrintOptions заÑлÑжава подÑобно Ñазглеждане. Ð¢Ñ Ð²ÑÑÑа деÑкÑипÑÐ¾Ñ Ð½Ð° опÑииÑе (options handle), койÑо ÑÑÑбва да подадеÑе на PrintDocument или PrintPages; Ñова не е глобално ÑÑÑÑоÑние. ÐенеÑиÑанеÑо на опÑииÑе и поÑледваÑоÑо пÑопÑÑкане на деÑкÑипÑоÑа води до мÑлÑалив оÑказ. ÐаданиеÑо Ñе оÑпеÑаÑва Ñ Ð½Ð°ÑÑÑойкиÑе по подÑазбиÑане и никой не забелÑзва пÑоблема, докаÑо не Ñе изиÑка напаÑване кÑм Ñ
аÑÑиÑÑа, а извÑнÑедно голÑма ÑÑÑаниÑа излезе изÑÑзана. ÐÑгÑменÑÑÑ Ð·Ð° маÑабиÑане на ÑÑÑаниÑаÑа е мÑÑÑоÑо, кÑдеÑо Ñе деÑиниÑа Ñова поведение. ÐипÑаÑа на маÑабиÑане запазва ÑоÑниÑе ÑазмеÑи, коеÑо е важно за ÑоÑмÑлÑÑи, ÑииÑо ÑазмеÑи Ñе измеÑÐ²Ð°Ñ Ñ Ð»Ð¸Ð½Ð¸Ð¹ÐºÐ°. ÐпÑиÑÑа Fit-to-paper пÑеоÑазмеÑÑва вÑиÑко ÑпÑÑмо лиÑÑа. Shrink-large-pages не пÑÐ¾Ð¼ÐµÐ½Ñ Ð½Ð¾ÑмалниÑе ÑÑÑаниÑи и Ñе намеÑва Ñамо когаÑо дадена ÑÑÑаниÑа надÑ
вÑÑÐ»Ñ Ð¿ÐµÑаÑаемаÑа облаÑÑ, коеÑо обикновено е пÑавилноÑо поведение по подÑазбиÑане за ÑмеÑен Ð½Ð°Ð±Ð¾Ñ Ð¾Ñ Ð´Ð¾ÐºÑменÑи. ФлагÑÑ auto-rotate-and-center навигиÑа Ñ
оÑизонÑалниÑе ÑÑÑаниÑи без нÑжда Ð¾Ñ Ð´Ð¾Ð¿ÑлниÑелен код.
ÐÑиложениÑÑа, коиÑо веÑе ÑпÑавлÑÐ²Ð°Ñ TPrinter ÑÑез ÑÑандаÑÑÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð² пÑозоÑÐµÑ Ð½Ð° VCL, Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° го пÑÐµÐ´Ð°Ð´Ð°Ñ Ð´Ð¸ÑекÑно. PrintDocumentToPrinterObject и PrintPagesToPrinterObject пÑÐ¸ÐµÐ¼Ð°Ñ ÐºÐ¾Ð½ÑигÑÑиÑÐ°Ð½Ð¸Ñ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ Ð½Ð° TPrinter, коеÑо запазва ÑÑандаÑÑÐ½Ð¸Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð¾Ð² пÑозоÑÐµÑ Ð·Ð° пеÑÐ°Ñ ÐºÐ°Ñо поÑÑебиÑелÑки инÑеÑÑÐµÐ¹Ñ Ð·Ð° конÑигÑÑиÑане, докаÑо библиоÑекаÑа Ñе гÑижи за ÑендиÑанеÑо на ÑÑÑаниÑиÑе. СмеÑванеÑо на дваÑа подÑ
ода в един и ÑÑÑ ÐºÐ¾Ð´ обикновено вÑзÑÑановÑва неÑоÑноÑÑиÑе в геомеÑÑиÑÑа, коиÑо Ñе опиÑваме да избегнем, Ñака Ñе избеÑеÑе Ñамо единиÑ. ÐзползванеÑо на виÑÑÑален пÑинÑÐµÑ Ðµ подÑ
одÑÑо за авÑомаÑизиÑани ÑÑлÑги без поÑÑебиÑелÑки инÑеÑÑейÑ; подÑ
одÑÑ Ñ TPrinter е пÑедназнаÑен за инÑеÑакÑивни пÑиложениÑ.
СелекÑивноÑо извеждане ÑабоÑи по ÑÑÑÐ¸Ñ Ð½Ð°Ñин. PrintPages пÑиема низ Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¾Ñ ÑÑÑаниÑи, Ñака Ñе подаванеÑо на имеÑо на виÑÑÑÐ°Ð»Ð½Ð¸Ñ Ð¿ÑинÑеÑ, диапазона '2-5,12' и деÑкÑипÑоÑа на опÑииÑе оÑпеÑаÑва ÑÑÑаниÑи Ð¾Ñ 2 до 5 и ÑÑÑаниÑа 12 Ñ Ð¿Ñавилна геомеÑÑиÑ. СÑÑиÑÑ ÑинÑакÑÐ¸Ñ Ñе използва и за ваÑианÑиÑе за пеÑÐ°Ñ Ð²Ñв Ñайл. ÐаÑианÑиÑе за пеÑÐ°Ñ Ð²Ñв Ñайл Ñа пÑакÑиÑноÑо ÑеÑение за авÑомаÑизиÑани ÑÑеди без ÑизиÑеÑки ÑÑÑÑойÑÑва: ÑеÑÑване за ÑегÑеÑÐ¸Ñ Ð½Ð° геомеÑÑиÑÑа на пеÑÐ°Ñ Ð½Ð° ÑÑÑвÑÑ Ð·Ð° компилаÑиÑ, койÑо нÑма инÑÑалиÑани дÑайвеÑи. РендиÑанеÑо на един и ÑÑÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ñ ÐµÐ´Ð½Ð¸ и ÑÑÑи опÑии вÑв Ñайлов аÑÑеÑÐ°ÐºÑ Ð¿Ñи вÑÑко компилиÑане пÑевÑÑÑа ÑегÑеÑииÑе в обикновена Ñазлика (diff) в ÐºÐ¾Ð´Ð¾Ð²Ð¸Ñ Ð°ÑÑ
ив, вмеÑÑо в оплакване Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ ÑÑи ÑедмиÑи по-кÑÑно.
ÐиÑмапи за пÑедваÑиÑелен пÑеглед ÑÑÑ ÑобÑÑвени меÑÑики на пÑинÑеÑа
ÐÑедваÑиÑелен пÑеглед, ÑендиÑан пÑи 96 DPI ÑпÑÑмо пÑедполагаем ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° ÑÑÑаниÑаÑа, дава оÑÐ³Ð¾Ð²Ð¾Ñ Ð½Ð° гÑеÑен вÑпÑоÑ. Той показва как изглежда ÑÑÑаниÑаÑа, а не какво Ñе пÑенеÑе конкÑеÑниÑÑ Ð¿ÑинÑÐµÑ Ð²ÑÑÑ
Ñ Ñази Ñ
аÑÑиÑ. GetPrintPreviewBitmapToString запÑлва Ñази пÑазноÑа, каÑо изгÑажда пÑедваÑиÑÐµÐ»Ð½Ð¸Ñ Ð¿Ñеглед Ð¾Ñ ÑÑÑÐ¸Ñ Ð¿Ð¾ÑÑебиÑелÑки пÑинÑÐµÑ Ð¸ ÑÑÑÐ¸Ñ Ð´ÐµÑкÑипÑÐ¾Ñ Ð½Ð° опÑииÑе, какÑо и ÑамоÑо задание, Ñака Ñе ÑазмеÑÑÑ Ð½Ð° Ñ
аÑÑиÑÑа, оÑиенÑаÑиÑÑа, наÑинÑÑ Ð½Ð° маÑабиÑане, ÑоÑаÑиÑÑа и Ñ
аÑдÑеÑноÑо оÑмеÑÑване Ñе оÑÑазÑÐ²Ð°Ñ Ð² биÑмапа. ÐолÑÑениÑÑ ÑезÑлÑÐ°Ñ Ð¿Ð¾ÐºÐ°Ð·Ð²Ð° ÑоÑно Ñова, коеÑо Ñе Ñе поÑви на Ñ
аÑÑиÑÑа.
procedure ShowPrinterTruePreview(Pdf: TPDFlib; const Virt: WideString; Opt: Integer);
var
Data: AnsiString;
Strm: TMemoryStream;
Bmp: TBitmap;
begin
Data := Pdf.GetPrintPreviewBitmapToString(Virt, 1, Opt, 1200, 0);
Strm := TMemoryStream.Create;
try
Strm.WriteBuffer(PAnsiChar(Data)^, Length(Data));
Strm.Position := 0;
Bmp := TBitmap.Create;
try
Bmp.LoadFromStream(Strm);
PreviewImage.Picture.Assign(Bmp);
finally
Bmp.Free;
end;
finally
Strm.Free;
end;
end;
ÐÑгÑменÑÑÑ MaxDimension огÑаниÑава по-дÑлгаÑа ÑÑÑана на биÑмапа. СÑойноÑÑ Ð¾Ñ 1200 пикÑела оÑигÑÑÑва доÑÑаÑÑÑно ÑÑно изобÑажение за диалогов пÑозоÑÐµÑ Ð¸ поддÑÑжа минимални изиÑÐºÐ²Ð°Ð½Ð¸Ñ ÐºÑм памеÑÑа доÑи за инженеÑни ÑеÑÑежи Ñ Ð³Ð¾Ð»Ñм ÑазмеÑ, пÑи коиÑо пÑлно ÑендиÑане Ñ ÑазделиÑелнаÑа ÑпоÑобноÑÑ Ð½Ð° пÑинÑеÑа Ð¾Ñ 600 DPI би заело гигабайÑи памеÑ.
Ðапазване на избоÑа на пÑинÑÐµÑ Ð¾Ñ Ð¿Ð¾ÑÑебиÑелÑ
ÐиалоговиÑе пÑозоÑÑи за пеÑаÑ, коиÑо забÑавÑÑ Ð½Ð°ÑÑÑойкиÑе Ñи Ð¼ÐµÐ¶Ð´Ñ ÑеÑииÑе, Ñа ÑеÑÑа пÑиÑина за Ñигнали кÑм поддÑÑжкаÑа. ÐвойкаÑа меÑоди GetPrinterDevModeToString and SetPrinterDevModeFromString ÑеÑиализиÑа пÑлнаÑа конÑигÑÑаÑÐ¸Ñ Ð½Ð° дÑайвеÑа на пÑинÑеÑа в кодиÑан низ, койÑо можеÑе да запиÑеÑе в поÑÑебиÑелÑкиÑе пÑедпоÑиÑÐ°Ð½Ð¸Ñ Ð¸ да вÑзÑÑановиÑе пÑи ÑледваÑаÑа ÑеÑиÑ, вклÑÑиÑелно ÑпеÑиÑиÑниÑе за конкÑеÑÐ½Ð¸Ñ Ð´ÑÐ°Ð¹Ð²ÐµÑ Ð¾Ð¿Ñии, коиÑо ÑÑандаÑÑниÑе API не поддÑÑжаÑ. ÐапазвайÑе пÑинÑеÑа по име Ð¾Ñ ÑпиÑÑка на GetPrinterNames, а не по Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑ. ÐодÑедбаÑа на индекÑиÑе Ñе пÑÐ¾Ð¼ÐµÐ½Ñ Ð¿Ñи вÑÑко добавÑне или пÑемаÑ
ване на пÑинÑеÑ, Ñака Ñе запиÑаниÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ðµ ÑиÑ
омÑлком да поÑоÑи гÑеÑно ÑÑÑÑойÑÑво. GetDefaultPrinterName оÑигÑÑÑва ÑезеÑвен ваÑÐ¸Ð°Ð½Ñ Ð² ÑлÑÑай, Ñе запазеноÑо ÑÑÑÑойÑÑво веÑе не ÑÑÑеÑÑвÑва.
ÐзбоÑÑÑ Ð½Ð° Ñава допÑлва вÑзможноÑÑиÑе за ÑÑÑ
Ñанение на наÑÑÑойкиÑе. GetPrinterBins ÑÑобÑава изÑоÑниÑиÑе на Ñ
аÑÑиÑ, пÑедоÑÑавени Ð¾Ñ Ð´ÑайвеÑа, коеÑо е важно за бланки, пÑи коиÑо пÑÑваÑа ÑÑÑаниÑа Ñе взема Ð¾Ñ ÑаваÑа Ñ Ð±Ð»Ð°Ð½ÐºÐ¸, а оÑÑаналиÑе Ð¾Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð° Ñ
аÑÑиÑ. Това е поведение, коеÑо поÑÑебиÑелиÑе оÑÐ°ÐºÐ²Ð°Ñ Ð¿ÑиложениеÑо да запомни, и оÑпеÑаÑванеÑо вÑÑÑ
Ñ Ð³ÑеÑен Ñип Ñ
аÑÑÐ¸Ñ Ñе вÑзпÑиема каÑо гÑеÑка, доÑи ако вÑеки Ð±Ð°Ð¹Ñ Ð¾Ñ PDF Ñайла е напÑлно коÑекÑен.
Ðзползване на една и ÑÑÑа библиоÑека за пÑеглед и пеÑаÑ
ÐоÑледноÑо важно ÑеÑение опÑÐµÐ´ÐµÐ»Ñ ÑоÑноÑÑÑа на извеждане. ÐзбоÑÑÑ Ð½Ð° маÑина за ÑендиÑане Ñе пÑилага какÑо за екÑана, Ñака и за пÑинÑеÑа, поÑади коеÑо ÑÑÑеÑÑвÑва изкÑÑениеÑо да Ñе използва бÑÑза библиоÑека за пÑедваÑиÑелен пÑеглед и пÑеÑизна за пеÑаÑ. ÐзбÑгвайÑе Ñова. ÐзпÑлнениеÑо на пÑедваÑиÑÐµÐ»Ð½Ð¸Ñ Ð¿Ñеглед и на заданиеÑо за пеÑÐ°Ñ ÑÑез ÑазлиÑни маÑини вÑзÑÑановÑва ÑазликиÑе в ÑоÑноÑÑÑа, коиÑо пÑедваÑиÑелниÑÑ Ð¿Ñеглед Ñе опиÑва да пÑÐµÐ¼Ð°Ñ Ð½Ðµ, и Ñова Ñе вижда ÑÑно вÑÑÑ Ñ Ñ Ð°ÑÑиÑÑа. РазликиÑе Ð¼ÐµÐ¶Ð´Ñ Ð²Ð³ÑаденаÑа библиоÑека, Cairo и PDFium Ñа Ñазгледани в ÑендиÑане на PDF Ñ Ð½Ñколко маÑини в Delphi; избеÑеÑе една и Ñ Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñе и за двеÑе Ñели.
ÐокÑменÑи, коиÑо Ñа ÑвÑÑде големи, за да бÑÐ´Ð°Ñ Ð·Ð°Ñедени леÑно в памеÑÑа пÑеди пеÑаÑ, Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° бÑÐ´Ð°Ñ Ð¾ÑвоÑени ÑÑез пÑÑÑ Ð·Ð° диÑекÑен доÑÑÑп, опиÑан в Ñливане, ÑазделÑне и диÑекÑен доÑÑÑп до големи PDF Ñайлове, койÑо ÑендиÑа ÑÑÑаниÑи в конÑекÑÑ Ð½Ð° ÑÑÑÑойÑÑво диÑекÑно Ð¾Ñ Ñайлов деÑкÑипÑоÑ, без да изгÑажда дÑÑвоÑо на докÑменÑа. ÐÑлнаÑа ÑпÑавоÑна инÑоÑмаÑÐ¸Ñ Ð·Ð° API за пеÑÐ°Ñ Ðµ доÑÑÑпна на пÑодÑкÑоваÑа ÑÑÑаниÑа на losLab PDF Library за Delphi.