Экспорт отчетов в PDF является важной частью работы с данными, и любые проблемы, связанные с этим процессом, могут существенно затруднить использование отчетов. В данной статье мы рассмотрим проблему, когда вместо пробелов в PDF-файле появляются квадраты, и предложим решения, которые помогут устранить эту проблему.
Проблема
Пользователь artem101 столкнулся с проблемой, когда при экспорте отчета в PDF с использованием компонента TlrPdfExportFilter вместо пробелов в тексте отчета появлялись квадраты. Это явление было вызвано использованием неразрывного пробела (nbsp) в форматах переменных отчета.
Причины проблемы
Основная причина проблемы заключается в том, что компонент TlrPdfExportFilter не корректно обрабатывает неразрывные пробелы. В результате вместо ожидаемых пробелов в PDF-файле появляются квадраты, что делает отчет нечитаемым.
Решение
Для устранения проблемы artem101 предложил заменить неразрывные пробелы на обычные пробелы. Это решение действительно помогает, но есть и другие подходы, которые могут быть полезны в зависимости от конкретной ситуации.
Пример кода
Рассмотрим пример кода, который демонстрирует, как можно заменить неразрывные пробелы на обычные пробелы в форматах переменных отчета:
procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);
begin
case ParName of
'Кол-во бронирований', 'Кол-во дней', 'Общий доход', 'Общая комиссия',
'Средняя продолжительность', 'Кол-во продлений':
ParValue := DataModule1.GeneralStatsSQLQuery.FieldByName(ParName).AsString;
end;
end;
В данном примере мы используем метод AsString для получения значения поля в виде строки. Если в формате переменной используется неразрывный пробел, его нужно заменить на обычный пробел. Это можно сделать следующим образом:
procedure TForm1.frReport1GetValue(const ParName: String; var ParValue: Variant);
begin
case ParName of
'Кол-во бронирований', 'Кол-во дней', 'Общий доход', 'Общая комиссия',
'Средняя продолжительность', 'Кол-во продлений':
ParValue := DataModule1.GeneralStatsSQLQuery.FieldByName(ParName).AsString;
// Замена неразрывных пробелов на обычные
ParValue := StringReplace(ParValue, #160, ' ', [rfReplaceAll]);
end;
end;
Альтернативное решение
Если проблема связана с некорректной обработкой символов в TlrPdfExportFilter, можно рассмотреть использование другого компонента для экспорта отчетов в PDF. Одним из таких компонентов является TFPReport.
Пример использования TFPReport для экспорта отчета в PDF:
procedure TForm1.SavePDFButtonClick(Sender: TObject);
var
SaveDlg: TSaveDialog;
PDFExporter: TFPReportPDFExporter;
begin
SaveDlg := TSaveDialog.Create(nil);
try
SaveDlg.FileName := Format('report %s %s.pdf', [DateToStr(Now),
StringReplace(TimeToStr(Now), ':', '-', [rfReplaceAll])]);
SaveDlg.Filter := 'PDF|*.pdf';
SaveDlg.DefaultExt := 'pdf';
if SaveDlg.Execute then
begin
PDFExporter := TFPReportPDFExporter.Create(nil);
try
PDFExporter.Report := frCompositeReport1;
PDFExporter.ExportToFile(SaveDlg.FileName);
finally
PDFExporter.Free;
end;
end;
finally
SaveDlg.Free;
end;
end;
В данном примере мы используем компонент TFPReportPDFExporter для экспорта отчета в PDF. Этот компонент может быть более надежным в обработке символов и неразрывных пробелов.
Заключение
Проблема с квадратами вместо пробелов при экспорте отчета в PDF с использованием TlrPdfExportFilter может быть решена путем замены неразрывных пробелов на обычные пробелы. Однако, если проблема сохраняется, можно рассмотреть использование альтернативных компонентов для экспорта отчетов в PDF, таких как TFPReportPDFExporter. Эти решения помогут обеспечить корректное отображение текста в экспортированных PDF-файлах.
Context: В статье рассматривается проблема появления квадратов вместо пробелов при экспорте отчетов в PDF и предлагается несколько решений для её устранения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.