Я делаю PDF-файл с возможностью поиска, используя С# и PDFSharp. По сути, я запускаю изображение PDF через отдельное приложение OCR, чтобы получить текст, а затем открываю PDF (используя PDFSharp) и пишу текст поверх изображения PDF. Все это работает. Затем пользователь открывает окончательный PDF-файл — ищет текст в PDF-файле, и он выделяет место в PDF-файле, в котором есть текст.
Проблема в том, что запись текста поверх PDF блокирует исходное изображение PDF. Я хочу написать прозрачный текст поверх PDF. Так что текст есть - но текст не виден людям
В этом примере показано, как это сделать, но это не работает http://www.pdfsharp.net/wiki/Graphics-sample.ashx#Show_how_to_get_text_metric_information_19
Мой код:
XColor transparentColor = XColors.White;
transparentColor.A = 0;
XSolidBrush transparentBrush = new XSolidBrush(transparentColor);
xTextFormatter.DrawString(block.Text, font, transparentBrush, xRect);
В некоторых сообщениях, которые я нашел, говорилось о том, как это должно быть сделано в пространстве CMYK. Я нашел этот пример http://www.pdfsharp.net/wiki/ColorsCMYK-sample.ashx И попробовал этот код
XColor transparentColor = XColor.FromCmyk(0, 0, 0, 0);
XSolidBrush transparentBrush = new XSolidBrush(transparentColor);
newPdfDocument.Options.ColorMode = PdfColorMode.Cmyk;
xTextFormatter.DrawString(block.Text, font, transparentBrush, xRect);
Оба теста создают белый текст поверх изображения PDF. Есть идеи? Спасибо!
@RebootDeluxe - Спасибо. Фактический ответ: XSolidBrush(XColor.FromArgb(1, 0, 0, 0));. Противоположность тому, что должно быть. Но ваш ответ заставил меня спросить - а что, если я сделаю наоборот? И сработало наоборот! Спасибо
Я пробовал new XSolidBrush(XColor.FromArgb(0,0,0,0))
с версией 1.50.5147 от NuGet, и полученный текст был полностью прозрачным в Adobe Reader. Он работает так, как рекламируется, и я не могу подтвердить, что «сработало противоположное».
Похоже, что флаг непрозрачности (альфа) работает противоположно тому, что должен в версии 1.50.5147 PDFSharp, которую я получил от NuGet.org. @RebootDeluxe должен был быть правильным. Но то, что работает - это наоборот. XSolidBrush(XColor.FromArgb(1, 0, 0, 0));.
Обратите внимание, что с XColor.FromArgb
диапазон для A составляет от 0 до 255 (тип — byte). XColor.FromArgb(0,0,0,0)
создает черный цвет со 100% прозрачностью — и я ничего не вижу в своем PDF-файле, используя Adobe Reader с текущей версией PDFsharp. XColor.FromArgb(1,0,0,0)
создает черный цвет с прозрачностью 99,6%. Диапазон значений свойства A
XColor — от 0 до 1 (тип — double).
Я вернулся и проверил еще раз. 0,0,0,0 создает черный текст. 1,0,0,0 - видимого текста нет. Я буду рад отправить вам документы по электронной почте. Может потому что это .NET Core 6 и VS 2022?
Какой пакет NuGet вы используете? Используете ли вы «официальные» пакеты, опубликованные пользователем PDFsharp-Team nuget.org/profiles/PDFsharp-Team ? Я попробовал официальные пакеты 1.50.5147, и XColor.FromArgb(0,0,0,0)
работал как надо, но я не использовал .NET 6. Шаблон сообщения о проблеме можно использовать для сообщения об ошибках. pdfsharp.net/wiki/IssueSubmissions.ashx
System.Drawing.Common, версия 6.0 PDFSharp, версия 1.50.5147 Newtonsoft.json, версия 1.50.5147 AwsSdk.Textract, версия 3.7.102.1 — для выполнения OCR
Вам не нужен белый текст (CMYK = 0). Вам нужен прозрачный текст, с альфа = 0. Возможно, это поможет вам: stackoverflow.com/questions/45551941/pdfsharp-watermark Думаю, это должно сработать:
XSolidBrush(XColor.FromArgb(0, 0, 0, 0));